There are always problems in spotlight. I have set various configurations of spotlight, but still can’t form a spot! Why is that? This is my code, and renderings. In addition, there are model files.
import direct.directbase.DirectStart
from panda3d.core import *
from direct.task import Task
try:
window = WindowProperties()
window.setTitle('House')
window.setSize(1200, 800)
base.win.requestProperties(window)
base.setBackgroundColor(0.4, 0.6, 0.7, 0.5)
envir = loader.loadModel('house')
envir.reparentTo(render)
base.cam.setPos(0, -29000, 7500)
base.cam.setHpr(0, -15, 0)
sun = loader.loadModel('sphere')
sun.setColor((0.7, 0.6, 0.4, 1))
sun.setScale(300)
sun.setPos(-6510, -6000, 0)
sunLight = sun.attachNewNode(DirectionalLight("SUN"))
sunLight.setH(-60)
sunLight.node().setColor((1, 1, 1, 1))
sunLight.node().setShadowCaster(True)
sunLight.node().show_frustum()
sunLight.node().setScene(render)
sunLight.node().getLens().setFilmSize(60, 80)
sunLight.node().getLens().setNearFar(10, 30)
render.setShaderAuto(True)
sunLightHelper = render.attachNewNode('change')
sunLightHelper.setPos(0, 0, 0)
sun.reparentTo(sunLightHelper)
sunLightHelper.hprInterval(20, (0, 0, 360)).loop()
#envir.setLight(sunLight)
lamp = loader.loadModel('lamp')
lamp.reparentTo(render)
lamp.getChild(0).setHpr(90, 90, 0)
lamp.setPos(-1000, -800, 0)
lamp.setScale(350)
lampLight = envir.attachNewNode(PointLight("lamp"))
lampLight.node().setColor((1,1,1,1))
lampLight.node().setAttenuation((0,0,0.0000004))
lampLight.setPos(-1000, -800, 1800)
envir.setLight(lampLight)
state = {"ON": False}
def Change_state(direction, sated):
state[direction] = sated
if state["ON"]:
envir.setLight(lampLight)
else:
envir.setLightOff(lampLight)
base.accept('q', Change_state, ['ON', True])
base.accept('w', Change_state, ['ON', False])
base.accept('FW', Change_state, ['ON', True])
base.accept('KW', Change_state, ['ON', False])
def autoLight(task):
if not(sunLightHelper.getR() > 20 and sunLightHelper.getR() < 160):
messenger.send('FW')
else:
messenger.send('KW')
return task.cont
taskMgr.add(autoLight, 'auto')
spota = loader.loadModel('spot')
spota.reparentTo(render)
spota.setScale(10)
spota.setPos(0,4000,10)
spotLight = spota.attachNewNode(Spotlight("spot"))
spotLight.node().setColor((0.8, 0.4, 0.7, 1))
#spotLight.node().setAttenuation((0, 0.0003, 0))
lens = PerspectiveLens()
lens.setFov(2)
spotLight.node().setLens(lens)
spotLight.node().showFrustum()
spotLight.setPos(0, -500, 1000)
spotLight.setHpr(0,-90,0)
spotLight.node().getLens().setNearFar(200, 350)
spotLight.node().getLens().setFilmSize(10)
spotLight.node().setScene(render)
spotLight.node().setExponent(20)
#spotLight.hprInterval(10, (-180, 0, 0), (-60, 0, 0)).loop()
envir.setLight(spotLight)
base.run()
except Exception as e:
print(e)
base.destroy()
lamp.egg (22.1 KB)
sphere.egg.pz (48.5 KB)