Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2006-01-06 06:46:54 +0300
committerErwin Coumans <blender@erwincoumans.com>2006-01-06 06:46:54 +0300
commit2e6d57618232b8b4ce8e5afe84fd278041cbbbfe (patch)
treec0f05e6b59aada420dd600f1138e9149b97d9e9d /source/gameengine/Converter/KX_IpoConvert.cpp
parentef520a8cc9e863aa234be0ee60d1038e7ec8fc44 (diff)
Sorry to break the cvs-closed status, so if you really need to make a new 2.40 build, just disable the game engine if it doesn't compile for a platform. Again, sorry if this breaks non-windows platforms, but I hope people help to get this amazing fix working for all platforms. Armature-fixing contribution from Snailrose. Also lots of cool things from Snailrose and Lagan.
Armatures are back Split screen Double sided lightning Ambient lighting Alpha test Material IPO support (one per object atm) Blender materials GLSL shaders - Python access Up to three texture samplers from the material panel ( 2D & Cube map ) Python access to a second set of uv coordinates See http://www.elysiun.com/forum/viewtopic.php?t=58057
Diffstat (limited to 'source/gameengine/Converter/KX_IpoConvert.cpp')
-rw-r--r--source/gameengine/Converter/KX_IpoConvert.cpp194
1 files changed, 194 insertions, 0 deletions
diff --git a/source/gameengine/Converter/KX_IpoConvert.cpp b/source/gameengine/Converter/KX_IpoConvert.cpp
index 56eda51384b..defcdffb6fc 100644
--- a/source/gameengine/Converter/KX_IpoConvert.cpp
+++ b/source/gameengine/Converter/KX_IpoConvert.cpp
@@ -59,6 +59,7 @@
#include "DNA_lamp_types.h"
#include "DNA_world_types.h"
#include "DNA_camera_types.h"
+#include "DNA_material_types.h"
/* end of blender include block */
#include "KX_IPO_SGController.h"
@@ -66,6 +67,7 @@
#include "KX_CameraIpoSGController.h"
#include "KX_WorldIpoController.h"
#include "KX_ObColorIpoSGController.h"
+#include "KX_MaterialIpoController.h"
#include "SG_Node.h"
@@ -561,3 +563,195 @@ void BL_ConvertWorldIpos(struct World* blenderworld,KX_BlenderSceneConverter *co
}
}
+
+void BL_ConvertMaterialIpos(
+ Material* blendermaterial,
+ KX_GameObject* gameobj,
+ KX_BlenderSceneConverter *converter
+ )
+{
+ if (blendermaterial->ipo) {
+
+ KX_MaterialIpoController* ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+
+ BL_InterpolatorList *ipoList= GetIpoList(blendermaterial->ipo, converter);
+
+
+ ipocontr->m_rgba[0] = blendermaterial->r;
+ ipocontr->m_rgba[1] = blendermaterial->g;
+ ipocontr->m_rgba[2] = blendermaterial->b;
+ ipocontr->m_rgba[3] = blendermaterial->alpha;
+
+ ipocontr->m_specrgb[0] = blendermaterial->specr;
+ ipocontr->m_specrgb[1] = blendermaterial->specg;
+ ipocontr->m_specrgb[2] = blendermaterial->specb;
+
+ ipocontr->m_hard = blendermaterial->har;
+ ipocontr->m_spec = blendermaterial->spec;
+ ipocontr->m_ref = blendermaterial->ref;
+ ipocontr->m_emit = blendermaterial->emit;
+ ipocontr->m_alpha = blendermaterial->alpha;
+ KX_IScalarInterpolator *ipo;
+
+ // --
+ ipo = ipoList->GetScalarInterpolator(MA_COL_R);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[0],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_COL_G);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[1],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_COL_B);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[2],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_ALPHA);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_rgba[3],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+ // --
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC_R );
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_specrgb[0],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC_G);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_specrgb[1],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC_B);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_specrgb[2],
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ // --
+ ipo = ipoList->GetScalarInterpolator(MA_HARD);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_hard,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_SPEC);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_spec,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+
+ ipo = ipoList->GetScalarInterpolator(MA_REF);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_ref,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+
+ ipo = ipoList->GetScalarInterpolator(MA_EMIT);
+ if (ipo) {
+ if (!ipocontr) {
+ ipocontr = new KX_MaterialIpoController();
+ gameobj->GetSGNode()->AddSGController(ipocontr);
+ ipocontr->SetObject(gameobj->GetSGNode());
+ }
+ KX_IInterpolator *interpolator =
+ new KX_ScalarInterpolator(
+ &ipocontr->m_emit,
+ ipo);
+ ipocontr->AddInterpolator(interpolator);
+ }
+ }
+}
+