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 }
|