基于osg的python三维程序开发(七)------灯光

灯光在任何三维仿真程序里面都是非常重要的组成部分。  osg 里面的灯光相关的类有:osg::Light()  和 osg::LightSource.

我们可以将Light想象为一个灯泡。  而LightSource则是电灯的插口。在opengl中,灯光需要消耗系统的软件硬件资源。 所以

新建灯光的数量是有限的,而且系统给每个光源都设置一个编号。下面我们用python 代码来演示如何创建灯光:

def createLights(bb, rootStateSet):
    lightGroup = osg.Group()
    modelSize = bb.radius()
    print('modelSize ',modelSize)
    # create a spot light.
    myLight1 = osg.Light()
    myLight1.setLightNum(0)
    p = (bb.corner(4)[0],bb.corner(4)[1], bb.corner(4)[2],1.0)
    myLight1.setPosition(p)
    myLight1.setAmbient((1.0,0.0,0.0,1.0))
    myLight1.setDiffuse((1.0,0.0,0.0,1.0))
    myLight1.setSpotCutoff(20.0)
    myLight1.setSpotExponent(50.0)
    myLight1.setDirection((1.0,1.0,-1.0))
    lightS1 = osg.LightSource()
    lightS1.setLight(myLight1)
    lightS1.setLocalStateSetModes(osg.ON)
    lightS1.setStateSetModes(rootStateSet,osg.ON)
    lightGroup.addChild(lightS1)

上面的代码演示了如何创建光源, 以及设置光源的一系列的属性, 包括光源的位置,方向、颜色、漫反射成分、散射成分等。  这些关于灯光属性的设置问题,可以参考OPENGL的教程,

本博文仅在于演示如何用python code 实现创建光源。

posted @ 2020-04-25 14:30  小阳明  阅读(709)  评论(0)    收藏  举报