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系列的显卡上,调用该函数将得到错误的显示效果。在实体上出现三角化的网格。 原因没找到。? ? ?

阅读更多
个人分类: OpenCascade
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