我似乎无法将我的Square放入正确的查看矩阵中,以便使用glm
函数对其进行操作。
这基本上是我的main.cpp
,它由init()
组成,它加载纹理,glsl vert / frag文件并构造ground class
的方块。还有一个reshape()
和display()
函数调用drawGround()
来渲染实际的正方形。
在drawGround()
内部,我添加了模型/视图矩阵,并做了一个小翻译,但它不起作用......我已经玩了几个小时,似乎无法得到它工作....
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawGround();
glUseProgram(0);
}
void drawGround(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(myShader.handle());
GLuint matLocation = glGetUniformLocation(myShader.handle(), "ProjectionMatrix");
glUniformMatrix4fv(matLocation, 1, GL_FALSE, &ProjectionMatrix[0][0]);
glm::mat4 viewingMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0,0,-1));
ModelViewMatrix = glm::translate(viewingMatrix,glm::vec3(15.0,0.0,0));
glUniformMatrix4fv(glGetUniformLocation(myShader.handle(), "ModelViewMatrix"), 1, GL_FALSE, &ModelViewMatrix[0][0]);
ground.render(texName, &myShader);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glUseProgram(0);
}
然而在我的其他程序中,我有以下函数renderSky()
,它可以正常工作。
请帮我弄明白我哪里错了...
如果您需要查看Ground Class,请告诉我。
void renderSky(){
glUseProgram(mySkyShader.handle());
GLuint matLocation = glGetUniformLocation(mySkyShader.handle(), "ProjectionMatrix");
glUniformMatrix4fv(matLocation, 1, GL_FALSE, &ProjectionMatrix[0][0]);
glm::mat4 viewingMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0,0,-1));
ModelViewMatrix = glm::translate(viewSkyMatrix,glm::vec3(15,0,0));
glUniformMatrix4fv(glGetUniformLocation(mySkyShader.handle(), "ModelViewMatrix"), 1, GL_FALSE, &ModelViewMatrix[0][0]);
skyBox.render();
glUseProgram(0);
}
这是顶点着色器:
#version 150
in vec3 in_Position;
in vec4 in_Color;
out vec4 ex_Color;
in vec2 in_TexCoord;
out vec2 ex_TexCoord;
void main(void)
{
gl_Position = vec4(in_Position, 1.0);
ex_Color = in_Color;
ex_TexCoord = in_TexCoord;
}
答案 0 :(得分:0)
为了使对象进入正确的模型/视图空间,必须将其与顶点着色器中的in_Position
相乘。
gl_Position = vec4(in_Position, 1.0);
变成了这个:
gl_Position = ProjectionMatrix * ModelViewMatrix * vec4(in_Position, 1.0);
此外,模型和投影矩阵需要在着色器中添加制服:
uniform mat4 ModelViewMatrix;
uniform mat4 ProjectionMatrix;
顶点着色器使用此附加代码,并允许任何后续glm
函数操纵矩阵。