package com.julapy.experiments; //////////////////////////////////////////////////////////////////////////////// // // Project: Julapy // File: CilindricoCollapse.java // Created by: lukaszkarluk, Feb 17, 2009 // //////////////////////////////////////////////////////////////////////////////// import javax.media.opengl.GL; import com.julapy.utils.TileSaver; import processing.opengl.PGraphicsOpenGL; import processing.core.*; import toxi.geom.Vec3D; public class CilindricoCollapse extends PApplet { PGraphicsOpenGL pgl; GL gl; Boolean lightingEnabled = true; float[] lightAmbient = { 0.1f, 0.1f, 0.1f, 1.0f }; float[] lightDiffuse = { 0.7f, 0.7f, 0.7f, 1.0f }; float[] lightSpecular = { 0.5f, 0.5f, 0.5f, 1.0f }; float[] lightPosition = { -1.5f, 1.0f, -4.0f, 1.0f }; float sinLUT[]; float cosLUT[]; float SINCOS_PRECISION=1.0f; int SINCOS_LENGTH= (int)(360.0/SINCOS_PRECISION); TileSaver tiler; Boolean isRecording = false; Boolean isTiling = false; ArcBar[] arcBars; public void setup() { size( 600, 600, OPENGL ); colorMode( RGB, 1.0f ); frameRate( 25 ); initLookUpTables(); initOpenGL(); initTileSaver(); initArcBars(); } //////////////////////////////////////////// // HANDLERS. //////////////////////////////////////////// public void keyPressed() { if( key == 'l' ) { lightingEnabled = !lightingEnabled; } if( key == 'r' ) { isRecording = !isRecording; if(isRecording) println("started recording."); else println("stopped recording."); } if( key == 't' ) { isTiling = !isTiling; tiler.init("Simple"+nf(frameCount,16),16); } } //////////////////////////////////////////// // INIT. //////////////////////////////////////////// private void initLookUpTables () { sinLUT = new float[SINCOS_LENGTH]; cosLUT = new float[SINCOS_LENGTH]; for (int i = 0; i < SINCOS_LENGTH; i++) { sinLUT[i]= (float)Math.sin( i * DEG_TO_RAD * SINCOS_PRECISION ); cosLUT[i]= (float)Math.cos( i * DEG_TO_RAD * SINCOS_PRECISION ); } } private void initOpenGL () { pgl = (PGraphicsOpenGL) g; gl = pgl.gl; gl.setSwapInterval( 1 ); gl.glShadeModel( GL.GL_SMOOTH ); // Enable Smooth Shading gl.glClearColor( 0.0f, 0.0f, 0.0f, 0.5f ); // Black Background gl.glClearDepth( 1.0f ); // Depth Buffer Setup gl.glEnable( GL.GL_DEPTH_TEST ); // Enables Depth Testing gl.glDepthFunc( GL.GL_LEQUAL ); // The Type Of Depth Testing To Do gl.glHint( GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST ); // Really Nice Perspective Calculations gl.glDisable( GL.GL_TEXTURE_2D ); // Set up lighting gl.glLightfv( GL.GL_LIGHT1, GL.GL_AMBIENT, lightAmbient, 0 ); gl.glLightfv( GL.GL_LIGHT1, GL.GL_DIFFUSE, lightDiffuse, 0 ); // gl.glLightfv( GL.GL_LIGHT1, GL.GL_SPECULAR, lightSpecular, 0 ); gl.glLightfv( GL.GL_LIGHT1, GL.GL_POSITION, lightPosition, 0 ); gl.glEnable( GL.GL_LIGHTING ); gl.glEnable( GL.GL_LIGHT1 ); } private void initTileSaver () { tiler = new TileSaver( this ); } private void initArcBars () { int arcsTotal = 100; float arcLocZ = -600; float arcLocZInc = 12; float arcHeight = 10; float arcAngleMin = 10; float arcAngleMax = 270; float arcRadiusMin = 50; float arcRadiusMax = 400; float arcWidthMin = 50; float arcWidthMax = 100; ArcBar arcBar; int i; arcBars = new ArcBar[ arcsTotal ]; for( i=0; i