C++ OpenGL glm::perspective()不';无法正常工作,对象为';t 3d
这是我的游戏循环。我知道我不需要两次声明这些变量,但我这样做只是为了以防万一:C++ OpenGL glm::perspective()不';无法正常工作,对象为';t 3d,c++,opengl,glfw,glm-math,C++,Opengl,Glfw,Glm Math,这是我的游戏循环。我知道我不需要两次声明这些变量,但我这样做只是为了以防万一: while (!glfwWindowShouldClose(window)) { GLfloat currentFrame = glfwGetTime(); deltaTime = currentFrame - lastFrame; lastFrame = currentFrame; glfwPollEvents();
while (!glfwWindowShouldClose(window))
{
GLfloat currentFrame = glfwGetTime();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
glfwPollEvents();
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(shaderProgram);
glm::mat4 view;
view = glm::rotate(view, 50.0f, glm::vec3(0.0f, 0.0f, 1.0f));
glm::mat4 projection;
projection = glm::perspective(-45.0f, float(WIDTH / HEIGHT), 0.1f, 100.0f);
GLint modelLoc = glGetUniformLocation(shaderProgram, "model");
GLint viewLoc = glGetUniformLocation(shaderProgram, "view");
GLint projLoc = glGetUniformLocation(shaderProgram, "projection");
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
glBindVertexArray(VAO);
glm::mat4 model;
model = glm::scale(model, glm::vec3(0.5f, 0.5f, 0.5f));
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
glDrawArrays(GL_TRIANGLES, 0, 36);
glBindVertexArray(0);
glUseProgram(shaderProgram2);
glm::mat4 view2;
view2 = translate(view2, glm::vec3(0.0f, 0.0f, -0.6f));
GLint modelLoc2 = glGetUniformLocation(shaderProgram2, "lightmodel");
GLint viewLoc2 = glGetUniformLocation(shaderProgram2, "lightview");
GLint projLoc2 = glGetUniformLocation(shaderProgram2, "lightprojection");
glm::mat4 model2;
model2 = glm::scale(model2, glm::vec3(0.5f, 0.5f, 0.5f));
glUniformMatrix4fv(viewLoc2, 1, GL_FALSE, glm::value_ptr(view2));
glUniformMatrix4fv(projLoc2, 1, GL_FALSE, glm::value_ptr(projection));
glUniformMatrix4fv(modelLoc2, 1, GL_FALSE, glm::value_ptr(model2));
glBindVertexArray(lightVAO);
glDrawArrays(GL_TRIANGLES, 0, 36);
glBindVertexArray(0);
glfwSwapBuffers(window);
}
这就是输出:
我不清楚glm::perspective()输入应该是弧度还是度,但我尝试了两者,它们都给出了相同的放大非3D结果。我不知道我做错了什么。我是根据教程做这些的。我的代码体与教程中我自己创建的几个类的save完全相同。这里可能有什么问题?尝试
float(WIDTH)/HEIGHT
而不是float(WIDTH/HEIGHT)
glm的更新版本glm
为glm::perspective()取弧度。您正在通过度数,并且由于某种原因出现了一个负角度。@Tulon:没有解决这个问题。我得把它调高到90度。它修复了它,现在我看到了第二个矩形,但我没有看到第一个矩形,它也不是3D的。@Tulon:我修复了这个问题。这是第一张他们只是重叠的。但是它们都不是3D的:你知道为什么吗?我不知道你所说的“但它们都不是3D的”是什么意思。试着用float(WIDTH)/HEIGHT
代替float(WIDTH/HEIGHT)
glm
的新版本,用弧度表示glm::perspective()
。您正在通过度数,并且由于某种原因出现了一个负角度。@Tulon:没有解决这个问题。我得把它调高到90度。它修复了它,现在我看到了第二个矩形,但我没有看到第一个矩形,它也不是3D的。@Tulon:我修复了这个问题。这是第一张他们只是重叠的。但它们都不是3D的:你知道为什么吗?我不知道你说的“但它们都不是3D的”是什么意思