light_property: linked graphic_object light properties to scirenderer.
[scilab.git] / scilab / modules / renderer / src / java / org / scilab / modules / renderer / JoGLView / util / LightingUtils.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2013 - Pedro SOUZA
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  */
11 package org.scilab.modules.renderer.JoGLView.util;
12
13 import org.scilab.forge.scirenderer.shapes.appearance.Material;
14 import org.scilab.forge.scirenderer.shapes.appearance.Color;
15 import org.scilab.forge.scirenderer.tranformations.Vector3d;
16 import org.scilab.forge.scirenderer.lightning.Light;
17 import org.scilab.forge.scirenderer.lightning.LightManager;
18
19 /**
20  * Utility functions to setup lighting.
21  * @author Pedro SOUZA
22  */
23 public class LightingUtils {
24
25     /**
26      * Convert the given material to a scirenderer material.
27      * @param m the material.
28      */
29     public static Material getMaterial(org.scilab.modules.graphic_objects.lighting.Material m) {
30         Material mtl = new Material();
31
32         Double[] color = m.getAmbientColor();
33         mtl.setAmbientColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
34         color = m.getDiffuseColor();
35         mtl.setDiffuseColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
36         color = m.getSpecularColor();
37         mtl.setSpecularColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
38         mtl.setColorMaterialEnable(m.getColorMaterialMode().booleanValue());
39         mtl.setShinines(m.getShinines().floatValue());
40
41         return mtl;
42     }
43
44     /**
45      * Setup the give light.
46      * @param manager the light manager.
47      * @param light the light.
48      */
49     public static void setLight(LightManager manager, org.scilab.modules.graphic_objects.lighting.Light light) {
50
51         setLightingEnable(manager, light.isEnable());
52
53         Light sciLight = manager.getLight(0);
54         Double[] color = light.getAmbientColor();
55         sciLight.setAmbientColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
56         color = light.getDiffuseColor();
57         sciLight.setDiffuseColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
58         color = light.getSpecularColor();
59         sciLight.setSpecularColor(new Color(color[0].floatValue(), color[1].floatValue(), color[2].floatValue()));
60
61         switch (light.getTypeAsInteger()) {
62             case 0: //directional
63                 sciLight.setDirection(new Vector3d(light.getDirection()));
64                 break;
65             case 1: //point
66                 sciLight.setPosition(new Vector3d(light.getPosition()));
67                 break;
68             default:
69                 break;
70         }
71     }
72
73     /**
74      * Enables/disables lighting.
75      * @param manager the light manager.
76      * @param status the status.
77      */
78     public static void setLightingEnable(LightManager manager, Boolean status) {
79         manager.setLightningEnable(status.booleanValue());
80         Light light = manager.getLight(0);
81         light.setEnable(status.booleanValue());
82     }
83 }