OpenSceneGraph(OSG)中的osg.Light类是一个表示灯光的节点类。它可以用来设置灯光的类型、位置、方向、颜色和强度等属性。
osg.Light类有两种构造函数:
第一个构造函数创建一个默认的灯光(光源的位置在原点,为白色平行光,强度为1)。
第二个构造函数创建一个指定编号的灯光(编号必须在0到7之间)。
osg.Light类可用的属性有如下几种:
以上两个方法可以用来设置灯光的位置坐标。
该方法可以用来设置灯光的朝向。
以上三个方法分别用来设置灯光的漫反射、镜面反射和环境光颜色。
以上三个方法可以用来设置灯光的强度衰减系数。指定的系数越大,灯光的强度衰减就越快。
setLightNum()方法用来设置灯光的编号(必须在0到7之间)。
setLightType()方法设置灯光类型,可以是点光源,平行光源或者聚光灯。
如果灯光的类型是聚光灯类型,那么还需要设置聚光灯的一些参数:
setSpotCutoff()方法用来设置聚光灯的截止角度。(角度越小,灯光的照射范围越小)
setSpotBlend()方法可以设置灯光在聚光灯截止角度以外的渐变程度,取值范围是0到1。
除了以上的方法外,osg.Light类还有其他一些方法可以用来查询或设置灯光的一些属性。具体可以参考OSG的文档。
下面是一个简单的使用osg.Light类的示例:
osg::ref_ptr<osg::Light> light = new osg::Light;
light->setLightNum(0);
light->setPosition(osg::Vec4(0,0,1,1));
light->setAmbient(osg::Vec4(0,0,0,1));
light->setDiffuse(osg::Vec4(1,1,1,1));
light->setSpecular(osg::Vec4(1,1,1,1));
osg::ref_ptr<osg::LightSource> lightSource = new osg::LightSource;
lightSource->setLight(light.get());
lightSource->setLocalStateSetModes(osg::StateAttribute::ON);
lightSource->setStateSetModes(*stateset,osg::StateAttribute::ON);
root->addChild(lightSource.get());
在上面的示例中,我们首先创建了一个osg.Light对象,并设置了它的编号、位置、环境光、漫反射和镜面反射颜色等属性。
然后,我们创建一个osg.LightSource对象,并把创建好的osg.Light对象设置给它。最后,我们把osg.LightSource对象插入到场景图中。
这样,灯光就会在场景图中起作用了。如果需要渲染阴影,还需要额外设置阴影映射等。