问题:改变Geode 颜色
方法1:osg::shader
一:类及使用方法
OSG中使用自定义的顶点和片元着色器需要用到类:osg::shader , osg::program
1>osg::Program
osg::stateAttribute
|
|
osg::program
osg::program 在应用层封装了OpenGL着色函数 glProgramObject(),开启program渲染状态后,与此状态想关联的几何体会使用program 着色器进行渲染。
setAttributeAndMode(program,osg::StateAttribute::ON); //开启program
2>osg::shader
osg::object
|
|
osg::shader
/ \
/ \
osg::shader::FRAGMENT osg::shader::VERTEX
osg::shader 在应用层封装了OpenGL 着色函数 glShaderObject().管理着色器源代码的加载和编译。
shader 实例可以与一个或多个osg::program 实例相关联。shader对象有两种类型:FRAGMENT,VERTEX
3.代码步骤
osg::StateSet *state=geode->getOrCreateState();
osg::Program *program = new osg::Program; // program instance
osg::Shader * vtxShader = new osg::Shader(osg::Shader::VERTEX); // shader instance
osg::Shader * fragShader = new osg::Shader(osg::Shader::FRANGMENT);
program->addShader(vtxShader); //着色器添加到program
program->addShader(fragShader);
verShader->loadShaderSourceFromFile("shader\brick.vert"); //加载并编译着色器代码
fragShader->loadShaderSourceFromFile("shader\brick.frag");
state->setAttributAndModel(program,osg::StateAttribute::ON); //program实例关联到StateSet,激活
阅读(4010) | 评论(0) | 转发(0) |