在OpenGL中从3D切换到2D

时间:2016-12-22 21:22:59

标签: c++ opengl fragment-shader vertex-shader opengl-4

我正在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或更高版本中。

修改 我已经弄明白问题在哪里,但仍然不知道如何修复它。正方形存在,但只有在我将它与视图和投影矩阵相乘时才显示(但是它不会粘在屏幕上,只是与场景的其余部分一起旋转,这是我不想要的)。基本上,我不知何故需要切换回2D或屏幕空间,或者它被调用,绘制正方形,并切换回3D,以便所有其他对象正常工作。怎么样?

1 个答案:

答案 0 :(得分:1)

问题在于将1作为z坐标 - 将0.999f改为解决问题。