Skip to content

Instantly share code, notes, and snippets.

@SkyLeach
Last active April 20, 2018 20:07
Show Gist options
  • Save SkyLeach/5eaea2a75d6de4fd14ef24566a101707 to your computer and use it in GitHub Desktop.
Save SkyLeach/5eaea2a75d6de4fd14ef24566a101707 to your computer and use it in GitHub Desktop.
Panda3d Walking Panda Manual Demo Script showing Lighting Bug
#!/usr/bin/env python3
import sys
import os
import inspect
# threading code, only used for debug server right now.
# from threading import Thread
# from queue import Queue
from math import pi, sin, cos
import pprint
import logging
# project-specific
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence, Parallel, Func
from panda3d.core import Point3, PointLight, VBase4
logger = logging.getLogger(__name__)
# set us up for relative imports since we are burried for testing
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(
inspect.currentframe()))[0]))
if cmd_folder not in sys.path:
sys.path.insert(0, cmd_folder)
parent_folder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(
inspect.getfile(inspect.currentframe()))[0], '..', '..')))
if parent_folder not in sys.path:
sys.path.insert(0, parent_folder)
# cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(
# inspect.getfile(inspect.currentframe()))[0],"subfolder")))
# if cmd_subfolder not in sys.path:
# sys.path.insert(0, cmd_subfolder)
# FLASK UI CODE DEMO
# try:
# from simgame.restapi import getFlaskApp
# except ImportError:
# # this is basically for internal testing only
# print ('Regular import failed, hope this is in debug mode...')
# pprint.pprint('cmd_folder: {}'.format(cmd_folder))
# pprint.pprint('parent_folder: {}'.format(parent_folder))
# pprint.pprint(sys.path)
# from restapi import getFlaskApp
# TODO: move to settings
cam_speed = 0.5
class TestLights(ShowBase):
"""TestLights
Credit: Skyboxing code borrowed from skybox sample code by CheapestPixels
on GitHub
"""
# Bookkeeping for the rotation around the model
angle = 0.0
pitch = 0.0
adjust_angle = 0
adjust_pitch = 0
last_time = 0.0
# used to keep track of lights and parents for testing
testlights = []
_restart = False
_full_restart = False
def __init__(self):
ShowBase.__init__(self)
# Load and transform the panda actor.
self.pandaActor = Actor("models/panda-model",
{"walk": "models/panda-walk4"})
self.pandaActor.setScale(0.005, 0.005, 0.005)
self.pandaActor.reparentTo(self.render)
# Loop its animation.
self.pandaActor.loop("walk")
# load tutorial scene
self.scene = self.loader.loadModel("models/environment")
# Reparent the model to render.
self.scene.reparentTo(self.render)
# Apply scale and position transforms on the model.
self.scene.setScale(0.25, 0.25, 0.25)
self.scene.setPos(-8, 42, 0)
# Create the four lerp intervals needed for the panda to
# walk back and forth.
pandaPosInterval1 = self.pandaActor.posInterval(
13,
Point3(0, -10, 0),
startPos=Point3(0, 10, 0))
pandaPosInterval2 = self.pandaActor.posInterval(
13,
Point3(0, 10, 0),
startPos=Point3(0, -10, 0))
pandaHprInterval1 = self.pandaActor.hprInterval(
3,
Point3(180, 0, 0),
startHpr=Point3(0, 0, 0))
pandaHprInterval2 = self.pandaActor.hprInterval(
3,
Point3(0, 0, 0),
startHpr=Point3(180, 0, 0))
if logger.isEnabledFor(logging.DEBUG):
logger.debug('Setting up Parallels')
pandaPosInterval1 = Parallel(
pandaPosInterval1,
Func(self.dumpLightPos))
pandaPosInterval2 = Parallel(
pandaPosInterval2,
Func(self.dumpLightPos))
pandaHprInterval1 = Parallel(
pandaHprInterval1,
Func(self.dumpLightPos))
pandaHprInterval2 = Parallel(
pandaHprInterval2,
Func(self.dumpLightPos))
# Create and play the sequence that coordinates the intervals.
self.pandaPace = Sequence(pandaPosInterval1,
pandaHprInterval1,
pandaPosInterval2,
pandaHprInterval2,
name="pandaPace")
self.pandaPace.loop()
# Accept keypresses for looking around
self.camera.set_pos(sin(self.angle) * 20, -cos(self.angle) * 20, 0)
self.camera.look_at(0, 0, 0)
# Key events and camera movement task
self.accept("arrow_left", self.adjust_turning, [-1.0, 0.0])
self.accept("arrow_left-up", self.adjust_turning, [1.0, 0.0])
self.accept("arrow_right", self.adjust_turning, [1.0, 0.0])
self.accept("arrow_right-up", self.adjust_turning, [-1.0, 0.0])
self.accept("arrow_up", self.adjust_turning, [0.0, 1.0])
self.accept("arrow_up-up", self.adjust_turning, [0.0, -1.0])
self.accept("arrow_down", self.adjust_turning, [0.0, -1.0])
self.accept("arrow_down-up", self.adjust_turning, [0.0, 1.0])
self.accept("escape", sys.exit)
self.taskMgr.add(self.update_camera, 'adjust camera', sort=10)
def emptyTest(self):
"""emptyTest
Just an empty function to show the scene pre-testing
"""
pass
# def debugServer(self):
# # self.debug_server = getFlaskApp()
def dumpLightPos(self, testlights=None):
if not testlights:
testlights = self.testlights
logger.debug('Light transforms for {} lights'.format(
len(self.testlights)))
for ndex, (light, parent) in enumerate(testlights):
try:
logger.debug('Parent getPos/getPos(render):')
logger.debug('relative: {} absolute: {}'.format(
pprint.pformat(parent.getPos()),
pprint.pformat(parent.getPos(self.render)),
))
logger.debug('Light getPos/getPos(render):')
logger.debug('relative: {} absolute: {}'.format(
pprint.pformat(light.getPos()),
pprint.pformat(light.getPos(self.render)),
))
logger.debug('Parent getHpr/getHpr(render):')
logger.debug('relative: {} absolute: {}'.format(
pprint.pformat(parent.getHpr()),
pprint.pformat(parent.getHpr(self.render)),
))
logger.debug('Light getHpr/getHpr(render):')
logger.debug('relative: {} absolute: {}'.format(
pprint.pformat(light.getHpr()),
pprint.pformat(parent.getHpr(self.render)),
))
except AssertionError:
logger.error(
'Nodepath for light {} is no longer valid.'.format(
pprint.pformat(light)
))
logger.warn('reloading light path \'plight\' and recalling.')
plight = parent.find('plight')
logger.warn('recalling with found NodePath {}.'.format(
pprint.pformat(plight)))
self.dumpLightPos([(plight, parent)])
def addPointToActor(self, illumscene=False):
# Add pointlight code from manual
plight = PointLight('plight')
plight.setShadowCaster(True)
plight.setColor(VBase4(0.4, 0.4, 0.8, 1))
# Leave attenuation default for right now.
# plight.setAttenuation((1, 0.99, 0))
# if logger.isEnabledFor(logging.DEBUG):
# logger.debug('dir(plight):')
# logger.debug(pprint.pformat(dir(plight)))
#instead of adding to scene, add to actor
parent = self.pandaActor
# bind the light to the Actor, it will move
plnp = parent.attachNewNode(plight)
# bind the light to the Scene, then translate the scene, the
# light will not move
plnp.setPos(.5, .5, 3)
# make everything affected
if illumscene:
self.scene.setLight(plnp)
else:
self.pandaActor.setLight(plnp)
self.testlights.append((plnp, parent))
def remove_lights(self):
for light, parent in self.testlights:
light.removeNode()
def adjust_turning(self, heading, pitch):
self.adjust_angle += heading
self.adjust_pitch += pitch
def update_camera(self, task):
if task.time != 0.0:
dt = task.time - self.last_time
self.last_time = task.time
self.angle += pi * dt * self.adjust_angle * cam_speed
self.pitch += pi * dt * self.adjust_pitch * cam_speed
# Why /2.001 and not an even 2.0? Because then we'd have to set_Hpr
# explicitly, as look_at can't deduce the heading when the camera
# is exactly above/below the spheres center.
if self.pitch > pi / 2.001:
self.pitch = pi / 2.001
if self.pitch < -pi / 2.001:
self.pitch = -pi / 2.001
self.camera.set_pos(
sin(self.angle) * cos(abs(self.pitch)) * 20,
-cos(self.angle) * cos(abs(self.pitch)) * 20,
sin(self.pitch) * 20)
self.camera.look_at(0, 0, 0)
return Task.cont
if __name__ == '__main__':
if len(sys.argv) > 1 and sys.argv[1] == '--debug':
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
app = None
# use this for reloading a panda game while retaining state.
# this can be useful for turning on and off options that affect the entire
# engine.
while not app or app._restart:
if not app:
app = TestLights()
if app._full_restart:
app = TestLights()
else:
app._restart = False
# test function are bound to instance to speed up the tests
tests = [
('Default ambient-only for Manual Panda Scene.',
app.emptyTest, None),
# ('Enable Debug REST server.',
# app.debugServer, None),
('Pointlights on Actor', app.addPointToActor, [False]),
('Pointlights on Actor but illuminate whole Scene',
app.addPointToActor, [True]),
# ('Pointlights on SceneObj', app.addPointToScene),
# ('Pointlights on moving SceneObj', app.MovingStaticTest),
]
for ndex, (message, test_step, testargs) in enumerate(tests):
app.remove_lights()
logger.info('Test {}: {}'.format(ndex, message))
if testargs:
test_step(*testargs)
else:
test_step()
try:
app.run()
except SystemExit:
pass
@SkyLeach
Copy link
Author

