gpt4 book ai didi

c++ - GLSL 着色 : The entire screen is colored instead of just a quad

转载 作者:行者123 更新时间:2023-11-30 05:47:28 26 4
gpt4 key购买 nike

我所做的着色器将整个屏幕着色为红色,而不是仅对正在绘制的四边形进行着色。这里描述了我在我的代码中做事的方式。

#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);

编译着色器程序,然后使用顶点位置绑定(bind)

glBindAttribLocation(progID, 0, "position");

我假设“位置”与顶点着色器中的变量名称相同,并且它绑定(bind)到第 0 个位置,因为多边形的顶点位于 VAO 缓冲区中的第 0 个位置。我应该怎么解决这里的问题?

最佳答案

绘图区域是 -1,-11,1 所以如果四边形比它大,整个屏幕都会被绘制。

要考虑矩阵堆栈(输入或 glRotate 和 friend ),您需要在顶点着色器中将位置与 gl_ModelViewMatrix 相乘。但是,这在 140 核中不可用,因此您要么需要兼容性,要么显式维护和传递矩阵。

关于c++ - GLSL 着色 : The entire screen is colored instead of just a quad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com