OSG 显示3D模型以及对应模型切层的2D效果

来源:互联网 发布:盛发概预算软件 编辑:程序博客网 时间:2024/04/30 08:15

    在3D打印中,经常需要将打印仓内进行模型的摆放,在控制软件中模拟并呈现出来。最常用的就是在俯视模型(即2D下)的情况下对模型进行摆放。然后在3D模式下对修改调整位置后的模型进行预览。

    首先展示一下效果: 图1为3D下的模型效果  图2为2D下的图形效果



    在2D模式下对模型进行旋转平移后,对应的要更新3D模型的显示,其本质还是获取2D模型下的变换矩阵,再设置给3D下的模型。下面来看一下此模型节点的设计:

 // ModelNode
 //    |
 //    | ————m_ModelSwitch 控制模型节点的显示
 //    |               |
 //    |               | ———— m_ModelTransform 存储模型矩阵
 //    |                                 |
 //    |                                 |———— ptrModelGeode 模型节点 (模型+支撑)
 //    |
 //    | ————m_LayerSwitch 控制层节点的显示
 //                    |
 //                    | ———— m_LayerTramsform 模型显示层矩阵
 //                                      |
 //                                      | ———— ModelLayer 层节点   

上述的树节点形式展示了单个模型节点的构成:

1) ModelNode 由m_ModelSwitch和m_LayerSwitch构成,分别控制在3D与2D模式下显示的内容。

2)对于3D模型节点而言,主要所有3D模式下的预览内容在ptrModelGeode中,由于模型始终不变,所以是Geode。它作为子节点,添加给m_ModelTransform,此矩阵节点则是负责存储之前在2D下设置的变换矩阵

3)  对于2D下的节点而言,由于不同层的节点展示不同所以需要注意的有2点:

    A. m_LayerTramsform为模型显示层矩阵, 在2D切换至3D时,需要将此矩阵设置给m_ModelTransform 

    B. 当层号改变时需要删除当前层的ModelLayer 节点,重新创建对应层号的ModelLayer节点,并设置新创建层节点为m_LayerTramsform的子节点.(PS之所以删除之前的节点则是由于通常模型数据非常大,几个G,我们没有必要将模型数据始终保存在内存中。)

    通过此树节点式的设计,可以轻易的将同一个模型在2D模式下操作的变换矩阵呈现于模型的3D模式下。


 

    






原创粉丝点击