osgFX.Cartoon是OpenSceneGraph的一个特效插件,它可以将场景中的物体渲染成卡通风格,使场景更加生动有趣。
首先,在代码中引入osgFX/cartoon头文件:
#include <osgFX/Cartoon>
然后,创建一个osg::Cartoon对象:
osg::ref_ptr<osgFX::Cartoon> cartoon = new osgFX::Cartoon();
接下来,将osg::Cartoon对象加入渲染流程中:
osg::ref_ptr<osg::Group> root = new osg::Group();
root->addChild(cartoon);
最后,将需要渲染成卡通风格的物体加入osg::Cartoon对象的子节点中:
osg::ref_ptr<osg::Geometry> geometry = createMyGeometry();
cartoon->addChild(geometry);
osg::Cartoon的属性可以通过以下方法进行设置和获取:
设置卡通线的粗细程度,单位为像素。
获取卡通线的粗细程度,返回值为像素。
设置卡通线的颜色,参数color为四维向量,表示rgba颜色值。
获取卡通线的颜色,返回值为四维向量,表示rgba颜色值。
设置卡通物体的漫反射颜色,参数color为四维向量,表示rgba颜色值。
获取卡通物体的漫反射颜色,返回值为四维向量,表示rgba颜色值。
设置卡通物体的镜面反射颜色,参数color为四维向量,表示rgba颜色值。
获取卡通物体的镜面反射颜色,返回值为四维向量,表示rgba颜色值。
设置卡通物体的高光大小,参数shininess为一个浮点数,值域为0到128。
获取卡通物体的高光大小,返回值为一个浮点数,值域为0到128。
#include <osg/Group>
#include <osg/Geometry>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgFX/Cartoon>
int main(int argc, char** argv)
{
// 加载模型
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("cow.osg");
// 创建卡通特效对象
osg::ref_ptr<osgFX::Cartoon> cartoon = new osgFX::Cartoon();
cartoon->setLineThickness(2.0f);
cartoon->setOutLineColor(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f));
cartoon->setDiffuseColor(osg::Vec4(0.8f, 0.8f, 0.8f, 1.0f));
cartoon->setSpecularColor(osg::Vec4(0.4f, 0.4f, 0.4f, 1.0f));
cartoon->setShininess(32.0f);
// 创建场景图
osg::ref_ptr<osg::Group> root = new osg::Group();
root->addChild(cartoon);
cartoon->addChild(model);
// 创建查看器
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
viewer->setSceneData(root);
viewer->run();
return 0;
}