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类型)
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值