我有一个基于瓷砖的游戏项目,使用OpenGL是我的第一个真正意义上的IT技术项目。我想将每个瓷砖渲染成一个3D对象。所以我首先创建了一些对象,如立方体和球体,并为它们提供了顶点法线,在平面着色的即时模式下进行渲染。但由于每个层级有大约10,000个对象,速度有点慢。所以我把我的顶点和法线放到了VBOs里。
这就遇到了第一个问题:在使用VBOs之前,我只是对每个对象使用
所以我做了一些研究。我没有找到任何关于我的具体问题的答案,但我读到,应该实现着色器并为其提供统一的矩阵,而不是使用
我想“也许这也可以解决我的问题”,并实现了一个第一个小的顶点着色器程序,它只是稍微拉伸了我的对象,只是为了看看是否能够让着色器工作,然后再关注细节。
这就遇到了第一个问题:在使用VBOs之前,我只是对每个对象使用
push()
和pop()
矩阵,并使用glTranslate
/glRotate
来将它们放置在我的场景中。但当我使用VBOs时,灯光开始表现得很奇怪。光源似乎不再是相机后面的固定位置,而是随着我的物体旋转。当我绕着它们移动180度时,我只能看到阴影。所以我做了一些研究。我没有找到任何关于我的具体问题的答案,但我读到,应该实现着色器并为其提供统一的矩阵,而不是使用
glTranslate
/glRotate
。我想“也许这也可以解决我的问题”,并实现了一个第一个小的顶点着色器程序,它只是稍微拉伸了我的对象,只是为了看看是否能够让着色器工作,然后再关注细节。
void main(void)
{
vec4 v = gl_Vertex;
v.x = v.x * 0.5;
v.y = v.y * 0.5;
gl_Position = gl_ModelViewProjectionMatrix * v;
}
嗯,我的对象被拉伸了-但现在OpenGL的平面着色已经不可用。我只能得到白色阴影。我找不到任何有用的信息。所以我有几个问题:
我只能同时使用一个着色器吗?当使用自己的着色器时,OpenGL的平面着色会关闭吗?因此,我是否必须自己实现平面着色?
那么我的向量法线呢?我在某处读到,有一种称为normal-matrix的东西。也许我修改顶点时也必须对我的法线进行操作?