当我通过LWJGL学习OpenGL时,我一直在浏览LWJGL wiki上的教程。具体而言,this one。
我的问题是,尽管我已复制该代码,调用函数调用函数,但需要切换两个顶点属性指针(因此代码如下所示:
GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, Vertex.sizeInBytes,
// Put the colors in attribute list 1
GL20.glVertexAttribPointer(0, 4, GL11.GL_FLOAT, false, Vertex.sizeInBytes,
Vertex.elementBytes * 4);
将其切换为位置索引为1且颜色索引为0,按预期进行漂亮的渐变渲染。但是,如果我在切换索引的情况下运行它(我认为它应该工作的方式,我得到这个:
显然,在研究了这个渲染一段时间后,位置和颜色数据已经切换,因此,切换索引号完全解决了问题,但我很确定我已经正确地遵循了所有内容。代码有什么问题?为什么这是一个混蛋?
答案 0 :(得分:1)
你不应该像这样硬编码属性id,只是希望它们最终链接到正确的着色器属性。
您需要使用glBindAttribLocation(在glLinkProgram之前)或glGetAttribLocation,以便您可以将着色器变量映射到其ID号。