Skip to content

Commit a0fcdb0

Browse files
committed
add eye transformation
1 parent d580532 commit a0fcdb0

File tree

1 file changed

+62
-7
lines changed

1 file changed

+62
-7
lines changed

libraries/vr/src/processing/vr/PGraphicsVR.java

Lines changed: 62 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,46 @@ public class PGraphicsVR extends PGraphics3D {
4040
public HeadTransform headTransform;
4141
public Eye eye;
4242
public int eyeType;
43-
public float forwardX;
44-
public float forwardY;
45-
public float forwardZ;
43+
public float forwardX, forwardY, forwardZ;
44+
public float rightX, rightY, rightZ;
45+
public float upX, upY, upZ;
4646

4747
private float[] forwardVector;
48+
private float[] rightVector;
49+
private float[] upVector;
4850
private Viewport eyeViewport;
4951
private float[] eyeView;
5052
private float[] eyePerspective;
51-
53+
private PMatrix3D eyeMatrix;
5254

5355
@Override
5456
protected PGL createPGL(PGraphicsOpenGL pg) {
5557
return new PGLES(pg);
5658
}
5759

5860

61+
public PMatrix3D getEyeMatrix() {
62+
PMatrix3D mat = new PMatrix3D();
63+
mat.set(rightX, upX, forwardX, 0,
64+
rightY, upY, forwardY, 0,
65+
rightZ, upZ, forwardZ, 0,
66+
0, 0, 0, 1);
67+
return mat;
68+
}
69+
70+
71+
public PMatrix3D getEyeMatrix(PMatrix3D target) {
72+
if (target == null) {
73+
target = new PMatrix3D();
74+
}
75+
target.set(rightX, upX, forwardX, 0,
76+
rightY, upY, forwardY, 0,
77+
rightZ, upZ, forwardZ, 0,
78+
0, 0, 0, 1);
79+
return target;
80+
}
81+
82+
5983
public PMatrix3D getObjectMatrix() {
6084
PMatrix3D mat = new PMatrix3D();
6185
mat.set(modelviewInv);
@@ -74,6 +98,27 @@ public PMatrix3D getObjectMatrix(PMatrix3D target) {
7498
}
7599

76100

101+
public void setEyeTransform() {
102+
eyeMatrix = getEyeMatrix(eyeMatrix);
103+
104+
// Erasing any previous transformation in modelview
105+
modelview.set(camera);
106+
modelview.translate(cameraX, cameraY, cameraZ);
107+
modelview.apply(eyeMatrix);
108+
109+
// eyeMatrix is orthogonal, so taking the transpose inverts it.
110+
eyeMatrix.transpose();
111+
112+
// Applying the inverse of the previous transformations in the opposite order
113+
// to compute the modelview inverse
114+
modelviewInv.set(eyeMatrix);
115+
modelviewInv.translate(-cameraX, -cameraY, -cameraZ);
116+
modelviewInv.preApply(cameraInv);
117+
118+
updateProjmodelview();
119+
}
120+
121+
77122
@Override
78123
public void beginDraw() {
79124
super.beginDraw();
@@ -200,9 +245,17 @@ protected void headTransform(HeadTransform ht) {
200245
initVR();
201246
headTransform = ht;
202247
headTransform.getForwardVector(forwardVector, 0);
203-
forwardX = forwardVector[0];
204-
forwardY = forwardVector[1];
205-
forwardZ = forwardVector[2];
248+
headTransform.getRightVector(rightVector, 0);
249+
headTransform.getUpVector(upVector, 0);
250+
forwardX = forwardVector[0];
251+
forwardY = forwardVector[1];
252+
forwardZ = forwardVector[2];
253+
rightX = rightVector[0];
254+
rightY = rightVector[1];
255+
rightZ = rightVector[2];
256+
upX = upVector[0];
257+
upY = upVector[1];
258+
upZ = upVector[2];
206259
}
207260

208261

@@ -218,6 +271,8 @@ protected void eyeTransform(Eye e) {
218271
protected void initVR() {
219272
if (!initialized) {
220273
forwardVector = new float[3];
274+
rightVector = new float[3];
275+
upVector = new float[3];
221276
initialized = true;
222277
}
223278
}

0 commit comments

Comments
 (0)