我正在 Opengl 4.0 中进行天气模拟,并试图通过在背景中创建全屏四边形来创建天空。我试图通过让顶点着色器生成四个顶点然后绘制三角形带来做到这一点。一切都编译得很好,我可以看到我之前制作的所有其他对象,但天空无处可见。我做错了什么?
main.cpp
GLint stage = glGetUniformLocation(myShader.Program, "stage");
//...
glBindVertexArray(FS); //has four coordinates (-1,-1,1) to (1,1,1) in buffer object
glUniform1i(stage, 1);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindVertexArray(0);
顶点着色器
uniform int stage;
void main()
{
if (stage==1)
{
gl_Position = vec4(position, 1.0f);
}
else
{
//...
}
}
片段着色器
uniform int stage;
void main()
{
if (stage==1)
{ //placeholder gray colour so I can see the sky
color = vec4(0.5f, 0.5f, 0.5f, 1.0f);
}
else
{
//...
}
}
我还应该提到,我是 OpenGL 的初学者,它确实必须在 OpenGL 4.0 或更高版本中。
编辑: 我已经弄清楚问题出在哪里,但仍然不知道如何解决。正方形存在,但只有在我将它与 View 和投影矩阵相乘时才会显示(但它不会粘在屏幕上,而是与场景的其余部分一起旋转,这是我不想要的)。本质上,我需要以某种方式切换回 2D 或屏幕空间,或者无论如何调用,绘制正方形,然后切换回 3D,以便所有其他对象都能正常工作。怎么办?
最佳答案
问题在于将 1 作为 z 坐标 - 将 0.999f 改为解决问题。
关于c++ - 在 OpenGL 中从 3D 切换到 2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291842/