Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101860
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-07 10:17
文章分类

全部博文(51)

文章存档

2017年(2)

2016年(36)

2015年(13)

我的朋友

分类: 虚拟化

2015-12-31 11:58:37

问题:改变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,激活











阅读(3817) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~