annotate src/samer/j3d/PatchesAlpha.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 package samer.j3d;
samer@0 2
samer@0 3 import samer.core.types.*;
samer@0 4 import samer.maths.*;
samer@0 5 import java.util.*;
samer@0 6 import javax.media.j3d.*;
samer@0 7 import javax.vecmath.*;
samer@0 8
samer@0 9
samer@0 10 public class PatchesAlpha extends QuadArray implements Observer
samer@0 11 {
samer@0 12 int N; // number of patches
samer@0 13 Matrix P; // positions and sizes of patches
samer@0 14 VVector A; // scalar activations
samer@0 15 VDouble K; // scaling factor for activations
samer@0 16 VDouble L; // scaling factor for sizes
samer@0 17
samer@0 18 Color4f carray[]; // array for holding colours
samer@0 19
samer@0 20 public PatchesAlpha(Matrix points, VVector activities)
samer@0 21 {
samer@0 22 super(4*points.getRowDimension(), COORDINATES | COLOR_4);
samer@0 23
samer@0 24 N=points.getRowDimension();
samer@0 25 P=points;
samer@0 26 A=activities;
samer@0 27 K=new VDouble("scale",1);
samer@0 28 L=new VDouble("patch.size",1);
samer@0 29
samer@0 30 carray=new Color4f[4*N];
samer@0 31 for (int i=0; i<4*N; i+=4)
samer@0 32 carray[i+3]=
samer@0 33 carray[i+2]=
samer@0 34 carray[i+1]=
samer@0 35 carray[i]=new Color4f(1f,1f,1f,1f);
samer@0 36
samer@0 37 // set capabilities for subsequent updates
samer@0 38 setCapability(ALLOW_COORDINATE_WRITE);
samer@0 39 setCapability(ALLOW_COLOR_WRITE);
samer@0 40
samer@0 41 updatePoints();
samer@0 42 updateActivities();
samer@0 43
samer@0 44 A.addObserver(this);
samer@0 45 L.addObserver(new Observer () {
samer@0 46 public void update(Observable o, Object a) {
samer@0 47 updatePoints();
samer@0 48 }
samer@0 49 });
samer@0 50 }
samer@0 51
samer@0 52
samer@0 53 public void update(Observable o, Object a)
samer@0 54 {
samer@0 55 updateActivities();
samer@0 56 }
samer@0 57
samer@0 58 private double quad[] = new double[12];
samer@0 59
samer@0 60 public void updatePoints()
samer@0 61 {
samer@0 62 // load points into point array
samer@0 63 double [][] PA=P.getArray();
samer@0 64 double [] row;
samer@0 65 double l=L.value;
samer@0 66 int j=0;
samer@0 67
samer@0 68 for (int i=0; i<N; i++) {
samer@0 69 row=PA[i];
samer@0 70 double x1=row[0]-l*row[1];
samer@0 71 double x2=row[0]+l*row[1];
samer@0 72 double y1=row[3]-l*row[4];
samer@0 73 double y2=row[3]+l*row[4];
samer@0 74
samer@0 75 quad[0] = x1; quad[1] = y1; quad[2] = 0;
samer@0 76 quad[3] = x1; quad[4] = y2; quad[5] = 0;
samer@0 77 quad[6] = x2; quad[7] = y2; quad[8] = 0;
samer@0 78 quad[9] = x2; quad[10]= y1; quad[11]= 0;
samer@0 79
samer@0 80 // set 4 vertices of quad
samer@0 81 setCoordinates(j,quad,0,4); j+=4;
samer@0 82
samer@0 83 // choose color according to energy?
samer@0 84 // carray[i].set(Color.getHSBColor((float)(row[3]*0.3)+0.16f,1f,1f));
samer@0 85 }
samer@0 86 }
samer@0 87
samer@0 88 public void updateActivities()
samer@0 89 {
samer@0 90 // load colours
samer@0 91 double [] a=A.array();
samer@0 92 double k=K.value;
samer@0 93 int j=0;
samer@0 94
samer@0 95 for (int i=0; i<N; i++) {
samer@0 96 float ai=(float)(a[i]*k);
samer@0 97 carray[j].w = ai; j+=4;
samer@0 98 }
samer@0 99 setColors(0,carray);
samer@0 100 }
samer@0 101 }
samer@0 102