osg技巧
1、讓模型始終顯示在前面
當A模型覆蓋住B模型,要讓B模型始終顯示,可進行如下操作:
方法一、
B->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE); // 關閉深度測試,并設置覆蓋標志
B->getOrCreateStateSet()->setRenderBinDetails(100.0, “RenderBin”); // 設置渲染系數,哪個模型要顯示在前面,就調大該模型的渲染系數
方法二:
// 開啟深度測試,并設置覆蓋標志,深度測試總是通過
osg::Depth* dep = new osg::Depth;
dep->setFunction(osg::Depth::Function::ALWAYS);
B->getOrCreateStateSet()->setAttribute(dep, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
B->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
// 設置渲染系數,哪個模型要顯示在前面,就調大該模型的渲染系數
B->getOrCreateStateSet()->setRenderBinDetails(100.0, “RenderBin”);
osg狀態集說明:
osg::StateAttribute::OVERRIDE //所有子節點都將繼承這一屬性或模式,子節點對其更改無效
osg::StateAttribute::PROTECTED //設置了這一屬性的子節點的渲染屬性或模式不會受到父節點的影響
osg::StateAttribute::INHERIT //強制子節點繼承父節點的渲染狀態,自己本身的渲染狀態被解除
2、osg強制使用double類型的頂點數據
a. 頂點數據設置 osg::Vec3dArray->setPreserveDataType(true)
b. 頂點著色器設置 in dvec3 VertexPosition
(考慮到頂點數據是double類型,故變換矩陣uniform變量類型也需要double類型,dmat4)
(gl_Position是vec4類型)
?
總結
- 上一篇: 微波射频网在世界电信日 成功召开4G手机
- 下一篇: 移动魔百盒101s刷机注意事项