作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 VisualStudio 的 OSG 项目中从 3dsMax 导入了对象(立方体)。但是我不知道如何使这个导入的立方体只有一个面透明。这是我的代码:
#include <osgViewer/Viewer>
#include <iostream>
#include <osg/Group>
#include <osg/Node>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osg/Notify>
#include <osg/MatrixTransform>
#include <osg/Geode>
#include <osg/Geometry>
#include <osg/StateSet>
#include <osg/StateAttribute>
#include <osg/CullFace>
#include <osg/Point>
#include <osg/Light>
#include <osg/LightSource>
#include <osg/BlendFunc>
#include <osg/Material>
#include <osg/PolygonMode>
int main(int argc, char** argv)
{
osg::ref_ptr<osg::Group> root = new osg::Group;
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("cube.3ds"); //Importing model
osg::StateSet* state2 = model->getOrCreateStateSet(); //Creating material
osg::ref_ptr<osg::Material> mat2 = new osg::Material;
mat2->setAlpha(osg::Material::FRONT_AND_BACK, 0.1); //Making alpha channel
state2->setAttributeAndModes( mat2.get() ,
osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
osg::BlendFunc* bf = new //Blending
osg::BlendFunc(osg::BlendFunc::SRC_ALPHA,
osg::BlendFunc::ONE_MINUS_DST_COLOR );
state2->setAttributeAndModes(bf);
root->addChild(model.get());
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
viewer.setUpViewOnSingleScreen(0);
return viewer.run();
}
最佳答案
问题中的代码确实使模型透明。例如,使用 OSG 数据包中的 cessna 模型:
添加另外两个模型,一个盒子和一个球体,其中盒子也有混合:
我们看到混合正在起作用。如果您添加了另一个模型但未显示,则可能是在其他模型之前渲染了该平面。如果飞机正好在其他模型的前面,即使飞机是透明的,你也看不到;因为他们没有通过深度测试。
添加
cessna->getStateSet()->setMode( GL_BLEND, osg::StateAttribute::ON );
cessna->getStateSet()->setRenderingHint( osg::StateSet::TRANSPARENT_BIN );
cessna->getStateSet()->setMode( GL_BLEND, osg::StateAttribute::ON );
关于visual-c++ - 立方体的一个面上的透明度 OpenScreenGraph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861896/
我在 VisualStudio 的 OSG 项目中从 3dsMax 导入了对象(立方体)。但是我不知道如何使这个导入的立方体只有一个面透明。这是我的代码: #include #include #i
我是一名优秀的程序员,十分优秀!