NeHe_Lesson 20 masking 区域掩盖

 

masking就是一种特殊的Blending。它的效果如图:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />masking_1.PNG

注意,你可以通过雪花看见它后面的背景。

这节主要就是混合因子的使用,理解了混合公式这节就很容易理解了。

混合公式如下:

(RsSr + RdDr ,GsSg + GdDg ,BsSb + Bd + Db ,AsSa + AdDa)

其中(Sr ,Sg ,Sb ,Sa)为源混合因子,即后添加的片元的颜色值在混合中所占的比重。(Dr ,Dg ,Db ,Da)为目标混合因子,即先前帧缓冲中像素颜色的值灾混合中所占的比重。

源混合因子和目标混合因子通过函数glBlendFunc设置。

(Rs ,Gs , Bs ,As)是源像素的颜色值。(Rd ,Gd , Bd ,Ad)是目标像素的颜色值。

masking一个纹理比如上面的雪花,你必须有一个雪花的纹理和一个与它对应的二值纹理:如图:masking_2.PNG

 

程序处理步骤如下:

1. 绘制背景画.即透过雪花看见的纹理.

2.  开启混合,并且关闭深度测试:

glEnable(GL_BLEND);                         // Enable Blending

    glDisable(GL_DEPTH_TEST);                   // Disable Depth Testing

3. 设置混合因子

glBlendFunc(GL_DST_COLOR,GL_ZERO);      // Blend Screen Color With Zero (Black)

    把参数带入混合公式,我们得到最终要存储在帧缓冲中的像素颜色为:

(RsRd , GsGd ,BsBdAsAd),从中我们可以看出,如果目标像素的黑色区域混后依然为黑色,因为和0相乘结果仍然为0。如果不是黑色区域就保持原状。

4          设置目标像素。

把我们的二值图像即上面那个黑色雪花设为目标像素,通过第3步设置的混合因子,我们就得到了下图:

masking_3.PNG
5        
 给黑色雪花贴上颜色

     这里又使用了混合:glBlendFunc(GL_ONE, GL_ONE); 带入的公式得到的结果为:

(Rs + Rd ,Gs + Gd ,Bs + Bd ,As + Ad )当我们添加蓝色雪花纹理时候,雪花就变成蓝色了,因为0+Xd,还是Xd,注意这里蓝色雪花和原来的黑色雪花masking是同等大小。如果大小不一就会区分开来。

 

另外这一节还介绍了纹理坐标的有关知识,texture coordinate (0.3, 0.5) for instance, maps to the exact same pixel in the texture image as coordinate (1.3, 0.5), or as (12.3, -2.5)

roll是不断变化的,那么下面将绘制不断滚动的纹理:

glBegin(GL_QUADS);                         

glTexCoord<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2f(0.0f, -roll+0.0f); glVertex3f(-1.1f, -1.1f,  0.0f);    // Bottom Left

glTexCoord2f(3.0f, -roll+0.0f); glVertex3f( 1.1f, -1.1f,  0.0f);    // Bottom Right

glTexCoord2f(3.0f, -roll+3.0f); glVertex3f( 1.1f,  1.1f,  0.0f);    // Top Right

glTexCoord2f(0.0f, -roll+3.0f); glVertex3f(-1.1f,  1.1f,  0.0f);    // Top Left

glEnd();               

转载于:https://www.cnblogs.com/SweetDream/archive/2006/03/06/343750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值