C++ GLSL着色:整个屏幕是彩色的,而不仅仅是一个四边形
我所做的着色器将整个屏幕着色为红色,而不是仅着色我正在绘制的四边形。这里描述了我在代码中的工作方式C++ GLSL着色:整个屏幕是彩色的,而不仅仅是一个四边形,c++,opengl,glsl,fragment-shader,vertex-shader,C++,Opengl,Glsl,Fragment Shader,Vertex Shader,我所做的着色器将整个屏幕着色为红色,而不是仅着色我正在绘制的四边形。这里描述了我在代码中的工作方式 #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
#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");
我假设“位置”与顶点着色器中的变量名相同,并且它绑定到第0个位置,因为多边形的顶点位于VAO缓冲区中的第0个位置。我应该如何解决这里的问题 绘图区域为
-1,-1
至1,1
,因此,如果四元组大于该值,则绘制整个屏幕
要考虑矩阵堆栈(输入或glRotate和friends),需要在顶点着色器中将位置与
gl\u ModelViewMatrix
相乘。但是,这在140 core中不可用,因此您要么需要兼容性,要么维护并显式传递矩阵。顶点是什么?@ratchetfreak顶点是顶点的x、y和z位置。在这里,我将四边形的4个顶点存储到vbo缓冲区中,并使用索引绘制它们。我的意思是实际值浮动顶点[]={-5.0f,5.0f,0.0f,-5.0f,-5.0f,5.0f,-5.0f,0.0f,5.0f,0.0f};在渲染之前,我使用glRotate函数旋转四边形,如果我不启用着色器,我可以看到四边形绕Y轴旋转。如果启用着色器,则整个屏幕为红色。