【发布时间】:2016-03-15 13:11:29
【问题描述】:
我正在使用 GLM 和 GLFW 来绘制一个正方形。我有以下代码:
static const GLfloat g_vertex_buffer_data[] = {
// square
0, 0, 0,
1, 0, 0,
0, 0, 1,
1, 0, 0,
1, 0, 1,
0, 0, 1,
};
glm::mat4 Projection = glm::perspective(glm::radians(45.0f), (float)_width / (float)_height, 0.1f, 100.0f);
glm::mat4 View = glm::lookAt(glm::vec3(0.f, 5.f, 0.f), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
glm::mat4 Model = glm::mat4(1.0f);
glm::mat4 mvp = Projection * View * Model;
GLuint MatrixID = glGetUniformLocation(programID, "MVP");
glm::mat4 MyModel = glm::mat4(1.0f);
glm::mat4 MyMVP = Projection * View * MyModel;
奇怪的事情就在这里:
glm::mat4 View = glm::lookAt(glm::vec3(0.f, 5.f, 0.f), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
现在,我什么也没看到。但是当我把它改成这样时:
glm::mat4 View = glm::lookAt(glm::vec3(0.f, 5.f, 0.000001f), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
然后我实际上能够看到广场。 为什么当我将 Z 坐标更改为零时看不到它,为什么当我将其更改为 >0 时它会起作用?我实际上希望它为零(所以从 5 个单位到中心点)但是由于某种原因这不起作用。
---编辑---
这是glm::vec3(0.f, 5.f, 0.0000000000001f)
这是glm::vec3(0.f, 5.f, 0.000000000000f)的结果
【问题讨论】:
-
你的上向量应该是 (0,0,1) 而不是 (0,1,0)。目前您的视图方向和向上矢量是相同的,因此叉积不能很好地工作。当您更改为 0.001f 时,向上矢量可以“近似”。
-
@aslg 这行得通,但是当我像你说的那样改变向上的向量时,它的“意思”是什么?实际发生了什么?顺便修改了一下