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 透明度无法正常工作 的相关文章

  • GLSL 中统一浮点行为和常量浮点行为的不同

    我正在尝试在 GLSL 中实现模拟双精度 并且观察到一种奇怪的行为差异 导致 GLSL 中出现细微的浮点错误 考虑以下片段着色器 写入 4 浮点纹理以打印输出 layout location 0 out vec4 Output unifor
  • 如何将透明 PNG 加载到位图并忽略 Alpha 通道

    我看到很多关于如何加载带有 alpha 通道的 PNG 并显示它的问题 但没有关于如何加载具有 alpha 通道的 PNG 但忽略 alpha 通道 从而显示底层 RGB 数据的问题 我尝试简单地从 Alpha 通道中删除所有数据 但我只得
  • 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

    我正在使用 pyglet 在 python 中进行 3D 可视化 并且需要检索模型视图和投影矩阵来进行一些选择 我使用以下方式定义我的窗口 from pyglet gl import from pyglet window import wi
  • OpenGL中背景对象绘制在前景对象前面?

    为了测试目的 我们假设我画了 2 个茶壶glutSolidTeapot 像这样 glColor3f 1 0f 0 0f 0 0f Red teapot glutWireTeapot 1 0f glColor3f 0 0f 1 0f 0 0f
  • 如何计算正切和副法线?

    谈谈OpenGL着色语言 GLSL 中的凹凸贴图 镜面高光之类的东西 I have 顶点数组 例如 0 2 0 5 0 1 0 2 0 4 0 5 法线数组 例如 0 0 0 0 1 0 0 0 1 0 0 0 世界空间中点光源的位置 例如
  • GL_COLOR_ATTACHMENT 有什么作用?

    我现在正在学习帧缓冲区 但我只是不明白颜色附件的作用 我了解帧缓冲区 第二个参数的意义是什么 glFramebufferTexture2D GL FRAMEBUFFER GL COLOR ATTACHMENT0 GL TEXTURE 2D
  • OpenGL什么时候完成函数中指针的处理?

    OpenGL有多项功能 http www opengl org wiki GLAPI glTexSubImage2D直接获取指针 他们中有一些从这些指针读取数据 http www opengl org wiki GLAPI glBuffer
  • GLSL聚光投影体积

    在我的开源项目中 我使用 Qt3D 设置了延迟渲染管道 到目前为止一切顺利 但现在我想通过添加聚光灯投影量来继续前进 例如场景中好像有烟雾 像这样 我正在使用的片段着色器位于问题的末尾 我读过 对于每个片段 我应该从光位置进行光线行进并找到
  • 如何在多采样纹理上渲染帧缓冲区对象?

    我目前有一个使用多个通道的渲染引擎 其中图像的各个部分在纹理上渲染 然后使用着色器进行组合 它有效 现在我想激活多重采样 我在这里读到 http www opengl org wiki Framebuffer Object Examples
  • 具有交错缓冲区的 openGL glDrawElements

    到目前为止 我只使用了 glDrawArrays 并希望转向使用索引缓冲区和索引三角形 我正在绘制一个有点复杂的对象 其中包含纹理坐标 法线和顶点坐标 所有这些数据都收集到一个交错的顶点缓冲区中 并使用类似于以下的调用进行绘制 假设所有血清
  • 渲染到一个颜色通道而不影响其他通道

    使用 OpenGL 任何版本 如何通过一次仅影响一个颜色通道来渲染到帧缓冲区对象 例如 我的帧缓冲区对象具有 GL BGRA 布局 现在我想执行一些渲染命令 这些命令应该只改变红色通道 因此 如果片段用颜色 204 0 0 0 渲染并且像素
  • Shader的功能参数表现

    我试图了解如何在着色器语言中实现传递参数 我读过几篇文章和文档 但仍然有一些疑问 特别是我试图理解与C 函数调用 特别强调性能 之间略有差异HLSL Cg and GLSL但我猜下划线的实现非常相似 到目前为止我所理解的 除非另有说明 函数
  • 有什么方法可以修复 Juno 更新后可怕的工具栏图标吗?

    至少在 Windows 7 上 标题栏颜色看起来可能已更改为蓝色 但是 标题栏图标仅设计用于浅灰色栏 而不是使用 alpha 透明度进行抗锯齿 请注意绿色圆圈 运行 图标边缘周围的白色突出显示 这些图标看起来很可怕 就像我们在 1995 年
  • OpenGL 与 OpenCL,选择哪个以及为什么?

    哪些功能使 OpenCL 能够独特地选择 OpenGL 和 GLSL 进行计算 尽管有与图形相关的术语和不实用的数据类型 OpenGL 是否有任何真正的警告 例如 可以通过使用其他纹理将 a 渲染到纹理来完成并行函数评估 减少操作可以通过迭
  • Retina 显示屏中具有 QOpenGLWIdget 的 Qt MainWindow 显示错误大小

    我有一个 Qt 应用程序MainWindow 我嵌入一个QOpenGLWidget在里面 一切正常 直到我开始使用 Apple Retina 显示屏并在高 DPI 模式下运行我的应用程序 我的QOpenGLWidget只是它应该具有的大小的
  • 无法在 Linux 的 NetBeans 中编译 C++ 和 OpenGL (GLFW) 的简单源代码

    我开始学习 OpenGL glfw 我从教程中复制源代码并尝试编译它 但出现了错误 我想我已经正确安装了所有头文件 glm glfw 等 这是我的来源 我没有在头文件中使用这些字符 include iostream include stdi
  • nVidia 和 ATI 之间的 OpenGL 渲染差异

    最近 我将 ATI 驱动程序 我使用的是 HD7970 更新为最新版本 但我的 OpenGL 项目的一些对象停止工作 更重要的是 他们适用于 nVidia 最新驱动程序 在 960m 上测试 ATI 和 nVidia 渲染管道之间有什么我应
  • 计算着色器中的 Image2D

    我想使用 image2D 作为顶点的 2D 存储 该顶点将由计算着色器修改 但不起作用 创建纹理 glGenTextures 1 HeightMap glBindTexture GL TEXTURE 2D HeightMap glTexIm
  • 使 QLabel 的像素图透明

    我有一个带有 QLabel 和像素图的主窗口 我想让它透明 或不那么不透明 我正在使用下面的代码 ui gt label gt setAttribute Qt WA TranslucentBackground ui gt label gt
  • 并排显示图像的一半 - OpenGL

    我为两个图像创建了两个纹理 现在我想在opengl中按图像2的左侧部分 完整的图像1 图像2的右侧部分的顺序显示该纹理 我已经做了如下 Image1 显示在 opengl 屏幕的中央 但屏幕的左右部分不正确 应分别显示 image2 的左侧

随机推荐

  • 如何使 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 透明度无法正常工作

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