Package scenes

Source Code of scenes.Scene

package scenes;

import java.util.Random;

import javax.media.opengl.GL;

import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PMatrix3D;
import processing.core.PVector;
import remixlab.proscene.Camera;

import remixlab.proscene.Frame;
import remixlab.proscene.Quaternion;
import utils.DrawingUtils;
import utils.Util;

import codeanticode.glgraphics.GLGraphics;
import codeanticode.glgraphics.GLGraphicsOffScreen;
import codeanticode.glgraphics.GLTexture;


public class Scene extends GLGraphicsOffScreen {


  ///////////////////////////////////////////////////////////////////
  // CONFIGURACION DE LA ESCENA
  ///////////////////////////////////////////////////////////////////

 
  protected Random random = new Random(System.currentTimeMillis());

  // dejo el parent como protected
  // porque tal vez lo necesita la clase que extiende de Scene
  protected PApplet parent;

  // la camara es privada
  // o sea que solo la puede controlar el que la creo
  // esta clase no tiene metodos para la camara
  private Camera camera;

  // es el eje de cordenadas 0,0,0 de la escena
  protected Frame anchor = new Frame();

  // yaw, pitch y roll son tres rotaciones distintas
  // por eso es que las guardo en tres quats diferentes
 
  protected Quaternion yaw = new Quaternion();
  protected Quaternion pitch = new Quaternion();
  protected Quaternion roll = new Quaternion();

  // un cuarto quat es usado para componer las otras
  // tres rotaciones y obtener una matriz para rotar
  // el anchor
  private Quaternion currentRotation = new Quaternion();

  // la escala de la scene
  protected PVector scale = new PVector(1,1,1);


  /////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////
 
  public Scene(PApplet parent, int OUTPUT_W, int OUTPUT_H){ 
   
   
    super(parent, OUTPUT_W, OUTPUT_H);
    System.out.println("bang");
    this.parent = parent;
   

   
    //////////////////////////////////////////////////////////////////////////
    // CONFIGURACIONES DE OPENGL
    //////////////////////////////////////////////////////////////////////////
   
    // TODO revisar que hace GLGraphics
    gl.glEnable (GL.GL_BLEND);
    gl.glBlendFunc (GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);

   
    //gl.glEnable (GL.GL_DEPTH_TEST);
    gl.glShadeModel(GL.GL_SMOOTH);
    //gl.setSwapInterval(2); //set vertical sync on
    gl.glEnable(GL.GL_NORMALIZE);
  }



  public void draw(){ 

    beginDraw();
    beginGL();
    lights();
    resetLights();

    //>>>>>>>>>>>>luces aqui
   
    gl.glPushMatrix()
    background(0,255,0,255);
   
    // aplico la transformacion de la camara   
    gl.glMultMatrixf(Util.glModelViewMatrix(camera.getModelViewMatrix()), 0)
   
     
    gl.glTranslatef(
        anchor.position().x,
        anchor.position().y,
        anchor.position().z);

    // Acumulo las 3 rotaciones en una sola
    currentRotation = new Quaternion();

    currentRotation.multiply(yaw);
    currentRotation.multiply(pitch);
    currentRotation.multiply(roll);

    anchor.setRotation(currentRotation);   

    // aplico las rotaciones
    gl.glMultMatrixf(Util.glModelViewMatrix(anchor.matrix()), 0);     
    // el scale lo paso a parte porque no tengo un metodo
    // para ajustar el scale en el Frame anchor
    gl.glScalef(scale.x, scale.y, scale.z)
   
   
    ////<<<<<<<<<<<<<<<
   
    ambientLight(100, 150, 100);
    spotLight100, 255, 100,
          0, 0, 0,
          1, 0, 0,
          90, 90); //(255, 255, 255, width/2, height/2, 1);

    ////<<<<<<<<<<<<<<<
   
    // llama al metodo render scene
 
   
    renderScene();
   
    //DrawingUtils.drawAxis( this, 100);

    // cierra el gl
    gl.glPopMatrix();

    endGL();
    endDraw()
  }

  ///////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////

  public void setScale(float scale){
    this.scale.set(scale, scale, scale);
  }

  public void setPosition (PVector position){
    anchor.setPosition(position);
  }


  public void yaw(float angle){   
    yaw.fromAxisAngle(Util.x, angle);
  }

  public void pitch(float angle){   
    pitch.fromAxisAngle(Util.y, angle);
  }

  public void roll(float angle){   
    roll.fromAxisAngle(Util.z, angle);
  }

  public void cameraFeed(Camera camera) {
    this.camera = camera;
  }

 
  ///////////////////////////////////////////////////////////////////////////
  // estos metodos son los que reescribo en la clase que extiende a la scene
  ///////////////////////////////////////////////////////////////////////////

  public void setup(){

  }

  public void update(){

  }

  protected void renderScene(){ 

  }

  public PVector getScale(){
    return scale;
  }


}
TOP

Related Classes of scenes.Scene

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.