[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14960] trunk/blender/source/gameengine: Apply BGE patch 11137: Render objects with negative scaling correctly ( as in Blender)

Benoit Bolsee benoit.bolsee at online.be
Sun May 25 16:37:40 CEST 2008


Revision: 14960
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14960
Author:   ben2610
Date:     2008-05-25 16:37:39 +0200 (Sun, 25 May 2008)

Log Message:
-----------
Apply BGE patch 11137: Render objects with negative scaling correctly (as in Blender)

Modified Paths:
--------------
    trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
    trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
    trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
    trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h
    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp

Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2008-05-25 14:37:39 UTC (rev 14960)
@@ -125,6 +125,22 @@
 
 }
 
+void KX_BlenderRenderTools::SetClientObject(void* obj)
+{
+	if (m_clientobject != obj)
+	{
+		if (obj == NULL || !((KX_GameObject*)obj)->IsNegativeScaling())
+		{
+			glFrontFace(GL_CCW);
+		} else 
+		{
+			glFrontFace(GL_CW);
+		}
+		m_clientobject = obj;
+		m_modified = true;
+	}
+}
+
 bool KX_BlenderRenderTools::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
 {
 	double* const oglmatrix = (double* const) data;

Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h	2008-05-25 14:37:39 UTC (rev 14960)
@@ -105,6 +105,8 @@
 
 	virtual	void Render2DFilters(RAS_ICanvas* canvas);
 
+	virtual void SetClientObject(void* obj);
+
 };
 
 #endif //__KX_BLENDERRENDERTOOLS

Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2008-05-25 14:37:39 UTC (rev 14960)
@@ -462,6 +462,22 @@
 
 }
 
+void GPC_RenderTools::SetClientObject(void* obj)
+{
+	if (m_clientobject != obj)
+	{
+		if (obj == NULL || !((KX_GameObject*)obj)->IsNegativeScaling())
+		{
+			glFrontFace(GL_CCW);
+		} else 
+		{
+			glFrontFace(GL_CW);
+		}
+		m_clientobject = obj;
+		m_modified = true;
+	}
+}
+
 bool GPC_RenderTools::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
 {
 	double* const oglmatrix = (double* const) data;

Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.h
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.h	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.h	2008-05-25 14:37:39 UTC (rev 14960)
@@ -153,6 +153,8 @@
 
 	virtual	void Render2DFilters(RAS_ICanvas* canvas);
 
+	virtual void SetClientObject(void* obj);
+
 protected:
 	/** 
 	 * Copied from KX_BlenderGL.cpp in KX_blenderhook

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-05-25 14:37:39 UTC (rev 14960)
@@ -77,6 +77,7 @@
 	m_layer(0),
 	m_bSuspendDynamics(false),
 	m_bUseObjectColor(false),
+	m_bIsNegativeScaling(false),
 	m_bVisible(true),
 	m_pPhysicsController1(NULL),
 	m_pPhysicsEnvironment(NULL),
@@ -335,7 +336,7 @@
 	trans.setBasis(GetSGNode()->GetWorldOrientation());
 	
 	MT_Vector3 scaling = GetSGNode()->GetWorldScaling();
-	
+	m_bIsNegativeScaling = ((scaling[0] < 0.0) ^ (scaling[1] < 0.0) ^ (scaling[2] < 0.0)) ? true : false;
 	trans.scale(scaling[0], scaling[1], scaling[2]);
 	trans.getValue(fl);
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-05-25 14:37:39 UTC (rev 14960)
@@ -75,6 +75,7 @@
 	
 	bool								m_bSuspendDynamics;
 	bool								m_bUseObjectColor;
+	bool								m_bIsNegativeScaling;
 	MT_Vector4							m_objectColor;
 
 	// Is this object set to be visible? Only useful for the
@@ -599,6 +600,14 @@
 	);
 		
 	/**
+	 * Get the negative scaling state
+	 */
+		bool
+	IsNegativeScaling(
+		void
+	) { return m_bIsNegativeScaling; }
+
+	/**
 	 * @section Logic bubbling methods.
 	 */
 

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h	2008-05-25 14:37:39 UTC (rev 14960)
@@ -146,6 +146,7 @@
 		int layer
 	)=0;
 
+	virtual
 		void	
 	SetClientObject(
 		void* obj

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2008-05-25 14:34:03 UTC (rev 14959)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2008-05-25 14:37:39 UTC (rev 14960)
@@ -325,6 +325,8 @@
 		while (ActivateMaterial(cameratrans, rasty, rendertools, drawmode))
 			RenderMeshSlot(cameratrans, rasty, rendertools, *it, drawmode);
 	}
+	// to reset the eventual GL_CW mode
+	rendertools->SetClientObject(NULL);
 }
 
 





More information about the Bf-blender-cvs mailing list