annotate src/samer/j3d/MatrixPointArrayRef.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 MatrixPointArrayRef extends PointArray implements Observer
samer@0 11 {
samer@0 12 int N; // number of points
samer@0 13 Matrix P; // 3d positions of points
samer@0 14 VVector A; // scalar activations
samer@0 15 VDouble K; // scaling factor for activations
samer@0 16
samer@0 17 GeometryUpdater updater;
samer@0 18
samer@0 19 float carray[]; // array for holding colours
samer@0 20 // Color3f carray[];
samer@0 21
samer@0 22 public MatrixPointArrayRef(Matrix points, VVector activities)
samer@0 23 {
samer@0 24 super(points.getRowDimension(), BY_REFERENCE | COORDINATES | COLOR_3);
samer@0 25
samer@0 26 N=points.getRowDimension();
samer@0 27 P=points;
samer@0 28 A=activities;
samer@0 29 K=new VDouble("scale",1);
samer@0 30
samer@0 31 carray=new float[3*N];
samer@0 32
samer@0 33 // set capabilities for subsequent updates
samer@0 34 setCapability(ALLOW_REF_DATA_WRITE);
samer@0 35
samer@0 36 {
samer@0 37 double [] a=A.array();
samer@0 38 for (int i=0; i<N; i++) a[i]=1;
samer@0 39 }
samer@0 40
samer@0 41 updater = new GeometryUpdater() {
samer@0 42 public void updateData(Geometry g)
samer@0 43 {
samer@0 44 // load colours
samer@0 45 double [] a=A.array();
samer@0 46 double k=K.value;
samer@0 47
samer@0 48 for (int i=0, j=0; i<N; i++,j+=3) {
samer@0 49 float ai=(float)(a[i]*k);
samer@0 50 carray[j]=ai;
samer@0 51 carray[j+1]=0.8f*ai;
samer@0 52 carray[j+2]=0.4f*ai;
samer@0 53 }
samer@0 54 }
samer@0 55 };
samer@0 56
samer@0 57 updater.updateData(this);
samer@0 58
samer@0 59 setColorRefFloat(carray);
samer@0 60 setCoordRefDouble(P.getRowPackedCopy());
samer@0 61
samer@0 62 A.addObserver(this);
samer@0 63 /*
samer@0 64 P.addObserver(new Observer () {
samer@0 65 public void update(Observable o, Object a) {
samer@0 66 updatePoints();
samer@0 67 }
samer@0 68 });
samer@0 69 */
samer@0 70 }
samer@0 71
samer@0 72
samer@0 73 public void update(Observable o, Object a) { updateData(updater); }
samer@0 74 }