glDisable(GL_DEPTH_TEST) makes nothing but Sky-Sphere Render
glDisable(GL_DEPTH_TEST) makes nothing but Sky-Sphere Render
编辑:在场景中所有其他对象之前渲染天空盒解决了这个问题。
我在这里看到了这个问题,但添加
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)绘制对象。
嗯,是的。这就是深度测试的目的。没有它,就没有什么可以向OpenGL表明天空盒不应该渲染在其他一切之上。
如果您不希望发生这种情况,请不要禁用深度测试...或者在其他所有内容之前绘制天空盒,而不是之后。
相关文章:
- Rcpp 'candidate function has different number of parameters (expected 0 but has 1)'
- Qt3D:"Mesh is empty, nothing to load"消息
- "Do nothing"在三元运算符的其他部分?
- 谷歌模拟 - 怎么说"function must be called ONCE with a certain parameter but ok to be called many times with
- glDisable(GL_DEPTH_TEST) makes nothing but Sky-Sphere Render
- C++ 模板:'Instantiation of variable required here, but no definition is available'
- "Double or Nothing"赌博机器代码无法超过15组合
- 原型 C++ 实现 - "marked ‘override’, but does not override"错误
- "Variable Array set but not used"
- 无法运行简单的 std::async 和 std::future 测试程序。错误:"has initializer but incomplete type."发生了什么?
- 如何将"nothing"分配给标准::可选<T>?
- 规则"A user-defined but do-nothing destructor is also a non-trivial destructor"太严格了?
- pthread_mutex_lock blocks but __lock = 0
- 如何修复理性狂想曲错误:"Current value is " VC11 ", but no Visual Studio installation was not found in the direc
- Qt 5.2 & iOS: "Nothing to be done"
- Qt QTableView - 'Nothing selected'信号
- c++: x / 60 = 2, but 60 / x = 0?
- 告诉海湾合作委员会"I want to use SSE4.1, but ONLY in the places I want!"
- getaddrinfo() 返回错误"The requested name is valid, but no data of the requested type was found."
- 为什么我会收到"variable 'std::packaged_task<int> task' has initializer but incomplete type"错误