当前位置: 首页 > news >正文

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材质渲染器就是用这种方式混合的)

相关文章:

  • html5 canvas上传图片后预览
  • ZBuffer裁剪planar shadow
  • 3D几何流水线之模型变换
  • html5 canvas 加载图片错误 SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement'
  • RGBA模式人物换色的实现
  • javascript实现QR code扫描
  • android webview旋转屏幕导致页面重新加载问题
  • FLEX实践—自创相册
  • Nebula3的渲染线程插件(Render Thread Plugin)
  • android webview 遇到android.os.FileUriExposedException错误
  • Ucweb的发展趋势
  • Asp.net MVC scheduler实现
  • 一幅图对比软件开发框架
  • 移动Mobile Market运营模式初探之二:价值链是关键
  • 为什么我认为软件方法论无效
  • 【面试系列】之二:关于js原型
  • ES6系列(二)变量的解构赋值
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JAVA多线程机制解析-volatilesynchronized
  • jdbc就是这么简单
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • SAP云平台里Global Account和Sub Account的关系
  • spring boot 整合mybatis 无法输出sql的问题
  • STAR法则
  • Terraform入门 - 3. 变更基础设施
  • 当SetTimeout遇到了字符串
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 简单数学运算程序(不定期更新)
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 使用Gradle第一次构建Java程序
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 我的业余项目总结
  • 再次简单明了总结flex布局,一看就懂...
  • 你对linux中grep命令知道多少?
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 昨天1024程序员节,我故意写了个死循环~
  • ​iOS安全加固方法及实现
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​一些不规范的GTID使用场景
  • #includecmath
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (30)数组元素和与数字和的绝对差
  • (Java)【深基9.例1】选举学生会
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (过滤器)Filter和(监听器)listener
  • (区间dp) (经典例题) 石子合并
  • (十一)c52学习之旅-动态数码管
  • (学习日记)2024.01.09
  • (一)Neo4j下载安装以及初次使用
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转) ns2/nam与nam实现相关的文件
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统