我正在学习 OpenGL 的 NeHe 教程...我正在学习第 8 课(通过混合绘制立方体)。 http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=08
我想尝试并将一半的面更改为不透明,以便始终存在与不透明面相对的半透明面,并且能够旋转立方体...
我稍微改变了代码,整个源代码都在那里:http://pastebin.com/uzfSk2wB 我改变了一些事情:
- 默认启用混合并将混合函数设置为 glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- 更改了绘制面的顺序以及每个面的颜色。
- 我设置了深度测试
- 我画了所有不透明的脸
- 我禁用深度测试
- 我画了所有透明的面
现在,很难说到底出了什么问题,但它看起来绝对不正确,与透明的脸相比,我无法识别哪些脸是不透明的,有时有些脸在应该绘制的时候似乎没有被绘制。 .等等...
似乎计算前面的脸与后面的脸相比并不是微不足道的(尽管我确信可能),我希望有一种方法可以不需要这样做。
检查我的代码中有什么问题,或者这是否不是正确的做法。
最佳答案
如果在绘制透明面之前禁用深度测试,则绘制透明面时将不考虑其正确的 z 顺序。看起来透明的面可能被绘制在所有其他面的上方。保持深度测试开启。
关于opengl - openGL 中的初学者透明度/不透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4637820/