diff --git a/panda/src/collide/collisionSphere.cxx b/panda/src/collide/collisionSphere.cxx index aacc43fcb2..0d3275ec36 100644 --- a/panda/src/collide/collisionSphere.cxx +++ b/panda/src/collide/collisionSphere.cxx @@ -620,14 +620,20 @@ intersects_line(double &t1, double &t2, double A = dot(delta, delta); - nassertr(A != 0.0, false); - LVector3 fc = from - get_center(); - double B = 2.0f* dot(delta, fc); double fc_d2 = dot(fc, fc); double radius = get_radius() + inflate_radius; double C = fc_d2 - radius * radius; + if (A == 0.0) { + // Degenerate case where delta is zero. This is effectively a test + // against a point (or sphere, for nonzero inflate_radius). + t1 = 0.0; + t2 = 0.0; + return C < 0.0; + } + + double B = 2.0f * dot(delta, fc); double radical = B*B - 4.0*A*C; if (IS_NEARLY_ZERO(radical)) { diff --git a/panda/src/display/graphicsStateGuardian.cxx b/panda/src/display/graphicsStateGuardian.cxx index 5ca7e6bc32..749fbc7b35 100644 --- a/panda/src/display/graphicsStateGuardian.cxx +++ b/panda/src/display/graphicsStateGuardian.cxx @@ -1433,12 +1433,7 @@ fetch_specified_part(Shader::ShaderMatInput part, InternalName *name, // Apply the default OpenGL lights otherwise. // Special exception for light 0, which defaults to white. string basename = name->get_basename(); - if (basename == "color" || basename == "diffuse") { - t.set_row(3, _light_color_scale); - return &t; - } else if (basename == "specular") { - return &LMatrix4::ones_mat(); - } + return &LMatrix4::ones_mat(); } return fetch_specified_member(NodePath(), name, t); } @@ -1494,7 +1489,7 @@ fetch_specified_part(Shader::ShaderMatInput part, InternalName *name, } else if (index == 0) { // Apply the default OpenGL lights otherwise. // Special exception for light 0, which defaults to white. - t.set_row(0, _light_color_scale); + t.set_row(0, LVecBase4(1, 1, 1, 1)); } return &t; } @@ -1539,7 +1534,6 @@ fetch_specified_member(const NodePath &np, CPT_InternalName attrib, LMatrix4 &t) Light *light = node->as_light(); nassertr(light != nullptr, &LMatrix4::ident_mat()); LColor c = light->get_color(); - c.componentwise_mult(_light_color_scale); t.set_row(3, c); return &t; @@ -1551,7 +1545,6 @@ fetch_specified_member(const NodePath &np, CPT_InternalName attrib, LMatrix4 &t) nassertr(light != nullptr, &LMatrix4::ident_mat()); if (node->is_ambient_light()) { LColor c = light->get_color(); - c.componentwise_mult(_light_color_scale); t.set_row(3, c); } else { // Non-ambient lights don't currently have an ambient color in Panda3D. @@ -1570,7 +1563,6 @@ fetch_specified_member(const NodePath &np, CPT_InternalName attrib, LMatrix4 &t) t.set_row(3, LColor(0.0f, 0.0f, 0.0f, 1.0f)); } else { LColor c = light->get_color(); - c.componentwise_mult(_light_color_scale); t.set_row(3, c); } return &t;