0.0,0.0,0.5));redPolygon->setColorArray(redColors);redColors->setBinding(osg::Array::BIND_PER_PRIMITIVE_SET);//如果需要透明,则加入这个redPolygon->getOrCreateStateSet()->setMode(GL_BLEND,osg::StateAttribute::ON)
glEnable(GL_BLEND);//开启混合渲染,把同一位置的前一个像素和后一个像素进行叠加后显示.所以透明渲染会影响渲染速度 glColor4f(1.0f,1.0f,1.0f,0.5f);//设置透明度 glBlendFunc(GL_SRC_ALPHA,GL_ONE);//基于源像素Alpha通道值的半透明混合函数 osg也采用状态机机制(osg::StateSet),因为为了配合osg场景树...
在OSG中,我们可以通过设置osg::BlendFunc属性来指定混合模式。 常见的混合模式包括源颜色与目的颜色的加权和、源颜色与目的颜色的差值等。通过选择合适的混合模式,我们可以获得不同的透明效果。例如,使用GL_SRC_ALPHA和GL_ONE_MINUS_SRC_ALPHA作为混合因子,可以实现标准的透明度混合效果。 在OpenSceneGrap...
osg::Drawable* makeTailLine() { osg::Geometry* geometry = new osg::Geometry; geometry->setUseVertexBufferObjects(true); geometry->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON); osg::Vec3Array* vertices = new osg::Vec3Array; osg::Vec4Array* colors = new osg::Vec...
this->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON | osg::StateAttribute::PROTECTED | osg::StateAttribute::OVERRIDE); this->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED | osg::StateAttribute::OVERRIDE); ...
state->setMode(GL_BLEND,osg::StateAttribute::ON); //融合函数 osg::ref_ptr<osg::BlendFunc> blendFunc = new osg::BlendFunc(); blendFunc->setSource(osg::BlendFunc::SRC_ALPHA); blendFunc->setDestination(osg::BlendFunc::ONE_MINUS_SRC_ALPHA); ...
state->setMode(GL_BLEND,osg::StateAttribute::ON); //设置渲染模式 等等等等 二、 geometry和geode 显然,geode是几何节点,且是叶节点,geometry类管理osg中各种各样的几何体。 个人总结:在使用geode画osg自带的几何图形时,总是: 声明geode节点 创建几何对象 ...
state->setMode(GL_BLEND,osg::StateAttribute::ON); state->setMode(GL_DEPTH_TEST,osg::StateAttribute::ON); state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); //使用BlendFunc实现透明效果 osg::BlendColor* bc =new osg::BlendColor(osg::Vec4(1.0,1.0,1.0,0.0)); ...
深度写入(GL_DEPTH_WRITEMASK)和深度测试(GL_DEPTH_TEST)的设置会影响透明对象的渲染效果。 混合模式(osg::BlendFunc)的设置会影响透明对象与背景或其他对象的混合方式。 通过上述步骤,应该能够在OpenSceneGraph中实现基本的透明效果。如果需要更高级的透明处理,可以进一步探索OSG的渲染队列和混合模式设置。
在创建完材质后,例子里还打开了混合模式(setMode(GL_BLEND, true)),这个我试着关掉,也没发现问题。在我给小球本身贴上一张纹理后,关闭这个选项也没发现问题。也许这个选项在这里只是为了解决某些兼容性的问题吧。 动态创建动画路径 动画路径的生成用的是osg::NodeCallback,例子里给了两个实现,一个是等时间段生成...