GL_DEPTH_TEST 和透明纹理的渲染故障

2023-12-02

从一个角度看,我的灌木看起来像这样:

从另一个角度看,它们是这样的:

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

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

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


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


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

看这里:http://www.opengl.org/wiki/Transparency_Sorting您需要需要 alpha 测试的“Alpha 测试”,而不是需要排序的“标准半透明”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GL_DEPTH_TEST 和透明纹理的渲染故障 的相关文章

  • 为什么拥有单独的投影矩阵但结合模型和视图矩阵会有好处?

    当您学习 3D 编程时 您会被告知用 3 个变换矩阵来思考是最简单的 模型矩阵 该矩阵对于每个模型都是独立的 它根据需要旋转和缩放对象 最后将其移动到 3D 世界中的最终位置 模型矩阵将模型坐标转换为世界坐标 视图矩阵 对于大量对象 如果不
  • OpenGL - 两个纹理的幂

    OpenGL 使用二次幂纹理 这是因为由于 MipMapping 某些 GPU 只接受 2 的幂纹理 当绘制比实际更大的纹理时 使用这些二次方纹理会导致问题 我想到了一种方法来解决这个问题 即仅在我们使纹理小于实际大小时使用 PO2 比率
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • 在球体边缘绘制点

    因此 来自 Flash 背景的我对一些简单的 2D 三角函数有很好的理解 在带有 I 圆的二维中 我知道使用给定角度和半径将项目放置在边缘上的数学 x cos a r y sin a r 现在 如果我在 3d 空间中有一个点 我知道球体的半
  • 三角形纹理映射OpenGL

    我正在开发一个使用 Marching Cubes 算法并将数据更改为 3D 模型的项目 现在我想在 OpenGL 中为我的 3D 模型使用纹理映射 我首先尝试了一个简单的示例 它将图片映射到三角形上 这是我的代码 int DrawGLSce
  • 更改 GLUT 调用以与 MFC/C++ 一起使用

    我有一个使用 GLUT 进行 OpenGL 渲染的程序 现在我需要它位于 MFC 项目内部 以便它可以与另一个程序组件一起使用 我已经按照这个教程进行操作 http www codeguru com cpp g m opengl openf
  • 致命错误 gl.h 包含在 glew.h 之前

    include
  • glDrawElements 只绘制半个四边形

    这是我的功能 void Object draw2 if mIsInitialised return Tell OpenGL about our vertex and normal data glEnableClientState GL VE
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 如何将平面上的 3D 点转换为 UV 坐标?

    我有一个 3d 点 定义为 x0 y0 z0 该点属于一个平面 定义为 a b c d normal a b c and ax by cz d 0 如何将 3d 点转换或映射为一对 u v 坐标 这一定是非常简单的事情 但我无法弄清楚 首先
  • 简单的openGL程序无法在ubuntu中链接

    我正在尝试进入 opengl 编程 但无法编译我的第一个非常非常简单的程序 链接过程每次都会失败 我发现这个答案 https stackoverflow com questions 859501 learning opengl in ubu
  • LWJGL3:重载的 glBufferData 方法

    我正在使用 LWJGL 调用 OpenGL 函数 方法org lwjgl opengl GL15 glBufferData http javadoc lwjgl org org lwjgl opengl GL15 html glBuffer
  • 如何从横滚、俯仰和偏航获取相机向上矢量?

    我需要从滚动角 俯仰角和偏航角 以度为单位 获取相机的向上矢量 以获得正确的外观 我已经尝试了几个小时不同的事情 但没有运气 这里的任何帮助将不胜感激 横滚 俯仰和偏航定义 3 轴旋转 从这些角度 您可以构建一个 3x3 变换矩阵来表达该旋
  • 在 Ubuntu 中与未编译的着色器链接

    我需要加载 glsl 来绘制一些东西 我的环境是Ubuntu 13 04 因此它不存在GLuint InitShader GLuint GLuint 这是我的对象创建 预链接步骤和链接的配置 不幸的是 它仍然出现错误 该错误与未编译的着色器
  • 帧缓冲区/颜色缓冲区?

    有人可以指出我两者是否相同吗 我的意思是我一直在阅读有关它的信息 这里的红皮书说 颜色缓冲区本身可以由多个子缓冲区组成 系统上的帧缓冲区包含所有这些缓冲区 here http glprogramming com red chapter10
  • 如何在 GLSL 1.3 和 OpenGL 2.1 中使用位运算

    我正在尝试编写一个使用许多位操作的着色器 事实上 从 glsl 1 30 开始就支持它们 但我只使用 OpenGL 2 1 有没有办法在我的 OpenGL 版本中使用位运算 所有 SM3 兼容 OpenGL 2 1 硬件支持limited整
  • 如何使用现代 OpenGL 在透视投影中绘制对象的正交轴? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有带有透视投影的 3D 场景 我还可以选择场景中的一个对象 我需要为选定的对象绘制轴 问题是轴不会在透视投影中保存其大小 如果物体远离眼睛
  • 云或烟雾的粒子系统

    我正在尝试使用 OpenGL 和 CUDA 制作一个简单的用于云和烟雾模拟的粒子系统 如何使粒子系统中的粒子表现得像真正的云或烟雾在低湍流风中的表现 我现在遇到的一些问题是 颗粒聚集成一个大球 粒子扩散到无限远 粒子突然弹射离开 我已经完成
  • OpenGL 使用着色器将 NV12 转换为 RGB24

    我尝试编写一个应用程序来在 OpenGL 中显示 YUV 图像 我使用此代码片段在 C 中成功将 Y UV 转换为 RGB source https blog csdn net subfate article details 4730514
  • 在 3D 场景中实现“抓取”相机平移工具

    在我的场景中 我有想要 抓取 的地形 然后在移动光标时让相机平移 其高度 视图向量 视野等全部保持不变 因此 最初的 抓取 点将是世界空间中的工作点 我希望在拖动时该点保留在光标下方 我当前的解决方案是获取前一个和当前的屏幕点 取消投影它们

