模板效果的实现,主要包含3个基本要素:打开场景窗口设置模板效果开关,设置通道可绘制区域,设置模板显示效果。
(1)窗口开关。
在默认设置中,vpWindow的模板效果是关闭的:
pWindow_myWindow->setNumStencilBits(0);
因此,要使用模板效果,必须打开此开关:
pWindow_myWindow->setNumStencilBits(1);
(2)通道绘制区域。
在默认设置中,vpChannel的绘制区域,是归一化处理后的标准矩形:
pChannel_myChannel->setDrawArea(0.00,1.00,0.00,1.00);
实际上,setDrawArea的4个参数是归一化处理后相对于屏幕4个边线的距离:(www.daowen.com)
int setDrawArea (double L,double R,double B,double T);
4个参数L,R,B,T 分别对应父窗口的左边距、右边距、下边距和上边距,取值范围都是[0,1]。另外需要注意,4个参数的设置必须保证符合实际情况,否则绘制区域将不能正常显示。例如,绘制区域的左右边距应该保证绘制区域的左右两边不能错位,左边距过大可能使左边位于右边的右边,绘制区域将不能正常显示。
(3)设置模板显示效果。
前面两项都非常简单,这一项是模板效果的核心,相对复杂一些。模板效果借助于对场景通道的控制来完成,场景通道订阅类vsChannel::Subscriber 通过事件vsChannel::EVENT_PRE_DRAW 和vsChannel::EVENT_POST_DRAW 对通道进行处理。
命名空间vrStencilTest 提供的结构体vrStencilTest::Element 用来储存模板效果的参数,vrStencilTest::Element的继承视图如图9.11.1所示。
另外,还涉及简单的OpenGL 操作。在显示区域绘制实际的模板效果需要由OpenGL 绘制函数来完成。
图9.11.1 模板结构体继承视图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。