c++ - 在 OpenGL 中从 3D 切换到 2D

标签 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 或更高版本中。

编辑: 我已经弄清楚问题出在哪里,但仍然不知道如何解决。正方形存在,但只有在我将它与 View 和投影矩阵相乘时才会显示(但它不会粘在屏幕上,而是与场景的其余部分一起旋转,这是我不想要的)。本质上,我需要以某种方式切换回 2D 或屏幕空间,或者无论如何调用,绘制正方形,然后切换回 3D,以便所有其他对象都能正常工作。怎么办?

最佳答案

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

关于c++ - 在 OpenGL 中从 3D 切换到 2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291842/

相关文章:

OpenGL 和 SDL,在保持内部分辨率不变的情况下调整窗口大小?

opengl - 实现使用统一 Sampler2D (lwjgl) 的片段着色器

java - LWJGL 纹理加载/映射问题

c++ - Qt - MainWindow 在运行时卡住

c++ - for循环中i++和++i的区别

opengl - 根据不同的 texcoord 计算 mip 级别选择

c++ - 缩放到桌面特定部分的应用程序

c++ - cpp 中十六进制模式的大小

c++ - 错误 : no matching function for call to 'make_pair(int&, Quest*)'

java - GLSL着色器-片段着色器无法编译