From f9c00ee3ab5e47a368eadbcdab7149ca8d20ea65 Mon Sep 17 00:00:00 2001
From: Richard Pajersky <xpajersk@fi.muni.cz>
Date: Mon, 10 May 2021 09:39:38 +0200
Subject: [PATCH] Renders material instead of color

---
 .../analyst/gui/scene/SceneRenderer.java      | 26 ++++++++++++-------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java
index 2049549b..176987cf 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java
@@ -62,9 +62,7 @@ public class SceneRenderer {
         gl.glEnable(GL2.GL_NORMALIZE);
         gl.glDisable(GL2.GL_CULL_FACE);
         
-        //color enabled
-        gl.glEnable(GL2.GL_COLOR_MATERIAL);
-        gl.glEnable(GL2.GL_BLEND);
+        gl.glEnable(GL2.GL_BLEND);    // enabled transparency
         gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
     }
     
@@ -139,11 +137,7 @@ public class SceneRenderer {
         }
         
         for (DrawableMesh obj: drawables) {
-            // render color
-            Color color = obj.getColor();
-            gl.glColor4d(color.getRed() / 255d, color.getGreen() / 255d, 
-                    color.getBlue() / 255d , obj.getTransparency());
-
+            setMaterial(obj);
             for (MeshFacet facet: obj.getFacets()) {
                 // rotate
                 gl.glPushMatrix();
@@ -161,6 +155,21 @@ public class SceneRenderer {
          gl.glFlush();
     }
     
+    /**
+     * Sets up material based on DrawableMesh
+     */
+    private void setMaterial(DrawableMesh obj) {
+            Color color = obj.getColor();
+            float[] rgba = {color.getRed() / 255f, color.getGreen() / 255f, 
+                color.getBlue() / 255f , obj.getTransparency()};
+            gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_AMBIENT, rgba, 0);
+            gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0);
+            /*color = obj.getHighlights();
+            float[] highlights = {color.getRed(), color.getGreen(), color.getBlue(), 1};
+            gl.glMaterialf(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, 50);  
+            gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, highlights, 0);*/
+    }
+    
     /**
      * Clears the scene and prepares it for the re-drawing.
      */
@@ -211,5 +220,4 @@ public class SceneRenderer {
         
         gl.glEnd();
     }
-    
 }
-- 
GitLab