如何解决关于glVertexAttribPointer索引参数的说明
我有一个非常简单的程序,可以在OpenGL中显示3D三角形。我输入的帽子价值,无法正确显示。我将以下数组放入顶点缓冲区
float triangle[] = {
// x y z r g b a
0.2f,-0.2f,-0.5f,0.0f,1.0f,0.2f,1.0f
};
然后我将以下内容传递给顶点着色器
glEnableVertexAttribArray(0);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(float) * 7,0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1,4,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;
};
这是怎么了?
解决方法
如果绑定了命名的缓冲区对象,则glVertexAttribPointer
的最后一个参数将被视为缓冲区数据存储区中的字节偏移。
color属性的偏移量为3*sizeof(float)
个字节:
glEnableVertexAttribArray(0);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(float) * 7,0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1,4,(void*)(sizeof(float) * 3)); // <--- byte offset
该属性包含7个组成部分( x , y , z , r , g , b , a )。顶点坐标的偏移为0,因为这是元组中的前3个分量。颜色的偏移量为3*sizeof(float)
,因为这是从4到7的分量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。