changeset 36:d640f2a34031

Only scale/translate/rotate the model if those attributes have been set in the scenefile.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 01 Dec 2019 23:12:04 +0200
parents d0cd281934a3
children 73a785323e8a
files dmmodel.cpp dmmodel.h gldragon.cpp
diffstat 3 files changed, 24 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/dmmodel.cpp	Tue Nov 26 07:22:35 2019 +0200
+++ b/dmmodel.cpp	Sun Dec 01 23:12:04 2019 +0200
@@ -709,13 +709,22 @@
                 return false;
 
             if (key == "translate")
+            {
                 model->translate = vec;
+                model->translateSet = true;
+            }
             else
             if (key == "rotate")
+            {
                 model->rotate = vec;
+                model->rotateSet = true;
+            }
             else
             if (key == "scale")
+            {
                 model->scale = vec;
+                model->scaleSet = true;
+            }
         }
         else
         if (info.state == 1 && key == "specular")
--- a/dmmodel.h	Tue Nov 26 07:22:35 2019 +0200
+++ b/dmmodel.h	Sun Dec 01 23:12:04 2019 +0200
@@ -143,6 +143,7 @@
     DMVector4 ambient, diffuse, specular;
     int shininess;
     DMVector3 translate, scale, rotate;
+    bool translateSet, scaleSet, rotateSet;
 
     unsigned int id_prog, id_fs, id_vs;
 
@@ -172,7 +173,8 @@
 
         translate.x = translate.y = translate.z = 0;
         rotate.x = rotate.y = rotate.z = 0;
-        scale.x = scale.y = scale.z = 1;
+        scale.x = scale.y = scale.z = 0;
+        translateSet = rotateSet = scaleSet = false;
 
         specular.p.x = specular.p.y = specular.p.z = 0.8f; specular.p.w = 1.0f;
         shininess = 96;
--- a/gldragon.cpp	Tue Nov 26 07:22:35 2019 +0200
+++ b/gldragon.cpp	Sun Dec 01 23:12:04 2019 +0200
@@ -175,11 +175,18 @@
     glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &maxIndices);
 
     // Add transforms
-    glScalef(model.scale.x, model.scale.y, model.scale.z);
-    glTranslatef(model.translate.x, model.translate.y, model.translate.z);
-    glRotatef(model.rotate.x, 1.0f, 0.0f, 0.0f);
-    glRotatef(model.rotate.y, 0.0f, 1.0f, 0.0f);
-    glRotatef(model.rotate.z, 0.0f, 0.0f, 1.0f);
+    if (model.scaleSet)
+        glScalef(model.scale.x, model.scale.y, model.scale.z);
+
+    if (model.translateSet)
+        glTranslatef(model.translate.x, model.translate.y, model.translate.z);
+
+    if (model.rotateSet)
+    {
+        glRotatef(model.rotate.x, 1.0f, 0.0f, 0.0f);
+        glRotatef(model.rotate.y, 0.0f, 1.0f, 0.0f);
+        glRotatef(model.rotate.z, 0.0f, 0.0f, 1.0f);
+    }
 
     glVertexPointer(3, GL_FLOAT, 0, &model.vertices[0]);
     glNormalPointer(   GL_FLOAT, 0, &model.normals[0]);