[Bf-blender-cvs] [1af042d] master: BGE: Fix for T42285 & T38935 crashes. They are Rayhit related.

Jorge Bernal noreply at git.blender.org
Fri Feb 13 00:15:42 CET 2015


Commit: 1af042d9ed6b15463385c04665410ad54cf73f60
Author: Jorge Bernal
Date:   Fri Feb 13 00:09:32 2015 +0100
Branches: master
https://developer.blender.org/rB1af042d9ed6b15463385c04665410ad54cf73f60

BGE: Fix for T42285 & T38935 crashes. They are Rayhit related.

We make sure that good values are passed to GetPolygon() and we check that the visual mesh doesn't have a wrong displacement when it passes over a object which has a mesh triangle as compound bound.

Reviewers: dfelinto, sergof, agoose77, moguri

Reviewed By: moguri

Subscribers: agoose77

Differential Revision: https://developer.blender.org/D979

===================================================================

M	source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

===================================================================

diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index 415ea87..116a113 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -1269,28 +1269,32 @@ void RAS_OpenGLRasterizer::RemoveLight(RAS_ILightObject* lightobject)
 
 bool RAS_OpenGLRasterizer::RayHit(struct KX_ClientObjectInfo *client, KX_RayCast *result, void * const data)
 {
-	double* const oglmatrix = (double* const) data;
-
-	RAS_Polygon* poly = result->m_hitMesh->GetPolygon(result->m_hitPolygon);
-	if (!poly->IsVisible())
+	if (result->m_hitMesh) {
+		double* const oglmatrix = (double* const) data;
+
+		RAS_Polygon* poly = result->m_hitMesh->GetPolygon(result->m_hitPolygon);
+		if (!poly->IsVisible())
+			return false;
+
+		MT_Vector3 resultnormal(result->m_hitNormal);
+		MT_Vector3 left(oglmatrix[0],oglmatrix[1],oglmatrix[2]);
+		MT_Vector3 dir = -(left.cross(resultnormal)).safe_normalized();
+		left = (dir.cross(resultnormal)).safe_normalized();
+		// for the up vector, we take the 'resultnormal' returned by the physics
+
+		double maat[16] = {left[0],         left[1],         left[2],         0,
+			               dir[0],          dir[1],          dir[2],          0,
+				           resultnormal[0], resultnormal[1], resultnormal[2], 0,
+					       0,               0,               0,               1};
+
+		glTranslated(oglmatrix[12],oglmatrix[13],oglmatrix[14]);
+		//glMultMatrixd(oglmatrix);
+		glMultMatrixd(maat);
+		return true;
+	}
+	else {
 		return false;
-
-	MT_Point3 resultpoint(result->m_hitPoint);
-	MT_Vector3 resultnormal(result->m_hitNormal);
-	MT_Vector3 left(oglmatrix[0],oglmatrix[1],oglmatrix[2]);
-	MT_Vector3 dir = -(left.cross(resultnormal)).safe_normalized();
-	left = (dir.cross(resultnormal)).safe_normalized();
-	// for the up vector, we take the 'resultnormal' returned by the physics
-
-	double maat[16] = {left[0],         left[1],         left[2],         0,
-	                   dir[0],          dir[1],          dir[2],          0,
-	                   resultnormal[0], resultnormal[1], resultnormal[2], 0,
-	                   0,               0,               0,               1};
-
-	glTranslated(resultpoint[0],resultpoint[1],resultpoint[2]);
-	//glMultMatrixd(oglmatrix);
-	glMultMatrixd(maat);
-	return true;
+	}
 }
 
 void RAS_OpenGLRasterizer::applyTransform(double* oglmatrix,int objectdrawmode )




More information about the Bf-blender-cvs mailing list