usage: python panda_test_lights.py [--debug]

@SkyLeach
Copy link
Author

Output Logs:

Known pipe types:
  CocoaGraphicsPipe
(all display modules loaded.)
DEBUG:__main__:Setting up Parallels
INFO:__main__:Test 0: Default ambient-only for Manual Panda Scene.
DEBUG:__main__:Light transforms for 0 lights
INFO:__main__:Test 1: Pointlights on Actor
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, 10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, 10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
INFO:__main__:Test 2: Pointlights on Actor but illuminate whole Scene
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, 10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, 10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, 10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, 10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 2 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
Assertion failed: !is_empty() at line 983 of panda/src/pgraph/nodePath.cxx
ERROR:__main__:Nodepath for light **removed** is no longer valid.
WARNING:__main__:reloading light path 'plight' and recalling.
WARNING:__main__:recalling with found NodePath render/panda_walk_character/plight.

@SkyLeach
Copy link
Author

SkyLeach commented Apr 20, 2018

reset testlights list each iteration, new log

Known pipe types:
  CocoaGraphicsPipe
(all display modules loaded.)
DEBUG:__main__:Setting up Parallels
INFO:__main__:Test 0: Default ambient-only for Manual Panda Scene.
DEBUG:__main__:Light transforms for 0 lights
INFO:__main__:Test 1: Pointlights on Actor
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, 10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
INFO:__main__:Test 2: Pointlights on Actor but illuminate whole Scene
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(0.0025, -9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(0, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, -10, 0) absolute: LPoint3f(0, -10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, -10.0025, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light transforms for 1 lights
DEBUG:__main__:Parent getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0, 10, 0) absolute: LPoint3f(0, 10, 0)
DEBUG:__main__:Light getPos/getPos(render):
DEBUG:__main__:relative: LPoint3f(0.5, 0.5, 3) absolute: LPoint3f(-0.0025, 9.9975, 0.015)
DEBUG:__main__:Parent getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(180, 0, 0) absolute: LVecBase3f(180, 0, 0)
DEBUG:__main__:Light getHpr/getHpr(render):
DEBUG:__main__:relative: LVecBase3f(0, 0, 0) absolute: LVecBase3f(180, 0, 0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment