在 OpenGL 中将粒子渲染为具有透明度的 GL_TRIANGLE_FAN
Posted
技术标签:
【中文标题】在 OpenGL 中将粒子渲染为具有透明度的 GL_TRIANGLE_FAN【英文标题】:Rendering particles as GL_TRIANGLE_FANs with transparency in OpenGL 【发布时间】:2010-12-17 20:22:56 【问题描述】:我想渲染带有向外淡出的六边形的粒子。我为每个粒子使用了 TRIANGLE_FAN。但是,透明度看起来不是很好。
glBegin(GL_TRIANGLE_FAN);
glColor4f(c.x, c.y, c.z, particle.temperature / 100.0);
glVertex3f(0, 0, 0);
glColor4f(0, 0, 0, 0);
glVertex3f(0.866025404 * H / 2, 0.5 * H / 2, 0);
glVertex3f(0, 1 * H / 2, 0);
// other vertices omitted
glEnd();
我得到一个闪烁的输出,其中黑色透明部分被绘制在某些帧的不透明对象上。如何更改我的渲染例程以避免此错误?
【问题讨论】:
您的混合设置如何? glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 啊,我发现了一个Minecraft玩家(例如屏幕底部的Minecraft图标):-) 【参考方案1】:您观察到的是其他粒子后面没有被绘制,因为 Z 缓冲区中存在更接近的 Z 值。
你可以把你的粒子画回前面。
您也可以禁用深度测试,但标准 Alpha 混合将不正确。使用 ALPHA/ONE 模式,您将累积所有粒子,因此顺序也不重要。
【讨论】:
以上是关于在 OpenGL 中将粒子渲染为具有透明度的 GL_TRIANGLE_FAN的主要内容,如果未能解决你的问题,请参考以下文章