欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

osg技巧

发布时间:2024/1/1 编程问答 68 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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类型)
 

总结

以上是生活随笔为你收集整理的osg技巧的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。