`
sogotobj
  • 浏览: 646557 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

opengl粒子系统的渲染方式

阅读更多

原来一直以为,只有当前颜色alpha<0时,使用src alpha才会将图半透明的画到已有的内容上,今天试验gles的point sprite时发现,我使用一张24bit的粒子纹理图,不带alpha通道,中心亮边缘渐黑

使用的混合函数为glBlendFunc( GL_SRC_ALPHA, GL_ONE );也有类似alpha通道的效果。
复习一下blend的公式:
源颜色是(Rs,Gs,Bs,As),源混合因子是(Sr,Sg,Sb,Sa),目的颜色是(Rd,Gd,Bd,Ad),目的混合因子是(Dr,Dg,Db,Da),而默认的混合计算是加法
那么最终混合后的片段颜色是 (RsSr+RdDr, GsSg+GdDg, BsSb+BdDb, AsSa+AdDa)

GL_SRC_ALPHA代表的RGBA混合因子是(As,As,As,As),因为我这张纹理是24bitRGB的,没有alpha通道,所以As=1
GL_ONE的代表RGBA混合因子是(1,1,1,1)
带入上面的公式就是:
(Rs+Rd, Gs+Gd, Bs+Bd, Gs+Gd, As+Ad)
也就是直接将源颜色加到已有的颜色上,因为我的粒子纹理图是中心亮边缘渐变黑色的,而黑色就是0,所以黑的地方最终的颜色就是已有的颜色,亮一点的地方就是将灰色加到已有颜色上会让颜色更饱和,所以渐变黑色就形成了类似alpha通道的效果。
然后我又将纹理环境模式设置成GL_MODULATE,并且在画粒子时指定一个颜色,这样彩色的颜色被乘到纹理颜色上,最终纹理的效果是彩色的,再加到背景上就变成彩色粒子,这个效果和直接在图上设定alpha通道和颜色还是有区别的,不过这种效果更适合粒子系统。
下 图是蓝色背景上画彩色粒子,由于使用这种混合方式,可以透过粒子看到部分蓝色背景,如果使用glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );那么就看不到背景了,因为粒子纹理上是没有alpha通道的(alpha===1)。
(ps:irrlicht的transparent add color材质渲染器就是用这种方式混合的)

分享到:
评论

相关推荐

    OpenGL粒子系统之雪花飘飘

    OpenGL粒子系统是计算机图形学中的一个重要概念,常用于创建各种动态效果,如爆炸、火焰、烟雾、水滴等。在这个“OpenGL粒子系统之雪花飘飘”的项目中,作者通过OpenGL实现了真实的雪花模拟,还加入了配乐和可控制的...

    基于opengl的粒子系统

    在本项目中,“基于OpenGL的粒子系统”是一个教学实例,旨在帮助初学者理解和应用OpenGL来实现粒子效果。 首先,我们需要了解粒子系统的基本原理。粒子系统通过大量小而简单的元素(即粒子)组合来模拟复杂的视觉...

    OpenGL实例粒子系统

    OpenGL实例粒子系统是一种基于OpenGL图形库的编程技术,用于创建动态的、视觉上吸引人的效果,如火焰、烟雾、水波等。在本实例中,重点是实现火的效果,这是通过模拟大量微小粒子的行为来达成的。OpenGL作为一个强大...

    OpenGL粒子系统大作业之灿若繁星

    OpenGL粒子系统大作业“灿若繁星”是一个利用计算机图形学技术实现的视觉效果项目,主要涉及OpenGL编程和粒子系统的运用。在这个项目中,开发者通过OpenGL库创建了一个模拟真实场景的环境,使得用户能够看到犹如繁星...

    opengl_particals.rar_opengl 粒子_opengl粒子_vc opengl_粒子系统

    总的来说,这个项目提供了一个学习OpenGL粒子系统实现的实例,涵盖了粒子生成、更新、绘制,以及与用户界面和地形的交互等多个方面。通过研究这些源代码,开发者可以深入了解如何在VC++环境下利用OpenGL构建复杂的...

    VC上用OPENGL实现的粒子系统

    这个项目中的"粒子系统"可能是实现上述过程的一个具体示例代码,包含了粒子系统的完整逻辑和OpenGL渲染。初学者可以通过阅读和学习这个代码,理解如何在VC++环境中使用OpenGL构建复杂的视觉效果,从而提高自己的图形...

    OpenGL ES粒子系统制作墙纸(没有界面)

    本项目"OpenGL ES粒子系统制作墙纸(没有界面)"就是利用OpenGL ES 2.0来创建一个粒子效果的动态壁纸应用。由于没有Activity,这意味着该程序是一个服务(Service)类型的应用,它在后台运行,不需用户直接交互。 ...

    opengl_粒子系统

    总结,OpenGL粒子系统是创造动态视觉效果的重要工具,通过理解和实践火灾源码,开发者可以深入学习粒子生成、更新和渲染的技巧,提升自己的图形编程能力。在实际应用中,粒子系统不仅可以用于火灾效果,还能扩展到...

    OpenGL实现的烟花粒子系统

    在这个“OpenGL实现的烟花粒子系统”项目中,开发者利用OpenGL的技术来模拟出逼真的烟花效果,展现了粒子系统的魅力。粒子系统是一种通过大量简单个体(粒子)的组合来表现复杂动态效果的方法,如火焰、烟雾、水滴等...

    opengl 粒子系统

    总之,OpenGL粒子系统是利用图形库创造动态效果的重要工具。NeHe教程的第19课是一个很好的起点,对于想要学习如何在OpenGL中实现粒子效果的人来说,它提供了一个清晰的路径和实践机会。通过深入研究和实践,你可以...

    opengl+粒子系统的降雪模拟(增强版)

    综合以上,这个项目展示了OpenGL在实时渲染中的强大能力,通过粒子系统和纹理技术实现了细腻的降雪效果,并利用显示列表进行性能优化。对于学习和理解OpenGL、粒子系统以及如何在实际项目中提高帧速率,这个"opengl+...

    基于openGL与粒子系统的三维喷泉

    ### 基于OpenGL与粒子系统的三维喷泉模拟 #### 引言 在虚拟现实领域,如何逼真地模拟自然现象如喷泉、水流、云雾等,一直是一项极具挑战性的任务。这些自然现象通常具备不规则性、动态性和随机性等特点,这使得它们...

    一个opengl+粒子系统模拟雪效的简单程序

    在这个项目中,“一个OpenGL+粒子系统模拟雪效的简单程序”是利用OpenGL来实现的一种视觉效果,它模拟了下雪的场景。在Visual Studio 2010(VS2010)这个集成开发环境中,程序员可以编写C++代码来构建这个程序。 ...

    OpenGL 粒子演示程序

    OpenGL 粒子演示程序 主要参考了nehe的教程写的 可以调节粒子系统各种参数来渲染出不同的效果。

    opengl-lizi.rar_opengl 粒子_opengl粒子_粒子_粒子效果

    OpenGL粒子系统通常用于创建如火、烟雾、水、爆炸等复杂的动态效果。这些粒子可以是简单的几何形状,如点或方形,通过一系列的动画规则(如颜色变化、大小变化、速度变化)组合起来,形成逼真的视觉表现。在这个源码...

    opengl-lizi.rar_OpenGL 3d_opengl c++ 3d_opengl粒子_opengl粒子 下雪_ope

    OpenGL是一种强大的图形编程库,...总的来说,OpenGL粒子系统是一个引人入胜的话题,它结合了物理学、数学和计算机图形学的知识。通过实践这个项目,你不仅可以提升你的OpenGL编程技巧,还能深入了解3D图形的渲染原理。

    opengles简单粒子系统的实现

    在"opengles简单粒子系统的实现"这个主题中,我们将探讨如何使用OpenGL ES来构建一个基础的粒子系统。粒子系统由大量的个体——粒子组成,每个粒子都有自己的属性,如位置、速度、大小、颜色和生命周期。通过控制...

    OpenGL实现的烟花粒子系统(VC)

    总的来说,这个项目展示了OpenGL在实时图形渲染方面的强大能力,通过粒子系统和各种图形技术,为用户带来了一场视觉盛宴。对于学习者来说,这是一个很好的实践案例,可以深入理解OpenGL的工作原理,以及如何用C++和...

    opengl.rar_opengl 喷泉_opengl喷泉_somewhereuu5_粒子opengl_粒子系统喷泉

    在这个"opengl.rar"压缩包中,我们找到了一个关于使用OpenGL创建喷泉效果的项目,它使用了粒子系统来模拟水花四溅的动态效果。下面将详细探讨OpenGL、粒子系统以及如何在C++中实现这样的喷泉效果。 1. **OpenGL**: ...

Global site tag (gtag.js) - Google Analytics