style: autoformat
This commit is contained in:
parent
08c323f8b3
commit
8fee10f2a5
116
Lighting.java
116
Lighting.java
|
@ -1,76 +1,98 @@
|
|||
import java.lang.*; import java.util.*; import algebra.*;
|
||||
import java.lang.*;
|
||||
import java.util.*;
|
||||
import algebra.*;
|
||||
|
||||
/* * The Lighting class describes a scene lighting environment
|
||||
* @author: gmorin, smondet */
|
||||
public class Lighting {
|
||||
static final int NONE = 0 ; static final int AMBIENT = 1 ;
|
||||
static final int POINT = 2 ;
|
||||
List lights ;
|
||||
/* Internal Class describing a light source */
|
||||
static final int NONE = 0;
|
||||
static final int AMBIENT = 1;
|
||||
static final int POINT = 2;
|
||||
List lights;
|
||||
|
||||
/* Internal Class describing a light source */
|
||||
private class Light {
|
||||
public int type = NONE;
|
||||
public double[] params;
|
||||
public Light (int type, double []params) {
|
||||
this.type = type; this.params = params;
|
||||
|
||||
public Light(int type, double[] params) {
|
||||
this.type = type;
|
||||
this.params = params;
|
||||
}
|
||||
}
|
||||
|
||||
public Lighting() {
|
||||
lights = new LinkedList(); }
|
||||
/* Adds a new ambient light source of intensity @ia to the environment. */
|
||||
public void addAmbientLight (double ia) {
|
||||
double [] v = new double[1];
|
||||
v[0] = ia; lights.add (new Light (AMBIENT, v)); }
|
||||
lights = new LinkedList();
|
||||
}
|
||||
|
||||
/* Adds a new ambient light source of intensity @ia to the environment. */
|
||||
public void addAmbientLight(double ia) {
|
||||
double[] v = new double[1];
|
||||
v[0] = ia;
|
||||
lights.add(new Light(AMBIENT, v));
|
||||
}
|
||||
|
||||
/** Addsa */
|
||||
public void addPointLight (double x, double y, double z, double id)
|
||||
{
|
||||
public void addPointLight(double x, double y, double z, double id) {
|
||||
double[] v = new double[5];
|
||||
v[0] = x; v[1] = y; v[2] = z; v[3] = id;
|
||||
lights.add (new Light (POINT, v)); }
|
||||
/* Computes the illuminated color of a 3D points of given position, normal and color,
|
||||
v[0] = x;
|
||||
v[1] = y;
|
||||
v[2] = z;
|
||||
v[3] = id;
|
||||
lights.add(new Light(POINT, v));
|
||||
}
|
||||
|
||||
/*
|
||||
* Computes the illuminated color of a 3D points of given position, normal and
|
||||
* color,
|
||||
* and given the camera position and material parameters.
|
||||
* Returns an array of size 3. */
|
||||
public double[] applyLights (Vector3 position, Vector3 normal, double[] color,
|
||||
Vector3 cameraPosition,
|
||||
double ka, double kd, double ks, double s)
|
||||
{
|
||||
* Returns an array of size 3.
|
||||
*/
|
||||
public double[] applyLights(Vector3 position, Vector3 normal, double[] color,
|
||||
Vector3 cameraPosition,
|
||||
double ka, double kd, double ks, double s) {
|
||||
double[] litColor = new double[3];
|
||||
/* total light intensity */
|
||||
double I = 0.0;
|
||||
Iterator it = lights.iterator ();
|
||||
while (it.hasNext ()){
|
||||
Light light = (Light) it.next ();
|
||||
Iterator it = lights.iterator();
|
||||
while (it.hasNext()) {
|
||||
Light light = (Light) it.next();
|
||||
switch (light.type) {
|
||||
case AMBIENT:
|
||||
/* Ambient light : A COMPLETER */
|
||||
/* I += ... */
|
||||
/* I += ... */
|
||||
break;
|
||||
case POINT:
|
||||
try {
|
||||
/* vector from point to camera center */
|
||||
Vector3 e = new Vector3 (cameraPosition);
|
||||
e.subtract (position);
|
||||
e.normalize ();
|
||||
/* vector from point to light*/
|
||||
Vector3 l = new Vector3 (light.params[0], light.params[1], light.params[2]);
|
||||
l.subtract (position);
|
||||
l.normalize ();
|
||||
/* half-vector between e and l*/
|
||||
Vector3 h = new Vector3 (e);
|
||||
h.add (l);
|
||||
h.normalize ();
|
||||
/* diffuse contribution : A COMPLETER */
|
||||
/* double Id = ... */
|
||||
/* specular contribution : A COMPLETER */
|
||||
/* double Is = ... */
|
||||
/* I += Id + Is;*/
|
||||
} catch (InstantiationException ex) { /* should not reach*/ }
|
||||
catch (SizeMismatchException ex) { /* should not reach*/ }
|
||||
/* vector from point to camera center */
|
||||
Vector3 e = new Vector3(cameraPosition);
|
||||
e.subtract(position);
|
||||
e.normalize();
|
||||
/* vector from point to light */
|
||||
Vector3 l = new Vector3(light.params[0], light.params[1], light.params[2]);
|
||||
l.subtract(position);
|
||||
l.normalize();
|
||||
/* half-vector between e and l */
|
||||
Vector3 h = new Vector3(e);
|
||||
h.add(l);
|
||||
h.normalize();
|
||||
/* diffuse contribution : A COMPLETER */
|
||||
/* double Id = ... */
|
||||
/* specular contribution : A COMPLETER */
|
||||
/* double Is = ... */
|
||||
/* I += Id + Is; */
|
||||
} catch (InstantiationException ex) {
|
||||
/* should not reach */ } catch (SizeMismatchException ex) {
|
||||
/* should not reach */ }
|
||||
break;
|
||||
default:
|
||||
/* ignore unknow lights */
|
||||
break;
|
||||
}
|
||||
}
|
||||
litColor[0] = I * color[0]; litColor[1] = I * color[1]; litColor[2] = I * color[2];
|
||||
}
|
||||
litColor[0] = I * color[0];
|
||||
litColor[1] = I * color[1];
|
||||
litColor[2] = I * color[2];
|
||||
return litColor;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue