灯光在任何三维仿真程序里面都是非常重要的组成部分。 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 实现创建光源。
原文:https://www.cnblogs.com/enigma19971/p/12772962.html