summaryrefslogtreecommitdiffstats
path: root/src/demos/particles/engine/Particle.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/demos/particles/engine/Particle.java')
-rwxr-xr-xsrc/demos/particles/engine/Particle.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/demos/particles/engine/Particle.java b/src/demos/particles/engine/Particle.java
new file mode 100755
index 0000000..82e0756
--- /dev/null
+++ b/src/demos/particles/engine/Particle.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2006 Ben Chappell ([email protected]) All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * - Redistribution of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistribution in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * The names of Ben Chappell, Sun Microsystems, Inc. or the names of
+ * contributors may not be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * This software is provided "AS IS," without a warranty of any kind. ALL
+ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+ * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. BEN CHAPPELL,
+ * SUN MICROSYSTEMS, INC. ("SUN"), AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL BEN
+ * CHAPPELL, SUN, OR SUN'S LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT
+ * OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
+ * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
+ * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF BEN
+ * CHAPPELL OR SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * You acknowledge that this software is not designed or intended for use
+ * in the design, construction, operation or maintenance of any nuclear
+ * facility.
+ */
+
+package demos.particles.engine;
+
+import com.sun.opengl.util.texture.*;
+
+import javax.media.opengl.*;
+
+public class Particle {
+ private XYZ currentPos;
+ private RGBA rgba;
+
+ public Particle() {
+ currentPos = new XYZ((float)Math.random(),
+ (float)Math.random(),
+ -30.0f
+ );
+
+ rgba = rgba = new RGBA((float)Math.random(),
+ (float)Math.random(),
+ (float)Math.random(),
+ (float)Math.random());
+ }
+
+ public void draw(GL gl, Texture texture, RGBA tendToColor) {
+ adjust(tendToColor);
+ texture.bind();
+ gl.glColor4f(rgba.r,rgba.g,rgba.b,rgba.a);
+
+ gl.glBegin(GL.GL_QUADS);
+ gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(currentPos.x, currentPos.y-2, currentPos.z);
+ gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(currentPos.x+2, currentPos.y-2, currentPos.z);
+ gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(currentPos.x+2, currentPos.y, currentPos.z);
+ gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(currentPos.x, currentPos.y, currentPos.z);
+ gl.glEnd();
+ }
+
+ private void tendToColor(RGBA tendToColor) {
+ float red = 0.0f;
+ float blue = 0.0f;
+ float green = 0.0f;
+ float sign=1.0f;
+
+ if(Math.random()>=0.5)
+ sign=-1.0f;
+
+ // RED
+ if(tendToColor.r <= 1-tendToColor.r)
+ red = tendToColor.r;
+ else
+ red = 1-tendToColor.r;
+
+ red = (float)(Math.random()*red*sign+tendToColor.r);
+
+ // GREEN
+ if(tendToColor.g <= 1-tendToColor.g)
+ green = tendToColor.g;
+ else
+ green = 1-tendToColor.g;
+
+ green =(float)(Math.random()*green*sign+tendToColor.g);
+
+ // BLUE
+ if(tendToColor.b <= 1-tendToColor.b)
+ blue = tendToColor.b;
+ else
+ blue = 1-tendToColor.b;
+
+ blue = (float)(Math.random()*blue*sign+tendToColor.b);
+
+ rgba = new RGBA(red, green, blue, (float)Math.random());
+ }
+
+ private void tendToPos() {
+ XYZ xyz = new XYZ((float)Math.random()-0.5f,(float)Math.random()-0.5f,(float)Math.random()-0.5f);
+ currentPos.add(xyz);
+ }
+
+ private void adjust(RGBA tendToColor) {
+ tendToPos();
+
+ rgba.a-=Math.random()/100;
+ if(rgba.a<=0)
+ tendToColor(tendToColor);
+ }
+
+}