所以我有一個工作程序,顯示從高度地圖生成的地形網格。我想現在使用佈局限定符來聲明頂點屬性,但是我遇到了問題。當我只使用內置的gl_Normal作爲我的法線時,一切正常。當我使用佈局限定符聲明的普通函數時,它不起作用。無論如何,頂點顯示都很好。我不確定我在這裏做錯了什麼。glsl佈局與glvertexattribpointer問題
這裏是緩衝區的產生:在
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, TerrainIVBO);
glPatchParameteri(GL_PATCH_VERTICES, 3);
glDrawElements(GL_PATCHES, Terrains[IID].Index.size(), GL_UNSIGNED_INT, 0);
如果我不使用VertexAttribArray /指針,我用glVertexPointer/glNormalPointer:
glGenBuffers(1, &TerrainPVBO);
glBindBuffer(GL_ARRAY_BUFFER, TerrainPVBO);
glBufferData(GL_ARRAY_BUFFER, Terrains[IID].Points.size() * sizeof(vec3f), &Terrains[IID].Points[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glGenBuffers(1, &TerrainNVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, TerrainNVBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, Terrains[IID].Normals.size() * sizeof(vec3f), &Terrains[IID].Normals[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
然後倒在我的渲染功能繪圖函數(在着色器中使用gl_Normal/gl_Vertex),一切正常。
這是着色器,如果這有助於在所有:
#version 420
uniform mat3 NormalMatrix;
layout (location = 0) in vec4 vertex;
layout (location = 1) in vec3 normal;
out gl_PerVertex{
vec4 gl_Position;
};
out vec3 normalTCS;
void main()
{
gl_Position = vertex;
normalTCS = NormalMatrix * normal;
}
我知道我在做一些愚蠢的事在這裏,但我覺得這個過程有點混亂。任何幫助將不勝感激!
我知道我在做一些愚蠢的事情。我的法線似乎與以前不一樣,但它們似乎確實是準確的。它是element_array的問題僅在我轉換爲此方法時才創建。這就是之前的原因。乾杯! – Vanic