我有一个非常简单的程序来在 OpenGL 中显示一个 3D 三角形。我输入的帽子值,它没有正确显示。我将以下数组放入顶点缓冲区
float triangle[] = {
// x y z r g b a
0.2f, -0.2f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
-0.2f, -0.2f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
-0.2f, 0.2f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,
0.0f, -0.2f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f
};
我使用以下内容将它们传递给顶点着色器
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 7, 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(float) * 7, 0);
但是输出三角形有一个奇怪的蓝色区域,即使位置是正确的,这没有意义,因为输入颜色应该是黑色的。我看到有些人使用索引作为 sizeof(float) * 3 和 sizeof(float) * 4,但这会使三角形变为绿色并导致位置错误。docs.gl 条目非常模糊,没有提供任何示例。这是我的着色器
片段着色器
#version 330 core
out vec4 color;
in vec4 outColor;
void main() {
out vec4 outColor;
uniform mat4 transform;
void main() {
gl_Position = transform * inPos;
outColor = inColor;
};
这里有什么问题?