【发布时间】:2014-12-09 03:39:42
【问题描述】:
所以,我现在在我的程序中与着色器作斗争。基本上这是主循环:
heightmap_shader.use();
nanosuit_shader.use();
glm::mat4 nanosuitProj, nanosuitModel, nanosuitView;
nanosuitProj = glm::perspective(glm::radians(45.0f), float(800/600), 0.1f, 1000.0f);
nanosuitView = camera.getViewMatrix();
glUniformMatrix4fv(glGetUniformLocation(nanosuit_shader.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(nanosuitProj));
glUniformMatrix4fv(glGetUniformLocation(nanosuit_shader.getProgramID(), "view"), 1, GL_FALSE, glm::value_ptr(nanosuitView));
// Draw the loaded model
nanosuitModel = glm::translate(nanosuitModel, glm::vec3(0.0f, 2.0f, 0.0f)); // Translate it down a bit so it's at the center of the scene
nanosuitModel = glm::scale(nanosuitModel, glm::vec3(0.05f, 0.05f, 0.05f)); // It's a bit too big for our scene, so scale it down
glUniformMatrix4fv(glGetUniformLocation(nanosuit_shader.getProgramID(), "model"), 1, GL_FALSE, glm::value_ptr(nanosuitModel));
nanosuit_Model.Draw(nanosuit_shader);
glfwSwapBuffers(window);
所以基本上我首先使用着色器(高度图),但什么也不做。之后,我更改为实际必要的着色器,然后绘制对象。 这不起作用。屏幕是空的。
如果我注释掉
heightmap_shader.use()
程序运行良好。有人可以解释一下吗?我做错了吗?
在我的脑海中,即使使用第一个着色器,程序也应该可以工作,因为我每次都在切换它。但是我的程序好像看不懂。
注意:方法use()是:
glUseProgram(shaderId)
其中shaderId是shader编译后的id。
编辑:
只想说这应该可以工作,但它没有工作,因为我的 Shader 类中有一个错误。
【问题讨论】:
-
“着色器类中的错误”在我的列表中的 #5-10 中。这是“等”。 :)