随机推荐

  • 更改 dataGridView 中垂直滚动条的宽度

    我正在开发一个触摸屏应用程序 我被要求增大滚动条的大小 以便用户可以使用它们 到目前为止我还没能解决这个问题 我读到 如果增加 MainForm 窗口滚动条的宽度 则 dataGridView 将继承它 我尝试了一些方法 但到目前为止还没有
  • 在流星方法中使用集合插入中的 id

    在我的 Angular Meteor 应用程序中 我想使用从插入到客户端的 Meteor 方法中的集合创建的 id 在客户端 Angular 组件中存在以下方法 onSubmit void Meteor call insertItem th
  • 有没有办法从 JS 中的图像手动创建 Base64code

    我在 html 画布上绘制图像 这就是计算像素的方法 for var i 0 i lt data length i 4 var red data i red var green data i 1 green var blue data i
  • 如何使用 OGNL 索引引用运算符

    使用 OGNL 您可以引用操作上下文对象 例如 application session root action request parameters attr 以及动作上下文 context 该框架将 OGNL 上下文设置为我们的 Acti
  • NodeJS HTML 和 CSS

    我不知道为什么 CSS 在这里被忽略 为了能够在 HTML 中使用 CSS 我需要对 NodeJS 做一些特定的事情吗 它与标签的 type 属性有什么关系吗 NodeJS 代码 app get function request respo
  • 在 IntelliJ 中可以实现而在 Eclipse 中无法实现的事情?

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我听说有人改变了其中一种方式 并且对其中一种发誓 作为 Eclipse 的忠实粉丝 但还没有时间尝试 IntelliJ 我有兴趣从
  • printf,如何为整数插入小数点

    我有一个UINT16说的无符号整数 4455 312 560 or 70 如何使用 printf 在最后两位数字之前插入小数点 以便示例数字显示为 44 55 3 12 5 60 or 0 70 如果没有 printf 解决方案 是否有其他
  • 如何在下拉淘汰赛js中预先选择一个选项

    我已经查看了其他问题 但无法让我的选择框正常工作 绑定下拉 选择 列表的初始 默认值 我有以下游戏对象 function Game visitingTeamDetails homeTeamDetails game if arguments
  • 如何在android中绘制球体

    如何使用 OpenGL ES 在 Android 中绘制球体 您的问题可能与以下问题重复 在OPENGL ES中绘制球体时出现问题 在 OpenGL ES 中绘制球体 我建议您在提出问题之前先做一些研究 因为有很多教程可用于相同的内容 ht
  • 有没有办法禁用 Swing 应用程序的 Mac OS Retina 缩放?

    我们有一个相当复杂的应用程序 需要尽可能多的屏幕空间 自然 视网膜显示屏 Mac Book 非常适合此目的 然而 在 Swing 中这些设备似乎使用的是点而不是像素 它们允许我将图标更改为所讨论的更高分辨率版本here 但由于我们做了很多复
  • 如何在Python中的进程之间传递堆栈跟踪?

    我正在尝试创建一个 python 装饰器 它接受带有 args 和 kwargs 的函数 在新进程中执行它 关闭它并返回函数返回的任何内容 包括引发相同的异常 如果有 目前 如果函数没有引发异常 我的装饰器可以正常处理函数 但无法提供回溯
  • 一段时间后关闭 tkinter 窗口

    我有一段Python代码 应该打开一个新窗口一段时间 然后关闭该窗口 该窗口是通过单击按钮触发的 这是我所拥有的基础知识 def restore self self restore Toplevel message Select an av
  • 如何通过命令行删除 PostgreSQL 数据库[关闭]

    Closed 这个问题是无关 目前不接受答案 我正在尝试删除数据库并通过命令行创建一个新数据库 我使用登录psql U username然后做一个 connect template1 后面跟着一个DROP DATABASE database
  • 如何使用 PowerShell 修改 SharePoint 列表中的项目值

    如何使用 PowerShell 修改 SharePoint 列表中的项目值 当我尝试以下操作时 splist GetItems ForEach Object Write Host Item if Item eq null SPFileCol
  • 为什么动态添加的图像的offsetWidth总是0

    我正在通过 Javascript 添加图像 图像可以是任何尺寸 我想获取尺寸 宽度和高度 问题是 offsetWidth and style width始终为 0 这是一些要复制的代码 const container document ge
  • 当我重写 CreateParams 时,RichTextBox 不显示所有数据

    I foundNoBugz 编写的一些旧代码 汉斯 帕桑特 如果我理解的话 会强制 Richtextbox 使用 RTF 5 0 而不是 4 0 基本上它只是一个继承的类RichTextBox并覆盖CreateParams财产本身 priv
  • 用于多字节字符编码的 ucfirst() 函数

    我问过strtolower功能 但是当使用外来字符时 它不会将它们转换为大写 所以我必须使用 mb strtolower a utf8 但是如果我想使用我能做什么ucfirst 功能 我还没有找到任何类似的功能 可以在其中设置编码类型 没有
  • CSS 背景。将内容盒与盖子组合在一起

    如果我同时使用background origin content box 和背景大小 封面 在带有一些填充的元素上 背景图像仍然覆盖底部填充 在最新版本的 Safari Chrome Firefox 和 IE 中 div backgroun
  • 运行 LLVM 示例时遇到问题

    我在这个问题上挣扎的时间比我愿意承认的要长 并且非常感谢一些帮助 我正在尝试做一个涉及构建链接器和调度程序的项目 并且认为如果我可以使用 LLVM 中已经构建的一些功能 那就太好了 我正在使用 LLVM 10 为了开始使用 我做了一些阅读并
  • GL_DEPTH_TEST 和透明纹理的渲染故障

    从一个角度看 我的灌木看起来像这样 从另一个角度看 它们是这样的 我的理论是 当从第一个角度看灌木时 灌木后面的所有块都已经画好了 所以当绘制灌木时 它只是将它们绘制在上面 然而 从另一个角度来看 它基本上是先尝试绘制灌木 然后当 它去绘制