|
发表于 2017-1-11 23:20:25
|
显示全部楼层
本帖最后由 Emily 于 2017-1-11 23:21 编辑
可以同时给不同的节点添加不同的Shader,每个节点作为一个状态设置shader就行了。可以考虑把shader函数封装起来,传状态进去就可以了。
类似于这样:
void LoadShader(osg::StateSet* stateset)
{
static char * vertexShader = {
"varying vec4 color;\n"
"void main(void ){\n"
"color = gl_Vertex;\n"
"gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;\n"
"}\n"
};
static char * fragShader = {
"varying vec4 color;\n"
"void main(void){\n"
" gl_FragColor = clamp(color,0.0,1.0);\n"
"}\n"
};
osg:rogram * program = new osg::Program;
program->addShader(new osg::Shader(osg::Shader::FRAGMENT,fragShader));
program->addShader(new osg::Shader(osg::Shader::VERTEX,vertexShader));
stateset->setAttributeAndModes(program,osg::StateAttribute::ON);
}
|
|