def createLights(bb, rootStateSet): lightGroup = osg.Group() modelSize = bb.radius() # create a spot light. myLight1 = osg.Light() myLight1.setLightNum(0) myLight1.setPosition(osg.Vec4(bb.corner(4),1.0)) myLight1.setAmbient(osg.Vec4(1.0,0.0,0.0,1.0)) myLight1.setDiffuse(osg.Vec4(1.0,0.0,0.0,1.0)) myLight1.setSpotCutoff(20.0) myLight1.setSpotExponent(50.0) myLight1.setDirection(osg.Vec3(1.0,1.0,-1.0)) lightS1 = osg.LightSource() lightS1.setLight(myLight1) lightS1.setLocalStateSetModes(osg.StateAttribute.ON) lightS1.setStateSetModes(*rootStateSet,osg.StateAttribute.ON) lightGroup.addChild(lightS1) # create a local light. myLight2 = osg.Light() myLight2.setLightNum(1) myLight2.setPosition(osg.Vec4(0.0,0.0,0.0,1.0)) myLight2.setAmbient(osg.Vec4(0.0,1.0,1.0,1.0)) myLight2.setDiffuse(osg.Vec4(0.0,1.0,1.0,1.0)) myLight2.setConstantAttenuation(1.0) myLight2.setLinearAttenuation(2.0/modelSize) myLight2.setQuadraticAttenuation(2.0/osg.square(modelSize)) lightS2 = osg.LightSource() lightS2.setLight(myLight2) lightS2.setLocalStateSetModes(osg.StateAttribute.ON) lightS2.setStateSetModes(*rootStateSet,osg.StateAttribute.ON) mt = osg.MatrixTransform() # set up the animation path animationPath = osg.AnimationPath() animationPath.insert(0.0,osg.AnimationPath.ControlPoint(bb.corner(0))) animationPath.insert(1.0,osg.AnimationPath.ControlPoint(bb.corner(1))) animationPath.insert(2.0,osg.AnimationPath.ControlPoint(bb.corner(2))) animationPath.insert(3.0,osg.AnimationPath.ControlPoint(bb.corner(3))) animationPath.insert(4.0,osg.AnimationPath.ControlPoint(bb.corner(4))) animationPath.insert(5.0,osg.AnimationPath.ControlPoint(bb.corner(5))) animationPath.insert(6.0,osg.AnimationPath.ControlPoint(bb.corner(6))) animationPath.insert(7.0,osg.AnimationPath.ControlPoint(bb.corner(7))) animationPath.insert(8.0,osg.AnimationPath.ControlPoint(bb.corner(0))) animationPath.setLoopMode(osg.AnimationPath.SWING) mt.setUpdateCallback(osg.AnimationPathCallback(animationPath))
def createSpotLightNode(position, direction, angle, lightNum, textureUnit): group = osg.Group() # create light source. lightsource = osg.LightSource() light = lightsource.getLight() light.setLightNum(lightNum) light.setPosition(osg.Vec4(position,1.0)) light.setAmbient(osg.Vec4(0.00,0.00,0.05,1.0)) light.setDiffuse(osg.Vec4(1.0,1.0,1.0,1.0)) group.addChild(lightsource) # create tex gen. up = osg.Vec3(0.0,0.0,1.0) up = (direction ^ up) ^ direction up.normalize() texgenNode = osg.TexGenNode() texgenNode.setTextureUnit(textureUnit) texgen = texgenNode.getTexGen() texgen.setMode(osg.TexGen.EYE_LINEAR) texgen.setPlanesFromMatrix(osg.Matrixd.lookAt(position, position+direction, up)* osg.Matrixd.perspective(angle,1.0,0.1,100)* osg.Matrixd.translate(1.0,1.0,1.0)* osg.Matrixd.scale(0.5,0.5,0.5)) group.addChild(texgenNode) return group
texenv.setSource2_RGB(osg.TexEnvCombine.PRIMARY_COLOR) texenv.setOperand2_RGB(osg.TexEnvCombine.SRC_COLOR) stateset.setTextureAttribute( 1, texenv ) tex2d = osg.Texture2D( image ) tex2d.setWrap( osg.Texture.WRAP_S, osg.Texture.REPEAT ) tex2d.setWrap( osg.Texture.WRAP_T, osg.Texture.REPEAT ) stateset.setTextureAttributeAndModes( 1, tex2d, osg.StateAttribute.ON ) return( geodePlanet ) # end SolarSystem.createPlanet osg.Group* SolarSystem.createSunLight() sunLightSource = osg.LightSource() sunLight = sunLightSource.getLight() sunLight.setPosition( osg.Vec4( 0.0, 0.0, 0.0, 1.0 ) ) sunLight.setAmbient( osg.Vec4( 0.0, 0.0, 0.0, 1.0 ) ) sunLightSource.setLight( sunLight ) sunLightSource.setLocalStateSetModes( osg.StateAttribute.ON ) sunLightSource.getOrCreateStateSet().setMode(GL_LIGHTING, osg.StateAttribute.ON) lightModel = osg.LightModel() lightModel.setAmbientIntensity(osg.Vec4(0.0,0.0,0.0,1.0)) sunLightSource.getOrCreateStateSet().setAttribute(lightModel) return sunLightSource