Skip to content

Commit

Permalink
Frustum: Passing Mv*P (column major order)
Browse files Browse the repository at this point in the history
  • Loading branch information
sgothel committed Nov 11, 2012
1 parent f67d310 commit 2634524
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 34 deletions.
58 changes: 29 additions & 29 deletions src/jogl/classes/com/jogamp/opengl/math/geom/Frustum.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ public Frustum() {

/**
* Creates a defined instance w/ calculating the frustum
* using the passed float[16] as premultiplied P*MV.
* using the passed float[16] as premultiplied MV*P (column major order)
*/
public Frustum(float[] pmv, int pmv_off) {
public Frustum(float[] mvp, int pmv_off) {
for (int i = 0; i < 6; ++i) {
planes[i] = new Plane();
}
update(pmv, pmv_off);
update(mvp, pmv_off);
}

public static class Plane {
Expand Down Expand Up @@ -81,68 +81,68 @@ public String toString() {

/**
* Re-calculate the frustum
* using the passed float[16] as premultiplied P*MV.
* using the passed float[16] as premultiplied MV*P (column major order).
*/
public void update(float[] pmv, int pmv_off) {
public void update(float[] mvp, int mvp_off) {
// Left: [30+00, 31+01, 32+02, 33+03]
// comboMatrix.m[12] + comboMatrix.m[0];
{
final Plane p = planes[0];
final float[] p_n = p.n;
p_n[0] = pmv[ pmv_off + 12 ] + pmv[ pmv_off + 0 ];
p_n[1] = pmv[ pmv_off + 13 ] + pmv[ pmv_off + 1 ];
p_n[2] = pmv[ pmv_off + 14 ] + pmv[ pmv_off + 2 ];
p.d = pmv[ pmv_off + 15 ] + pmv[ pmv_off + 3 ];
p_n[0] = mvp[ mvp_off + 12 ] + mvp[ mvp_off + 0 ];
p_n[1] = mvp[ mvp_off + 13 ] + mvp[ mvp_off + 1 ];
p_n[2] = mvp[ mvp_off + 14 ] + mvp[ mvp_off + 2 ];
p.d = mvp[ mvp_off + 15 ] + mvp[ mvp_off + 3 ];
}

// Right: [30-00, 31-01, 32-02, 33-03]
{
final Plane p = planes[1];
final float[] p_n = p.n;
p_n[0] = pmv[ pmv_off + 12 ] - pmv[ pmv_off + 0 ];
p_n[1] = pmv[ pmv_off + 13 ] - pmv[ pmv_off + 1 ];
p_n[2] = pmv[ pmv_off + 14 ] - pmv[ pmv_off + 2 ];
p.d = pmv[ pmv_off + 15 ] - pmv[ pmv_off + 3 ];
p_n[0] = mvp[ mvp_off + 12 ] - mvp[ mvp_off + 0 ];
p_n[1] = mvp[ mvp_off + 13 ] - mvp[ mvp_off + 1 ];
p_n[2] = mvp[ mvp_off + 14 ] - mvp[ mvp_off + 2 ];
p.d = mvp[ mvp_off + 15 ] - mvp[ mvp_off + 3 ];
}

// Bottom: [30+10, 31+11, 32+12, 33+13]
{
final Plane p = planes[2];
final float[] p_n = p.n;
p_n[0] = pmv[ pmv_off + 12 ] + pmv[ pmv_off + 4 ];
p_n[1] = pmv[ pmv_off + 13 ] + pmv[ pmv_off + 5 ];
p_n[2] = pmv[ pmv_off + 14 ] + pmv[ pmv_off + 6 ];
p.d = pmv[ pmv_off + 15 ] + pmv[ pmv_off + 7 ];
p_n[0] = mvp[ mvp_off + 12 ] + mvp[ mvp_off + 4 ];
p_n[1] = mvp[ mvp_off + 13 ] + mvp[ mvp_off + 5 ];
p_n[2] = mvp[ mvp_off + 14 ] + mvp[ mvp_off + 6 ];
p.d = mvp[ mvp_off + 15 ] + mvp[ mvp_off + 7 ];
}

// Top: [30-10, 31-11, 32-12, 33-13]
{
final Plane p = planes[3];
final float[] p_n = p.n;
p_n[0] = pmv[ pmv_off + 12 ] - pmv[ pmv_off + 4 ];
p_n[1] = pmv[ pmv_off + 13 ] - pmv[ pmv_off + 5 ];
p_n[2] = pmv[ pmv_off + 14 ] - pmv[ pmv_off + 6 ];
p.d = pmv[ pmv_off + 15 ] - pmv[ pmv_off + 7 ];
p_n[0] = mvp[ mvp_off + 12 ] - mvp[ mvp_off + 4 ];
p_n[1] = mvp[ mvp_off + 13 ] - mvp[ mvp_off + 5 ];
p_n[2] = mvp[ mvp_off + 14 ] - mvp[ mvp_off + 6 ];
p.d = mvp[ mvp_off + 15 ] - mvp[ mvp_off + 7 ];
}

// Near: [30+20, 31+21, 32+22, 33+23]
{
final Plane p = planes[4];
final float[] p_n = p.n;
p_n[0] = pmv[ pmv_off + 12 ] + pmv[ pmv_off + 8 ];
p_n[1] = pmv[ pmv_off + 13 ] + pmv[ pmv_off + 9 ];
p_n[2] = pmv[ pmv_off + 14 ] + pmv[ pmv_off + 10 ];
p.d = pmv[ pmv_off + 15 ] + pmv[ pmv_off + 11 ];
p_n[0] = mvp[ mvp_off + 12 ] + mvp[ mvp_off + 8 ];
p_n[1] = mvp[ mvp_off + 13 ] + mvp[ mvp_off + 9 ];
p_n[2] = mvp[ mvp_off + 14 ] + mvp[ mvp_off + 10 ];
p.d = mvp[ mvp_off + 15 ] + mvp[ mvp_off + 11 ];
}

// Far: [30-20, 31-21, 32-22, 33-23]
{
final Plane p = planes[5];
final float[] p_n = p.n;
p_n[0] = pmv[ pmv_off + 12 ] - pmv[ pmv_off + 8 ];
p_n[1] = pmv[ pmv_off + 13 ] - pmv[ pmv_off + 9 ];
p_n[2] = pmv[ pmv_off + 14 ] - pmv[ pmv_off + 10 ];
p.d = pmv[ pmv_off + 15 ] - pmv[ pmv_off + 11 ];
p_n[0] = mvp[ mvp_off + 12 ] - mvp[ mvp_off + 8 ];
p_n[1] = mvp[ mvp_off + 13 ] - mvp[ mvp_off + 9 ];
p_n[2] = mvp[ mvp_off + 14 ] - mvp[ mvp_off + 10 ];
p.d = mvp[ mvp_off + 15 ] - mvp[ mvp_off + 11 ];
}

for (int i = 0; i < 6; ++i) {
Expand Down
10 changes: 5 additions & 5 deletions src/jogl/classes/com/jogamp/opengl/util/PMVMatrix.java
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ public PMVMatrix(boolean useBackingArray) {
requestMask = 0;
matrixMode = GL_MODELVIEW;

mulPMV = null;
mulMVP = null;
frustum = null;
}

Expand Down Expand Up @@ -1040,10 +1040,10 @@ private final boolean updateImpl(boolean clearModBits) {
if( 0 != ( dirtyBits & ( DIRTY_FRUSTUM & requestMask ) ) ) {
if( null == frustum ) {
frustum = new Frustum();
mulPMV = new float[16];
mulMVP = new float[16];
}
FloatUtil.multMatrixf(matrixP, matrixMv, mulPMV, 0);
frustum.update(mulPMV, 0);
FloatUtil.multMatrixf(matrixMv, matrixP, mulMVP, 0);
frustum.update(mulMVP, 0);
dirtyBits &= ~DIRTY_FRUSTUM;
mod = true;
}
Expand Down Expand Up @@ -1128,6 +1128,6 @@ private final boolean setMviMvitNIODirectAccess() {
protected int dirtyBits = DIRTY_ALL; // contains the dirty bits, i.e. hinting for update operation
protected int requestMask = 0; // may contain the requested dirty bits: DIRTY_INVERSE_MODELVIEW | DIRTY_INVERSE_TRANSPOSED_MODELVIEW
protected ProjectFloat projectFloat;
protected float[] mulPMV; // premultiplied PMV
protected float[] mulMVP; // premultiplied PMV
protected Frustum frustum;
}

0 comments on commit 2634524

Please sign in to comment.