OCC 中Visual3d_Layer的实现

       Open Cascade中的Visual3d_Layer可以在场景的上层及底层单独绘制不同的物体,这些物体不响应主场景的任何变换。

Top Layer可以用来绘制一些3D的UI;Under Layer通常用来实现渐变的背景色。

Layer的主要绘制代码位于TKOpenGL模块中的OpenGl_togl_begin_layer_mode.c 文件中。

其场景设置及主要的绘制操作在函数 call_togl_redraw_layer2d 中。

首先调用

设置新的单位视图模型矩阵和投影矩阵。之后调用

   glOrtho设置了一个新的投影矩阵。

调用 glViewport 设置Layer对应的窗口位置和大小。

   无论Layer中的投影矩阵和视图模型矩阵怎样设置,应该保证下面两点:

   对于Top Layer应该保证图形不被主场景的图形覆盖;而Under Layer则应该保证其不会遮挡到主场景及Top Layer中的图形;

上面的函数实现了这些要求。 每次绘制Layer时,保存上次的Depth_buffer,然后关闭深度测试,绘制图形,最后再恢复之前的Depth_buffer。

   上面的实现也可以改成:

对于Under Layer

对于Top Layer

可以实现同样的效果,但需要判断Layer的类型。

  最后要恢复投影矩阵,视图模型矩阵和视口的设置:

在程序的绘制循环中,按照 Under Layer, 主场景, Top Layer的顺序依次绘制。

      在Open CADCADE 的 V3D_View 类中,函数 SetAntialiasingOn 用来开启反走样。在GEFORCE 9系列的显卡上,该函数可以得到正确的显示效果。在GEFORCE 7 和 8系列的显卡上,调用该函数将得到错误的显示效果。在实体上出现三角化的网格。 原因没找到。? ? ?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值