OpenGL 透明度无法正常工作

2023-12-06

我的项目的透明度存在问题。正如您所看到的,透明度对于其他对象来说效果很好 - 您可以看到树叶后面的犀牛,但问题出在树本身。当有两个分支并且其中一个比另一个更近时,较远的一个是不可见的。与后备箱相同。透明度对对象本身不起作用。

这是我在创建纹理时使用的代码:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_2D, m_texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

Image of my scene


尽管生成的片段的颜色是透明的,但它们仍然会写入深度缓冲区,以便树的某些三角形遮盖其他三角形,尽管不会影响颜色缓冲区。

要正确渲染透明对象,您必须

  1. 首先绘制所有不透明物体
  2. 禁用深度缓冲区写入
  3. 对透明三角形进行排序
  4. 从后到前渲染透明三角形。

不过,有一个技巧可以避免上述复杂性。如果您只接受两个 alpha 值(零和一),那么您可以启用 alpha 测试 (glAlphaFunc) 以完全丢弃透明片段。

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

OpenGL 透明度无法正常工作 的相关文章

随机推荐

  • 如何使 Gridster 添加的小部件可调整大小?

    我的项目基于此Fiddle 但我已经做到了 因此您可以使用以下方式添加小部件 document on click add function var gridster layouts grid ul gridster data gridste
  • 在安装了 Office 365 的计算机中,通过用 C# 编写的 Windows 服务实现 Excel 自动化失败

    我正在使用用 C 编写的 Windows 服务 通过这个 Windows 服务 我以编程方式自动化 Excel Excel Application excel Excel Application 此代码适用于所有版本的 Excel 2003
  • android中如何识别去电铃声状态

    在我的应用程序中 我想确定拨出呼叫状态是否为等待 已接收或被另一方拒绝 我在下面的链接中搜索了很多 去电状态 如何检测拨出呼叫中的已接听或拒绝状态 通过android BroadcastReceiver呼出电话信息 识别拨出呼叫连接事件但找
  • 如何获取活动窗口的类名?

    通过使用此代码 我可以获得活动窗口的标题 DllImport user32 dll static extern IntPtr GetForegroundWindow DllImport user32 dll static extern in
  • Apache Camel 和 Web 服务

    我试图了解如何将 Apache Camel 与任何提供 WSDL 的 Web 服务集成以生成其类 然后调用他的方法来返回一些请求 我研究了一些关于骆驼弹簧WS and 骆驼 CXF包 正如我所看到的 Spring Web 服务组件不支持使用
  • R - 如何创建重复的自定义 Ifelse 函数

    我非常熟悉 R 的标准 ifelse 语句 以及如何创建嵌套的 ifelse 语句 然而 我想创建一个 更好 的版本 这样我就不必多次复制 粘贴 ifelse 以这个嵌套的 ifelse 语句为例 df lt data frame b 1
  • Tabhost底部边框线android

    截屏 注意到选项卡下方的那条小灰线 选定的选项卡除外 我该如何改变 改变它 它会是 FrameLayout tabHost 或 TabWidget 的一部分吗 我只是找不到改变或删除这条小灰线的方法 Thanks 这是删除灰线的更简单的方法
  • 切换 JPanel 和 keyListener

    我正在开发一款游戏 首先进入主屏幕 有多种选择 例如单人游戏 双人游戏 积分等 我有一个大问题 如果我单击菜单中的按钮 不是JButton the JPanels 切换 但 keyListener 丢失 这Keylistener与游戏代码在
  • 无法登录管理站点。返回页面未找到错误

    我正在尝试通过 a2hosting 共享托管计划托管我的网站 我被告知使用 cpanel 创建一个 virtualenv 然后使用乘客来运行 django 我的virtualenv文件夹和项目文件夹位于根目录中 设置完所有内容并运行coll
  • VB6 中的 LIKE 关键字

    我看到一个示例代码如下 If numb Like 0 9 Then End If Here numb是一个包含一个字符的字符串 VB6中的LIKE关键字是什么 有可用的文档吗 Like 运算符 Visual Basic for Applic
  • History.js 插件 - 如何使用

    我需要使用history js 插件 我整理了一个简短的页面来测试功能 http www salesmelbourne com 目前我正在努力解决以下问题 后退 前进按钮不会重新加载 AJAX div 这是我没有添加的额外的 History
  • 如何将 JavaScript 日期初始化为特定时区

    我将特定时区的日期时间作为字符串 我想将其转换为本地时间 但是 我不知道如何在 Date 对象中设置时区 例如 我有Feb 28 2013 7 00 PM ET 那我就可以 var mydate new Date mydate setFul
  • 如何阻止 Iframe 调用

    最近 我的完整网站被另外两个域在 iframe 中调用 我想阻止其他试图在 iframe 中显示我的网站的网站 我如何通过 htaccess 阻止它 您可以在标题 X Frame Options Deny 中设置变量 所有现代浏览器都支持
  • dart flutter 中 DateFormat 中的 tryParse

    我想要tryParse多种日期格式 tryParse方法可在DateTime但不在DateFormat 我想用DateFormat因为我想解析多种格式 如果我使用Parse方法然后我必须使用try catch block 目前我正在解析下面
  • R 中的行矩阵乘法

    我有一个维度为 1 亿条记录和 100 列的矩阵 现在我想将该矩阵乘以行 我的矩阵乘法示例代码是 df lt as matrix mtcars result lt apply df 1 prod 在我的例子中 上面的语法非常慢 I trie
  • keras 自动编码器与 PCA

    我正在玩一个玩具示例来理解 PCA 与 keras 自动编码器 我有以下代码来理解PCA import numpy as np import matplotlib pyplot as plt from mpl toolkits mplot3
  • jquery ajax 帖子说 xxx 不允许 Access-Control-Allow-Origin

    我试图使用 AJAX 调用 eBay FindProducts API post请求 但遇到以下错误 XMLHttpRequest 无法加载http open api ebay com shopping callname FindProdu
  • EntityFramework .net 4 用简单的方法更新实体

    我正在看这个问题 ADO net 实体框架 仅更新分离实体上的某些属性 这对我来说是一个很大的帮助 我现在知道在对其进行更改之前需要附加一个实体 但我该怎么做 我有一个 MVC 网站 一个客户更新页面 其中包含以下字段 ID 名称 地址等
  • C++ 全局重载运算符= [重复]

    这个问题在这里已经有答案了 可能的重复 运算符 必须是非静态成员 是什么意思 C Hi 我有以下代码 Header file struct dataRecord size t id char name gcNameLength void o
  • OpenGL 透明度无法正常工作

    我的项目的透明度存在问题 正如您所看到的 透明度对于其他对象来说效果很好 您可以看到树叶后面的犀牛 但问题出在树本身 当有两个分支并且其中一个比另一个更近时 较远的一个是不可见的 与后备箱相同 透明度对对象本身不起作用 这是我在创建纹理时使