opengl - openGL 中的初学者透明度/不透明

标签 opengl transparency blending

我正在学习 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/

相关文章:

Javascript:如果有东西可见,则将其混合在一起

imagemagick - 在已经使用 ImageMagick 具有透明度的图像上应用渐变蒙版?

ios - 两个图像的多重混合动画

java - Java中如何使用OpenGL监控GPU使用情况?

c++ - 什么是适合 opengl 常量的类型名称?

silverlight - 制作一个Silverlight 3控件透明背景

图像中的 CSS 不透明度

processing - P5.js : manually calculate additive blendmode with pixels[]

opengl - 如何在 Qemu 中添加虚拟 GPU?

python - 绘制大量正方形的最快方法?