GwieF.com : Project : Classes : Scene3D
logo

Scene3D.java


package com.gwief.jTrace;

/*
    Scene3D By Damian Newport
    Stores Everything needed to draw the model
*/  

import java.util.ArrayList;

/**
 *
 * @author  Damian Newport
 * @version 
 */
public class Scene3D {

    public ArrayList shapes;
    public ArrayList lights;
    
    public CSGnode CSGstart;
    public Camera camera;
    public Color3D Ia;
    public Color3D background;
    
    /** Creates new Scene3D */
    public Scene3D() {
        shapes = new ArrayList();
        lights = new ArrayList();
        Ia = new Color3D(0.2,0.2,0.2); // default brightness;
        background = new Color3D(); // default = black
    }

    public final void setCSGstart(CSGnode startnode){ CSGstart = startnode; }
    public final void setcamera(Camera cam){camera = cam; }
    public final void setIa(Color3D ia){Ia = ia; }
    public final void setIa(double r, double g, double b){Ia = new Color3D(r,g,b); }
    public final void setbackground(Color3D bg){background = bg; }
    public final void setbackground(double r, double g, double b){ background = new Color3D(r,g,b); }
    
    public final void addshape(Shape3D shape){ shapes.add(shape); }
    public final void addlight(Light light){ lights.add(light); }
    public final boolean delshape(Shape3D shape){ return shapes.remove(shape); }
    public final Shape3D delshape(int index){ return (Shape3D)shapes.remove(index); }
    public final boolean dellight(Light light){ return lights.remove(light); }
    public final Light dellight(int index){ return (Light)lights.remove(index); }
    
    public final int getNumShapes(){ return shapes.size(); }
    public final int getNumLights(){ return lights.size(); }
    public final Camera getcamera(){return camera; }
    public final CSGnode getCSGstart(){return CSGstart; }
    
    public final Shape3D getshape(int index){
        return (Shape3D)shapes.get(index);
    }
    
    public final Light getlight(int index){
        return (Light)lights.get(index);
    }
    
    public final void build(){
        CSGstart.build(new Transform3D());
    }
    
    public final Intersection[] trace(Ray ray){
        return CSGstart.getBranch(ray);
    }
}