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:
Diffstat (limited to 'source/gameengine/Converter/BL_BlenderDataConversion.cpp')
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp107
1 files changed, 55 insertions, 52 deletions
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index f7726ebaf78..f861b105ba3 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -613,19 +613,14 @@ static bool ConvertMaterial(
material->flag[i] |= ( mat->game.alpha_blend & GEMAT_ALPHA )?USEALPHA:0;
material->flag[i] |= ( mat->game.alpha_blend & GEMAT_ADD )?CALCALPHA:0;
- if (material->img[i]->flag & IMA_REFLECT)
+ if (material->img[i]->flag & IMA_REFLECT) {
material->mapping[i].mapping |= USEREFL;
- else
- {
- mttmp = getImageFromMaterial( mat, i );
- if (mttmp && mttmp->texco &TEXCO_UV)
- {
- STR_String uvName = mttmp->uvname;
-
- if (!uvName.IsEmpty())
- material->mapping[i].uvCoName = mttmp->uvname;
- else
- material->mapping[i].uvCoName = "";
+ }
+ else {
+ mttmp = getMTexFromMaterial(mat, i);
+ if (mttmp && (mttmp->texco & TEXCO_UV)) {
+ /* string may be "" but thats detected as empty after */
+ material->mapping[i].uvCoName = mttmp->uvname;
}
material->mapping[i].mapping |= USEUV;
}
@@ -639,9 +634,9 @@ static bool ConvertMaterial(
continue;
}
- mttmp = getImageFromMaterial( mat, i );
- if ( mttmp ) {
- if ( mttmp->tex ) {
+ mttmp = getMTexFromMaterial(mat, i);
+ if (mttmp) {
+ if (mttmp->tex) {
if ( mttmp->tex->type == TEX_IMAGE ) {
material->mtexname[i] = mttmp->tex->id.name;
material->img[i] = mttmp->tex->ima;
@@ -691,44 +686,44 @@ static bool ConvertMaterial(
#endif
/// --------------------------------
// mapping methods
- material->mapping[i].mapping |= ( mttmp->texco & TEXCO_REFL )?USEREFL:0;
-
- if (mttmp->texco & TEXCO_OBJECT) {
- material->mapping[i].mapping |= USEOBJ;
- if (mttmp->object)
- material->mapping[i].objconame = mttmp->object->id.name;
- }
- else if (mttmp->texco &TEXCO_REFL)
- material->mapping[i].mapping |= USEREFL;
- else if (mttmp->texco &(TEXCO_ORCO|TEXCO_GLOB))
- material->mapping[i].mapping |= USEORCO;
- else if (mttmp->texco &TEXCO_UV)
- {
- STR_String uvName = mttmp->uvname;
-
- if (!uvName.IsEmpty())
+ if (mat->septex & (1 << i)) {
+ // If this texture slot isn't in use, set it to disabled to prevent multi-uv problems
+ material->mapping[i].mapping = DISABLE;
+ } else {
+ material->mapping[i].mapping |= ( mttmp->texco & TEXCO_REFL )?USEREFL:0;
+
+ if (mttmp->texco & TEXCO_OBJECT) {
+ material->mapping[i].mapping |= USEOBJ;
+ if (mttmp->object)
+ material->mapping[i].objconame = mttmp->object->id.name;
+ }
+ else if (mttmp->texco &TEXCO_REFL)
+ material->mapping[i].mapping |= USEREFL;
+ else if (mttmp->texco &(TEXCO_ORCO|TEXCO_GLOB))
+ material->mapping[i].mapping |= USEORCO;
+ else if (mttmp->texco & TEXCO_UV) {
+ /* string may be "" but thats detected as empty after */
material->mapping[i].uvCoName = mttmp->uvname;
+ material->mapping[i].mapping |= USEUV;
+ }
+ else if (mttmp->texco &TEXCO_NORM)
+ material->mapping[i].mapping |= USENORM;
+ else if (mttmp->texco &TEXCO_TANGENT)
+ material->mapping[i].mapping |= USETANG;
else
- material->mapping[i].uvCoName = "";
- material->mapping[i].mapping |= USEUV;
+ material->mapping[i].mapping |= DISABLE;
+
+ material->mapping[i].scale[0] = mttmp->size[0];
+ material->mapping[i].scale[1] = mttmp->size[1];
+ material->mapping[i].scale[2] = mttmp->size[2];
+ material->mapping[i].offsets[0] = mttmp->ofs[0];
+ material->mapping[i].offsets[1] = mttmp->ofs[1];
+ material->mapping[i].offsets[2] = mttmp->ofs[2];
+
+ material->mapping[i].projplane[0] = mttmp->projx;
+ material->mapping[i].projplane[1] = mttmp->projy;
+ material->mapping[i].projplane[2] = mttmp->projz;
}
- else if (mttmp->texco &TEXCO_NORM)
- material->mapping[i].mapping |= USENORM;
- else if (mttmp->texco &TEXCO_TANGENT)
- material->mapping[i].mapping |= USETANG;
- else
- material->mapping[i].mapping |= DISABLE;
-
- material->mapping[i].scale[0] = mttmp->size[0];
- material->mapping[i].scale[1] = mttmp->size[1];
- material->mapping[i].scale[2] = mttmp->size[2];
- material->mapping[i].offsets[0] = mttmp->ofs[0];
- material->mapping[i].offsets[1] = mttmp->ofs[1];
- material->mapping[i].offsets[2] = mttmp->ofs[2];
-
- material->mapping[i].projplane[0] = mttmp->projx;
- material->mapping[i].projplane[1] = mttmp->projy;
- material->mapping[i].projplane[2] = mttmp->projz;
/// --------------------------------
switch (mttmp->blendtype) {
@@ -1124,6 +1119,16 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, KX_Scene* scene,
MT_Vector3 no[4];
MT_Vector4 tan[4];
+ /* ugh, if there is a less annoying way to do this please use that.
+ * since these are converted from floats to floats, theres no real
+ * advantage to use MT_ types - campbell */
+ for (unsigned int i = 0; i < 4; i++) {
+ const float zero_vec[4] = {0.0f};
+ pt[i].setValue(zero_vec);
+ no[i].setValue(zero_vec);
+ tan[i].setValue(zero_vec);
+ }
+
for (int f=0;f<totface;f++,mface++)
{
/* get coordinates, normals and tangents */
@@ -2233,8 +2238,6 @@ static void bl_ConvertBlenderObject_Single(
gameobj->NodeSetLocalScale(scale);
gameobj->NodeUpdateGS(0);
- BL_ConvertMaterialIpos(blenderobject, gameobj, converter);
-
sumolist->Add(gameobj->AddRef());
BL_ConvertProperties(blenderobject,gameobj,timemgr,kxscene,isInActiveLayer);