Mercurial > hg > jslab
view src/samer/j3d/PatchArrayAlpha.java @ 0:bf79fb79ee13
Initial Mercurial check in.
author | samer |
---|---|
date | Tue, 17 Jan 2012 17:50:20 +0000 |
parents | |
children |
line wrap: on
line source
package samer.j3d; import samer.core.types.*; import samer.maths.*; import java.util.*; import javax.media.j3d.*; import javax.vecmath.*; public class PatchArrayAlpha extends QuadArray implements Observer { int N; // number of patches Matrix P; // positions and sizes of patches VVector A; // scalar activations VDouble K; // scaling factor for activations VDouble L; // scaling factor for sizes Color4f carray[]; // array for holding colours public PatchArrayAlpha(Matrix points, VVector activities) { super(4*points.getRowDimension(), COORDINATES | COLOR_4); N=points.getRowDimension(); P=points; A=activities; K=new VDouble("scale",1); L=new VDouble("patch.size",1); carray=new Color4f[4*N]; for (int i=0; i<4*N; i+=4) carray[i+3]= carray[i+2]= carray[i+1]= carray[i]=new Color4f(1f,1f,1f,1f); // set capabilities for subsequent updates setCapability(ALLOW_COORDINATE_WRITE); setCapability(ALLOW_COLOR_WRITE); updatePoints(); updateActivities(); A.addObserver(this); L.addObserver(new Observer () { public void update(Observable o, Object a) { updatePoints(); } }); } public void update(Observable o, Object a) { updateActivities(); } private double quad[] = new double[12]; public void updatePoints() { // load points into point array double [][] PA=P.getArray(); double [] row; double l=L.value; int j=0; for (int i=0; i<N; i++) { row=PA[i]; double x1=row[0]-l*row[1]; double x2=row[0]+l*row[1]; double y1=row[3]-l*row[4]; double y2=row[3]+l*row[4]; quad[0] = x1; quad[1] = y1; quad[2] = 0; quad[3] = x1; quad[4] = y2; quad[5] = 0; quad[6] = x2; quad[7] = y2; quad[8] = 0; quad[9] = x2; quad[10]= y1; quad[11]= 0; // set 4 vertices of quad setCoordinates(j,quad,0,4); j+=4; // choose color according to energy? // carray[i].set(Color.getHSBColor((float)(row[3]*0.3)+0.16f,1f,1f)); } } public void updateActivities() { // load colours double [] a=A.array(); double k=K.value; int j=0; for (int i=0; i<N; i++) { float ai=(float)(a[i]*k); carray[j].w = ai; j+=4; } setColors(0,carray); } }