gpt4 book ai didi

c++ - glDisable(GL_DEPTH_TEST) 除了 Sky-Sphere Render 什么都不做

转载 作者:行者123 更新时间:2023-11-28 04:46:31 26 4
gpt4 key购买 nike

编辑:在场景中所有其他对象之前渲染天空盒解决了这个问题。

我看过问题 here但添加

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

似乎没有帮助。

我正在尝试为我的场景渲染球形天空盒,出于某种原因,当我在这样做之前禁用深度测试时,天空盒是唯一渲染的东西。

[Render other objects..]

// Disable depth test & mask, faceculling
glDisable(GL_DEPTH_TEST); // Adding this makes everything else invisible
glDepthMask(GL_FALSE);
glCullFace(GL_FRONT);

[Render texture onto inside of sphere..]

// Re-enable faceculling, & depth
glDepthMask(GL_TRUE);
glEnable(GL_DEPTH_TEST);
glCullFace(GL_BACK);

知道为什么会这样吗?

我不确定要包含什么代码来保持这一点,所以不要犹豫,要求更多。

最佳答案

只是让你知道,这个:

glDisable(GL_DEPTH_TEST);

禁用深度测试和写入,因此您不需要这两者并将深度掩码设置为 GL_FALSE。

默认情况下,当您清除每一帧的深度缓冲区时,它应该清除它的最大值,可能是 1.0。默认情况下,深度函数是 GL_LESS,这意味着任何来自片段着色器的深度值小于深度缓冲区中的深度值都会通过并写入帧缓冲区。

在我看来,您正在做的是将深度缓冲区清除为 1.0,禁用深度测试和写入,绘制您的对象,然后启用深度测试以及写入和绘制您的天空盒。这样做的问题是对象的绘制不会向深度缓冲区写入任何内容,因此当需要绘制天空盒(启用深度测试)时,缓冲区中的所有像素深度值都是 1.0(因为你从来没有写过任何东西),并且因为深度函数是 GL_LESS 你绘制的天空盒的每个像素都通过了深度测试并被写入帧缓冲区。

如果有特殊需要让你的对象总是绘制在天空盒前面,例如天空盒跟随相机位置,那么:

1) 关闭深度写入。

2) 绘制天空盒。

3) 启用深度写入。

4) 画出你的对象。

关于c++ - glDisable(GL_DEPTH_TEST) 除了 Sky-Sphere Render 什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49163351/

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