osg.Capabilityi 类代表着OpenGL的一个功能开关。
使用 osg.Capabilityi
,可以改变OpenGL的状态,例如打开或关闭深度测试、启用或禁用光照、启用或禁用纹理贴图等等。通过 osg.Capabilityi
类,可以方便的控制场景中的绘制效果。
Capabilityi(GLenum cap, GLint value);
cap
: OpenGL功能开关,例如 GL_DEPTH_TEST
表示深度测试。value
: 开启或关闭该功能开关,例如1表示开启,0表示关闭。使用 osg.Capabilityi
可以方便地改变OpenGL的状态。例如下面的代码打开深度测试和光照:
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Group> root = new osg::Group;
//打开深度测试
root->getOrCreateStateSet()->setAttribute(new osg::Depth(osg::Depth::LESS));
root->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
//打开光照
osg::ref_ptr<osg::Light> light = new osg::Light;
light->setLightNum(0);
light->setPosition(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f));
light->setAmbient(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
light->setDiffuse(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
light->setSpecular(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
osg::ref_ptr<osg::LightSource> ls = new osg::LightSource;
ls->setLight(light);
root->addChild(ls.get());
//设置场景数据
//......
viewer.setSceneData(root.get());
viewer.run();