2012-11-01 26 views
0

当我通过LWJGL学习OpenGL时,我一直在浏览LWJGL wiki上的教程。具体来说,this oneLWJGL glVertexAttribPointer索引切换

我的问题是,尽管我已经重复的代码,请来电呼叫,为功能的功能,这两个顶点属性指针需要进行切换(所以代码如下所示:

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,如预期的那样创建一个不错的渐变渲染。但是,如果我运行索引切换(我认为应该应该工作,我得到这个:

Confusing insanity

显然,在研究了这个渲染一段时间之后,位置和颜色数据已经被切换了,因此,切换索引号完全解决了这个问题,但我确信我已经正确地执行了一切。代码有什么问题?为什么这是一个混蛋?

回答

1

你不应该硬编码这样的属性id,只是希望它们最终链接到正确的着色器属性。

您需要使用glBindAttribLocation(glLinkProgram之前)或glGetAttribLocation,以便您可以将着色器变量映射到它们的ID号。

+0

哦,我的天哪。一切都很有意义。为什么没有在教程中提到,我想知道? – SirYancy