osg中对于顶点着色器中顶点属性为数组时,例如如下情况:
shader中:
uniform mat4 mvp[4];
uniform = new osg::Uniform(osg::Uniform::FLOAT_MAT4, "mvp", 4);
uniform ->setelement(0,mt0);
uniform ->setelement(1,mt1);
uniform ->setelement(2,mt2);
uniform ->setelement(3,mt3);,其中mtx为osg中的matrix类型,
对于顶点着色器中的结构体数组:例如如下:
struct Light {
vec3 Position;
vec3 Color;
};
uniform Light lights[4];
可以向下面这样进行值的传递
for (int i = 0; i < 4; ++i)
{
osg::Uniform* lightPosUnifom = new osg::Uniform(osg::Uniform::FLOAT_VEC3, "lights[" + std::to_string(i) + "].Position");
osg::Uniform* lighColortUnifom = new osg::Uniform(osg::Uniform::FLOAT_VEC3, "lights[" + std::to_string(i) + "].Color");
/****/
}