【发布时间】:2015-10-15 20:06:13
【问题描述】:
我一直在学习有关现代 OpenGL 和 GLM 库的教程 我正在介绍用于转换模型、定位相机和添加视角的矩阵。
我有一个三角形:
const GLfloat vertexBufferData[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
我有我的着色器:
GLuint programID = loadShaders("testVertexShader.glsl",
"testFragmentShader.glsl");
我有一个不进行转换的模型矩阵:
glm::mat4 modelMatrix = glm::mat4(1.0f); /* Identity matrix */
我有一个相机矩阵:
glm::mat4 cameraMatrix = glm::lookAt(
glm::vec3(4.0f, 4.0f, 3.0f), /*Camera position*/
glm::vec3(0.0f, 0.0f, 0.0f), /*Camera target*/
glm::vec3(0.0f, 1.0f, 0.0f) /*Up vector*/
);
我有一个投影矩阵:
glm::mat4 projectionMatrix = glm::perspective(
90.0f, /*FOV in degrees*/
4.0f / 3.0f, /*Aspect ratio*/
0.1f, /*Near clipping distance*/
100.0f /*Far clipping distance*/
);
然后我将所有矩阵相乘,得到我要绘制的三角形的最终矩阵:
glm::mat4 finalMatrix = projectionMatrix
* cameraMatrix
* modelMatrix;
然后我将矩阵发送到 GLSL(我认为?):
GLuint matrixID = glGetUniformLocation(programID, "MVP");
glUniformMatrix4fv(matrixID, 1, GL_FALSE, &finalMatrix[0][0]);
然后我做一些我不太了解的着色器:
/*vertex shader*/
#version 330 core
in vec3 vertexPosition_modelspace;
uniform mat4 MVP;
void main(){
vec4 v = vec4(vertexPosition_modelspace, 1);
gl_Position = MVP * v;
}
/*fragment shader*/
#version 330 core
out vec3 color;
void main(){
color = vec3(1, 1, 0);
}
一切都编译并运行,但我看不到三角形。我已经移动了三角形和相机,认为相机可能指向错误的方向,但没有成功。在我们介绍矩阵之前,我能够在屏幕上成功地得到一个三角形,但现在,没有三角形。三角形应该在原点,相机距离原点几个单位,看着原点。
【问题讨论】:
标签: c++ opengl matrix shader glm-math