Worked around incorrect normal calculation if the kart was driving

on a physical object.
This commit is contained in:
hiker 2017-04-13 00:21:35 +10:00
parent 70d7fdd197
commit 4dce66ba6d
2 changed files with 11 additions and 1 deletions

View File

@ -73,8 +73,17 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to,
result.m_triangle_index = -1;
const TriangleMesh &tm =
Track::getCurrentTrack()->getTriangleMesh();
// FIXME: this code assumes atm that the object the kart is
// driving on is the main track (and not e.g. a physical object).
// If this should not be the case (i.e. the object hit by the
// raycast is not the object of the main track mesh, don't smooth
// the normals (since the index of the triangle is meant for a
// different triangle mesh). TODO: Add a mapping from bullet
// objects back to triangle meshes, so that it's easy to pick up
// the right triangle mesh for smoothing
if(m_smooth_normals &&
rayCallback.getTriangleIndex()>-1)
rayCallback.getTriangleIndex()>-1 &&
body == Track::getCurrentTrack()->getTriangleMesh().getBody())
{
#undef DEBUG_NORMALS
#ifdef DEBUG_NORMALS

View File

@ -79,6 +79,7 @@ public:
m_free_body = false;
m_body = body;
}
const btRigidBody *getBody() const { return m_body; }
// ------------------------------------------------------------------------
const Material* getMaterial(int n) const
{return m_triangleIndex2Material[n];}