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