通道渲染的使用主要通过通道订阅类vsChannel::Subscriber的vsChannel::EVENT_PRE_DRAW事件来完成。
在这里,设计了一个通道渲染类myChannRender 来执行通道的渲染:
class myChannRender:public vsChannel::Subscriber
通道渲染类myChannRender 继承于vsChannel::Subscriber,重载了通道的绘制函数notify,在该函数中处理vsChannel::EVENT_PRE_DRAW 事件。该事件中,首先清理掉原有的通道色彩,根据需要设置RGB 和ALPHA 通道,RGB 分别代表红绿蓝3个颜色通道,ALPHA 通道则代表透明。
通道颜色的设置通过glColorMask 函数完成:
glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE);
glColorMask 函数通过设置颜色掩码,由RGB 形成单色或者混合颜色。在设计里,通过一个静态整数变量PublicMember::RenderColor 传递数值,0 代表红色,1 代表绿色,2 代表蓝色,对通道进行颜色渲染。其他情况则恢复通道的正常渲染:
glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
通道渲染类myChannRender的完整代码如图9.10.4所示。
图9.10.4 通道渲染订阅类设计
通道渲染类myChannRender 必须在VP的主线程中为通道添加订阅事件才能发挥作用,其主要代码如下:(www.daowen.com)
//为通道添加订阅事件
myChannRender * ChannRender=new myChannRender();
vpChannel *channel=*vpChannel::begin();
channel->addSubscriber(vsChannel::EVENT_PRE_DRAW,ChannRender);
channel->addSubscriber(vsChannel::EVENT_POST_DRAW,ChannRender);
首先实例化一个通道渲染对象指针,然后获取当前通道,最后分别为当前通道添加vsChannel::EVENT_PRE_DRAW 和vsChannel::EVENT_POST_DRAW 事件,以便使用通道渲染功能。其完整代码如图9.10.5所示。
图9.10.5 通道渲染类的使用
图9.10.6 各色通道渲染效果
在操作界面上,设置了红色通道、绿色通道和蓝色通道,以及正常渲染,如图9.10.6所示。只需要修改PublicMember::RenderColor的值即可:0 代表红色,1 代表绿色,2 代表蓝色。当然,可以通过设置对通道进行更多的颜色混合渲染。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。