Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GLSL着色:整个屏幕是彩色的,而不仅仅是一个四边形_C++_Opengl_Glsl_Fragment Shader_Vertex Shader - Fatal编程技术网

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轴旋转。如果启用着色器,则整个屏幕为红色。