fix lights and clip planes when render is transformed

This commit is contained in:
David Rose 2005-05-13 22:13:43 +00:00
parent 0560375cbb
commit 6daef3bd29

View File

@ -3937,7 +3937,7 @@ bind_light(PointLight *light_obj, const NodePath &light, int light_id) {
// Position needs to specify x, y, z, and w
// w == 1 implies non-infinite position
CPT(TransformState) transform = light.get_transform(_scene_setup->get_scene_root());
CPT(TransformState) transform = light.get_transform(_scene_setup->get_scene_root().get_parent());
LPoint3f pos = light_obj->get_point() * transform->get_mat();
LPoint4f fpos(pos[0], pos[1], pos[2], 1.0f);
@ -3977,7 +3977,7 @@ bind_light(DirectionalLight *light_obj, const NodePath &light, int light_id) {
// Position needs to specify x, y, z, and w.
// w == 0 implies light is at infinity
CPT(TransformState) transform = light.get_transform(_scene_setup->get_scene_root());
CPT(TransformState) transform = light.get_transform(_scene_setup->get_scene_root().get_parent());
LVector3f dir = light_obj->get_direction() * transform->get_mat();
LPoint4f fdir(-dir[0], -dir[1], -dir[2], 0);
GLP(Lightfv)(id, GL_POSITION, fdir.get_data());
@ -4021,7 +4021,7 @@ bind_light(Spotlight *light_obj, const NodePath &light, int light_id) {
// Position needs to specify x, y, z, and w
// w == 1 implies non-infinite position
CPT(TransformState) transform = light.get_transform(_scene_setup->get_scene_root());
CPT(TransformState) transform = light.get_transform(_scene_setup->get_scene_root().get_parent());
const LMatrix4f &light_mat = transform->get_mat();
LPoint3f pos = lens->get_nodal_point() * light_mat;
LVector3f dir = lens->get_view_vector() * light_mat;
@ -5203,7 +5203,7 @@ void CLP(GraphicsStateGuardian)::
bind_clip_plane(const NodePath &plane, int plane_id) {
GLenum id = get_clip_plane_id(plane_id);
CPT(TransformState) transform = plane.get_transform(_scene_setup->get_scene_root());
CPT(TransformState) transform = plane.get_transform(_scene_setup->get_scene_root().get_parent());
const PlaneNode *plane_node;
DCAST_INTO_V(plane_node, plane.node());
Planef xformed_plane = plane_node->get_plane() * transform->get_mat();