我完成的着色器用红色遮挡整个屏幕,而不是仅遮蔽我正在绘制的四边形。这里描述了我在代码中完成工作的方式。
#version 140 core
// vertex shader
in vec3 position;
out vec3 color;
void main(void)
{
gl_Position = vec4(position,1.0);
color = vec3(1.0,0.0,0.0);
}
#version 140 core
// fragment shader
in vec3 color;
out vec4 outColor;
void main(void)
{
outColor = vec4(color,0.1);
}
然后我执行vao vbo的顺序是
/// vao buffer
glGenVertexArrays(1,&vao);
glBindVertexArray(vao);
/// vbo - for vertices
glGenBuffers(1,&vbo1);
glBindBuffer(GL_ARRAY_BUFFER, ... );
glBufferData(GL_ARRAY_BUFFER, ...);
glVertexAttribPointer(0, 3, GL_FLOAT, ... );
glEnableVertexAttribArray(0);
glBindBuffer(0);
/// vbo for indices
glGenBuffers(1,&vbo2);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ... );
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ...);
glVertexAttribPointer(1, 0, GL_UNSIGNED_INT);
glEnableVertexAttribArray(1);
glBindBuffer(0);
编译着色器程序,然后使用
与顶点位置绑定glBindAttribLocation(progID, 0, "position");
我认为“position”与顶点着色器中的变量名称相同,并且它被绑定到第0个位置,因为多边形的顶点位于VAO Buffer中的第0个位置。我该怎么解决这个问题呢?
答案 0 :(得分:1)
绘图区域为-1,-1
至1,1
,因此如果四边形大于该范围,则绘制整个屏幕。
要考虑矩阵堆栈(输入或glRotate和朋友),您需要在顶点着色器中将位置乘以gl_ModelViewMatrix
。但是,这在140核心中不可用,因此您需要兼容性或维护并明确传递矩阵。