【发布时间】:2014-06-18 12:44:04
【问题描述】:
我正在开发一个使用顶点的 3D 项目,我从一个简单的 gluLookAt 开始,以便让第一人称相机在环境中移动,我这样使用它:
gluLookAt(_position.x,_position.y,_position.z,
_target.x,_target.y,_target.z,
0,0,1);
一切正常,我正在根据鼠标的位置和角度(theta 和 phi)计算我的目标,我的项目继续使用顶点来解决性能问题,所以我不得不为这些新的相机使用相同的相机对象,为了做到这一点,我以这种方式使用了 GLM 库:
glm::mat4 Projection = glm::perspective(90.0f, 800.0f / 600.0f, 0.1f, 100.f);
glm::mat4 View = glm::lookAt(
glm::vec3(position.x,position.y,position.z),
glm::vec3(target.x,target.y,target.z),
glm::vec3(0,0,1)
);
glm::mat4 Model = glm::mat4(1.0f); !
// Our ModelViewProjection : multiplication of our 3 matrices
glm::mat4 MVP = Projection * View * Model;
GLuint MatrixID = glGetUniformLocation(this->shaderProgram, "MVP");
这是我使用的着色器:
const GLchar* default_vertexSource =
"#version 150 core\n"
"in vec2 position;"
"in vec3 color;"
"out vec3 Color;"
"uniform vec3 translation;"
"uniform mat4 rotation;"
"uniform mat4 MVP;"
"void main() {"
" Color = color;"
" gl_Position = MVP*rotation*vec4(position.x + translation.x, position.y + translation.y, 0.0 + translation.z, 1.0);"
"}";
发生的情况是我的对象的坐标参考与我的相机不同,它在当前 x/z 平面上绘制在其上方,而在 x/y 平面上它应该面向相机。
【问题讨论】:
-
修改我的代码后,似乎相机很好,只是我的对象被绘制在它的顶部,我不知道为什么如果有人可以为我点亮它,那就太好了。
-
好像我的顶点坐标参考和glLookAt不一样,我的Cube和我的相机画的一样,但不是我的顶点数组...