0

当我通过 LWJGL 学习 OpenGL 时,我一直在浏览 LWJGL wiki 上的教程。具体来说,这个.

我的问题是,尽管我已经复制了该代码,调用调用,函数调用函数,两个顶点属性指针需要切换(所以代码如下所示:

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,正如预期的那样,可以进行漂亮的渐变渲染。但是,如果我在切换索引的情况下运行它(我认为它应该工作的方式,我会得到这个:

令人困惑的疯狂

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

4

1 回答 1

1

您不应该像那样对属性 id 进行硬编码,而只是希望它们最终链接到正确的着色器属性。

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

于 2012-11-01T23:40:30.940 回答