import Tuple.*;
 
 
import SGGUI.*;
import SGCamera.*;
import Raytracing.*;
 
SGCamera cam;
Raytracer tracer;
 
KDTree accel;
 
SGGUI controller;
VerticalLayout settings;
 
SGSlider fov;
SGCheckBox showOctree;
 
PFont fnt;
 
Triangle picked;
void setup(){
 
size(550,550,P3D);
frameRate(30);
fnt = loadFont("writing.vlw");
textFont(fnt);
textMode(SCREEN);
controller = new SGGUI(this,fnt);
controller.GUI_HIGHLIGHT = color(200,220,200);
settings = new VerticalLayout(controller,10,10,150);
settings.title = "Settings";
fov = new SGSlider( "Cam FOV",1.5,.1,1,2.5);
showOctree = new SGCheckBox("Show KD-Tree",0);
 
 
settings.add(showOctree);
settings.add(fov);
controller.add(settings);
 
 
cam = new SGCamera(this,100,-50,100,0,0,0,SGCamera.ORBIT,SGCamera.DOLLY);
 
tracer = new Raytracer(this);
tracer.openFile("phex.mra",cam);
 
accel = (KDTree)tracer.accelerator;
 
cam.lookAt(0,0,0);
 
}
 
public void draw(){
 
background(255);
cam.feed();
cam.fov = fov.getVal();
accel.showTree = showOctree.getVal();
tracer.draw();
 
if (picked != null){
stroke(0,0,0,100);
fill(255,255,255,150);
beginShape();
vertex(picked.vert0.x,picked.vert0.y,picked.vert0.z);
vertex(picked.vert1.x,picked.vert1.y,picked.vert1.z);
vertex(picked.vert2.x,picked.vert2.y,picked.vert2.z);
endShape();
 
}
 
}
 
void mouseMoved(){
Tuple3f direction = cam.getRay(mouseX,mouseY);
Ray pick = new Ray(cam.pos, direction);
 
accel.findNearest(pick);
if (pick.occluder != null){
picked = (Triangle)pick.occluder;
}
else{
picked = null;
}
 
}