@@ -80,10 +80,10 @@ public void registerUpdate(String methodName) {
80
80
81
81
public PMatrix3D getEyeMatrix () {
82
82
PMatrix3D mat = new PMatrix3D ();
83
- mat .set (rightX , upX , forwardX , 0 ,
84
- rightY , upY , forwardY , 0 ,
85
- rightZ , upZ , forwardZ , 0 ,
86
- 0 , 0 , 0 , 1 );
83
+ mat .set (rightX , upX , forwardX , cameraX ,
84
+ rightY , upY , forwardY , cameraY ,
85
+ rightZ , upZ , forwardZ , cameraZ ,
86
+ 0 , 0 , 0 , 1 );
87
87
return mat ;
88
88
}
89
89
@@ -92,10 +92,10 @@ public PMatrix3D getEyeMatrix(PMatrix3D target) {
92
92
if (target == null ) {
93
93
target = new PMatrix3D ();
94
94
}
95
- target .set (rightX , upX , forwardX , 0 ,
96
- rightY , upY , forwardY , 0 ,
97
- rightZ , upZ , forwardZ , 0 ,
98
- 0 , 0 , 0 , 1 );
95
+ target .set (rightX , upX , forwardX , cameraX ,
96
+ rightY , upY , forwardY , cameraY ,
97
+ rightZ , upZ , forwardZ , cameraZ ,
98
+ 0 , 0 , 0 , 1 );
99
99
return target ;
100
100
}
101
101
@@ -123,16 +123,22 @@ public void eye() {
123
123
124
124
// Erasing any previous transformation in modelview
125
125
modelview .set (camera );
126
- modelview .translate (cameraX , cameraY , cameraZ );
127
126
modelview .apply (eyeMatrix );
128
127
129
- // eyeMatrix is orthogonal, so taking the transpose inverts it.
128
+ // The 3x3 block of eyeMatrix is orthogonal, so taking the transpose
129
+ // inverts it...
130
130
eyeMatrix .transpose ();
131
+ // ...and then invert the translation separately:
132
+ eyeMatrix .m03 = -cameraX ;
133
+ eyeMatrix .m13 = -cameraY ;
134
+ eyeMatrix .m23 = -cameraZ ;
135
+ eyeMatrix .m30 = 0 ;
136
+ eyeMatrix .m31 = 0 ;
137
+ eyeMatrix .m32 = 0 ;
131
138
132
139
// Applying the inverse of the previous transformations in the opposite order
133
140
// to compute the modelview inverse
134
141
modelviewInv .set (eyeMatrix );
135
- modelviewInv .translate (-cameraX , -cameraY , -cameraZ );
136
142
modelviewInv .preApply (cameraInv );
137
143
138
144
updateProjmodelview ();
0 commit comments