From 68eb9f1ea136428b64fe9246865fbabb8c82f6ac Mon Sep 17 00:00:00 2001
From: Sven Gothel
* Implementation assumes linear matrix layout in column-major order
- * matching OpenGL's implementation.
+ * matching OpenGL's implementation, translation matrix example:
+ *
+ Row-Major Order:
+ 1 0 0 x
+ 0 1 0 y
+ 0 0 1 z
+ 0 0 0 1
+ *
+ *
+ Column-Major Order:
+ 1 0 0 0
+ 0 1 0 0
+ 0 0 1 0
+ x y z 1
+ *
*
* Derived from ProjectFloat.java - Created 11-jan-2004 *
* - * @author Erik Duijs - * @author Kenneth Russell - * @author Sven Gothel + * @author Erik Duijs, Kenneth Russell, et al. */ public class FloatUtil { + public static final boolean DEBUG = Debug.debug("Math"); + private static final float[] IDENTITY_MATRIX = new float[] { 1.0f, 0.0f, 0.0f, 0.0f, @@ -558,7 +574,7 @@ public class FloatUtil { public static final float PI = 3.14159265358979323846f; - public static float abs(float a) { return (float) java.lang.Math.abs(a); } + public static float abs(float a) { return java.lang.Math.abs(a); } public static float pow(float a, float b) { return (float) java.lang.Math.pow(a, b); } diff --git a/src/jogl/classes/com/jogamp/opengl/math/geom/AABBox.java b/src/jogl/classes/com/jogamp/opengl/math/geom/AABBox.java index d0566b54e..c28b36f82 100644 --- a/src/jogl/classes/com/jogamp/opengl/math/geom/AABBox.java +++ b/src/jogl/classes/com/jogamp/opengl/math/geom/AABBox.java @@ -27,6 +27,7 @@ */ package com.jogamp.opengl.math.geom; +import com.jogamp.opengl.math.FloatUtil; import com.jogamp.opengl.math.VectorUtil; import com.jogamp.opengl.util.PMVMatrix; @@ -38,6 +39,7 @@ import com.jogamp.opengl.util.PMVMatrix; * */ public class AABBox implements Cloneable { + private static final boolean DEBUG = FloatUtil.DEBUG; private final float[] low = new float[3]; private final float[] high = new float[3]; private final float[] center = new float[3]; @@ -168,20 +170,26 @@ public class AABBox implements Cloneable { */ public final void resize(float x, float y, float z) { /** test low */ - if (x < low[0]) + if (x < low[0]) { low[0] = x; - if (y < low[1]) + } + if (y < low[1]) { low[1] = y; - if (z < low[2]) + } + if (z < low[2]) { low[2] = z; + } /** test high */ - if (x > high[0]) + if (x > high[0]) { high[0] = x; - if (y > high[1]) + } + if (y > high[1]) { high[1] = y; - if (z > high[2]) + } + if (z > high[2]) { high[2] = z; + } computeCenter(); } @@ -359,7 +367,7 @@ public class AABBox implements Cloneable { * only 4 {@link PMVMatrix#gluProject(float, float, float, int[], int, float[], int) gluProject} * operations are made on points [1..4] using {@link #getCenter()}'s z-value. * Otherwise 8 {@link PMVMatrix#gluProject(float, float, float, int[], int, float[], int) gluProject} - * operation on all 8 points are made. + * operation on all 8 points are performed. * ** [2] ------ [4] @@ -374,15 +382,21 @@ public class AABBox implements Cloneable { * @return */ public AABBox mapToWindow(final AABBox result, final PMVMatrix pmv, final int[] view, final boolean useCenterZ, float[] tmpV3) { + // System.err.printf("AABBox.mapToWindow.0: view[%d, %d, %d, %d], this %s%n", view[0], view[1], view[2], view[3], toString()); float objZ = useCenterZ ? center[2] : getMinZ(); pmv.gluProject(getMinX(), getMinY(), objZ, view, 0, tmpV3, 0); + // System.err.printf("AABBox.mapToWindow.p1: %f, %f, %f -> %f, %f, %f%n", getMinX(), getMinY(), objZ, tmpV3[0], tmpV3[1], tmpV3[2]); + // System.err.printf("AABBox.mapToWindow.p1: %s%n", pmv.toString()); result.reset(); result.resize(tmpV3, 0); pmv.gluProject(getMinX(), getMaxY(), objZ, view, 0, tmpV3, 0); + // System.err.printf("AABBox.mapToWindow.p2: %f, %f, %f -> %f, %f, %f%n", getMinX(), getMaxY(), objZ, tmpV3[0], tmpV3[1], tmpV3[2]); result.resize(tmpV3, 0); pmv.gluProject(getMaxX(), getMinY(), objZ, view, 0, tmpV3, 0); + // System.err.printf("AABBox.mapToWindow.p3: %f, %f, %f -> %f, %f, %f%n", getMaxX(), getMinY(), objZ, tmpV3[0], tmpV3[1], tmpV3[2]); result.resize(tmpV3, 0); pmv.gluProject(getMaxX(), getMaxY(), objZ, view, 0, tmpV3, 0); + // System.err.printf("AABBox.mapToWindow.p4: %f, %f, %f -> %f, %f, %f%n", getMaxX(), getMaxY(), objZ, tmpV3[0], tmpV3[1], tmpV3[2]); result.resize(tmpV3, 0); if( !useCenterZ ) { objZ = getMaxZ(); @@ -395,6 +409,9 @@ public class AABBox implements Cloneable { pmv.gluProject(getMaxX(), getMaxY(), objZ, view, 0, tmpV3, 0); result.resize(tmpV3, 0); } + if( DEBUG ) { + System.err.printf("AABBox.mapToWindow: view[%d, %d], this %s -> %s%n", view[0], view[1], toString(), result.toString()); + } return result; } -- cgit v1.2.3