[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