opengl - GL_DEPTH_TEST 和透明纹理的渲染故障

标签 opengl 3d rendering depth

从一个角度看,我的灌木是这样的:

从另一个角度来看,它们看起来像这样:

我的理论是,当从第一个角度看灌木时,灌木后面的所有 block 都已经画好了,所以当绘制灌木时,它只是将它们绘制在上面。

然而,从另一个角度来看,它基本上是先尝试绘制灌木,然后当​​它去绘制灌木后面的 block 时,它检查深度缓冲区并发现有东西已经挡住了 block 的 View ,所以它不会渲染它,导致海军蓝色方 block (我的透明颜色)。

我真的不知道如何解决这个问题。禁用深度测试会导致各种其他错误。有没有某种方法可以将顶点或多边形标记为具有透明度,以便它知道它仍然需要渲染后面的内容?

<小时/>

Found this 。这是唯一的解决方案吗?分离我的透明和不透明 block ,然后在几乎每一帧的 CPU 上手动对它们进行排序,因为玩家可以四处移动?必须有一种方法将其委托(delegate)给 GPU...

最佳答案

该链接(以及 CPU 上的排序)用于 alpha 混合。如果您只需要 Alpha 测试(而不是混合),那么您不需要对任何内容进行排序。只需启用 alpha 测试,并保持启用深度测试,一切都会正常渲染。

请参见此处:http://www.opengl.org/wiki/Transparency_Sorting 您需要需要 alpha 测试的“Alpha 测试”,而不是需要排序的“标准半透明”。

关于opengl - GL_DEPTH_TEST 和透明纹理的渲染故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353210/

相关文章:

three.js - 三.js 中带有 MeshStandardMaterial 的金属 Material

c++ - OpenGL 纹理导致内存问题

opengl-es - 用于索引绘图的预排序 3d 文件类型

matlab - 你能在 MATLAB 中像集合一样定义变量吗?

python - 如何计算vtk文件的体积

windows - Adobe AIR 3.1 渲染/输入问题与 Steam 覆盖 (Windows)

css - 使用渲染插件将模板转换为pdf时,css背景不起作用

macos - 核心视频像素缓冲区为 GL_TEXTURE_2D

java - 使用多个 sampler2D 的 GLSL 着色器

opengl - QOpenGLContext 和 QGLWidget 之间的共享