MinLu的个人博客分享 http://blog.sciencenet.cn/u/MinLu

博文

OpenGL(四)关于Opengl中的混合&显示列表问题

已有 5078 次阅读 2011-11-17 17:38 |个人分类:每天进步一点点|系统分类:科研笔记| OpenGL学习

关于Opengl中的混合问题
混合功能,可以实现半透明效果。
Alpha值可以理解为不透明度。它用于将被处理片断的颜色值与已经储存在帧缓冲区中的像素颜色值进行组合。
如果不启动混合功能(glDisable(GL_BLEND)),即默认情况下,新片断值会直接取代像素缓冲区中的片断值。
如果启动混合功能(glEnable(GL_BLEND)),设被处理片断的颜色值(Sr,Sg,Sb,Sa),在帧缓冲区中的像素颜色值(Dr,Dg,Db,Da),那么通过定义混合方式(GLBlendFunc(Sf,Df))来指定最终帧缓冲区中的颜色值(Xr,Xg,Xb,Xa)。
Xr = Sr * Sf + Dr * Df, Xg = Sg * Sf + Dg * Df, Xb = Sb * Sf + Db * Df, Xa = Sa * Sf + Da * Df。
通常,在设置混合方式时,我们会将(Sf,Df)的值与像素的Alpha值相关联。
在DVR中,对于数据制成的纹理,
按由前往后的顺序进行混合,混合方式应该设置为GLBlendFunc(GL_DST_ALPHA, GL_ONE),即X = S*(1-Da)+ D;
按由后往前的顺序进行混合,混合方式应该设置为GLBlendFunc(GL_ONE, GL_SRC_ALPHA),即X = S + D *(1-Sa);

关于Opengl中的显示列表问题
显示列表将需要重复绘制或设置的操作组合储存起来。显示列表作为服务器的一部分,保存在服务器中,这对于Opengl中的客户机--服务器模型,当服务器位于远程的一台机器上有提高性能的好处。
储存在显示列表中的操作可以是:1.矩阵操作组合:由于计算矩阵比较复杂,利用显示列表,将多个矩阵操作化做一次的glMultMatrix()操作 2.对位图和图像进行光栅化:通过将位图和图像的绘制保存在显示列表中,Opengl会将其转换为最适合硬件的形式 3.光源、材料属性和光照模型:计算光照属性比较费时,如果提前将不同材料属性储存在显示列表中,不用通过重新计算而只需通过切换不同的显示列表就能完成不同材料之间的切换 4.多边形的点画模式:利用显示列表进行绘制,对多边形的点画进行一次计算,将结果保存在显示列表中,在调用显示列表时只需调用计算结果
创建显示列表(GLuint list = glGenLists(1))-->定义显示列表(glNewList(listindex); ...; glEndList())-->调用显示列表(glCallList)

https://blog.sciencenet.cn/blog-655085-509053.html

上一篇:OpenGL(三)关于OpenGL中的光照问题
下一篇:[Debug] mpd failed: gethostbyname_ex failed
收藏 IP: 124.205.77.*| 热度|

2 唐常杰 陶开荣

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-28 14:28

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部