OpenGL:我如何将天空盒放在无限远中

Lis*_*isa 7 opengl

我需要知道如何让天空盒出现在无穷大?我知道它与深度有关,但我不知道要禁用或启用的确切内容?

Ron*_*lic 11

首先,关闭深度写入/测试(如果先绘制天空盒并清除深度缓冲区,则无需关闭深度测试):

glDisable(GL_DEPTH_TEST);
glDepthMask(false);
Run Code Online (Sandbox Code Playgroud)

然后,将相机移动到原点并将其旋转为模型视图矩阵的反转:

// assume we're working with the modelview
glPushMatrix();

// inverseModelView is a 4x4 matrix with no translation and a transposed 
// upper 3x3 portion from the regular modelview
glLoadMatrix(&inverseModelView);
Run Code Online (Sandbox Code Playgroud)

现在,绘制你的天空盒并转回深度写回:

DrawSkybox();

glPopMatrix();
glDepthMask(true);
glEnable(GL_DEPTH_TEST);
Run Code Online (Sandbox Code Playgroud)

glPush/PopAttrib()在绘制天空盒之后,您可能希望使用以确保其他状态正确设置(确保在必要时关闭照明或混合等内容).

您应该在绘制任何内容之前执行此操作,以便所有颜色缓冲区写入发生在您的天空框之上.

  • 天空盒首先呈现的是浪费大量带宽的最佳方式. (7认同)
  • 但是我认为OP并不关心性能.最后绘制天空盒比较复杂,因为你必须确保你已经正确处理了透明和远处的物体,而不是剪切到天空盒中.在完成工作后,应该对早期Z测试进行优化. (4认同)