我試圖讓 4 個整數通過顏色頂點屬性指標上的步幅來表示 VBO 中所有頂點的顏色,但是,它似乎只為顏色取值一次,因此,分配verticii 的其余部分與圖片中的一樣黑色:圖片。預期的結果是所有的verticii 都是白色的。
以下是相關的代碼:
int triangleData[18] =
{
2147483647,2147483647,2147483647,2147483647,//opaque white
0,100, //top
100,-100, //bottom right
-100,-100 //bottom left
};
unsigned int colorVAO, colorVBO;
glGenVertexArrays(1, &colorVAO);
glGenBuffers(1, &colorVBO);
glBindVertexArray(colorVAO);
glBindBuffer(GL_ARRAY_BUFFER, colorVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangleData), triangleData, GL_STATIC_DRAW);
glVertexAttribPointer(0, 2, GL_INT, GL_FALSE, 2 * sizeof(int), (void*)(4*sizeof(int)));
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 4, GL_INT, GL_TRUE, 0, (void*)0);
glEnableVertexAttribArray(1);
頂點著色器:
#version 330 core
layout (location = 0) in vec2 aPos;
layout (location = 1) in vec4 aColor;
out vec4 Color;
uniform mat4 model;
uniform mat4 view;
uniform mat4 ortho;
void main()
{
gl_Position = ortho * view * model * vec4(aPos, 1.0, 1.0);
Color = aColor;
}
片段著色器:
#version 330 core
out vec4 FragColor;
in vec4 Color;
void main()
{
FragColor = Color;
}
uj5u.com熱心網友回復:
從以下檔案glVertexAttribPointer
:
stride
指定連續通用頂點屬性之間的位元組偏移量。如果 stride 為 0,則通用頂點屬性被理解為緊密封裝在陣列中。
將步幅設定為 0 并不意味著為每個頂點讀取相同的資料。這意味著資料在緩沖區中一個接一個地打包。
如果您希望所有頂點使用相同的資料,您可以禁用該屬性并使用glVertexAttrib
,或者您可以使用單獨的頂點格式(從 OpenGL 4.3 或 ARB_vertex_attrib_binding 開始可用),類似于:
glBindVertexBuffer(index, buffer, offset, 0);
0 的步幅實際上意味著沒有步幅。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440072.html