1package com.jogamp.opengl.test.junit.math;
3import java.util.Arrays;
5import com.jogamp.junit.util.JunitTracer;
6import com.jogamp.math.FloatUtil;
7import com.jogamp.math.Matrix4f;
8import com.jogamp.math.Recti;
9import com.jogamp.math.Vec3f;
10import com.jogamp.opengl.fixedfunc.GLMatrixFunc;
12import jogamp.opengl.ProjectFloat;
14import com.jogamp.opengl.util.PMVMatrix;
16import org.junit.Assert;
18import org.junit.FixMethodOrder;
19import org.junit.runners.MethodSorters;
21@FixMethodOrder(MethodSorters.NAME_ASCENDING)
24 static final float epsilon = 0.00001f;
27 static final Recti viewport =
new Recti( 0,0,10,10 );
28 static final int[] viewport_i4 =
new int[] { 0, 0, 10, 10 };
44 System.err.println(mat4PMv.
toString(
null,
"mat4PMv",
"%10.5f"));
47 System.err.println(
"A.0.0 - Project 1,0 -->" + winA00);
49 System.err.println(
"B.0.0 - Project 1,0 -->" + winB00);
52 System.err.println(
"A.0.1 - Project 0,0 -->" + winA01);
54 System.err.println(
"B.0.1 - Project 0,0 -->" + winB01);
58 System.err.println(
"MATRIX - Ortho 0,0,10,10 - Locate the origin in the bottom left and scale");
59 System.err.println(m);
61 System.err.println(mat4PMv.
toString(
null,
"mat4PMv",
"%10.5f"));
64 System.err.println(
"A.1.0 - Project 1,0 -->" +winA10);
66 System.err.println(
"B.1.0 - Project 1,0 -->" +winB10);
69 System.err.println(
"A.1.1 - Project 0,0 -->" +winA11);
71 System.err.println(
"B.1.1 - Project 0,0 -->" +winB11);
73 Assert.assertEquals(
"A/B 0.0 Project 1,0 failure", winB00, winA00);
74 Assert.assertEquals(
"A/B 0.1 Project 0,0 failure", winB01, winA01);
75 Assert.assertEquals(
"A/B 1.0 Project 1,0 failure", winB10, winA10);
76 Assert.assertEquals(
"A/B 1.1 Project 0,0 failure", winB11, winA11);
81 final float[] winC00 =
new float[4];
82 final float[] winC01 =
new float[4];
83 final float[] winC10 =
new float[4];
84 final float[] winC11 =
new float[4];
85 final float[] projMatrixC =
new float[16];
86 final float[] modelMatrixC =
new float[16];
89 final ProjectFloat projectFloat =
new ProjectFloat();
91 projectFloat.gluProject(1f, 0f, 0f, modelMatrixC, 0, projMatrixC, 0, viewport_i4, 0, winC00, 0);
92 System.err.println(
"C.0.0 - Project 1,0 -->" +Arrays.toString(winC00));
94 projectFloat.gluProject(0f, 0f, 0f, modelMatrixC, 0, projMatrixC, 0, viewport_i4, 0, winC01, 0);
95 System.err.println(
"C.0.1 - Project 0,0 -->" +Arrays.toString(winC01));
97 glOrthof(projMatrixC, 0, 10, 0, 10, 1, -1);
98 System.err.println(
"FloatUtil - Ortho 0,0,10,10 - Locate the origin in the bottom left and scale");
99 System.err.println(
"Projection");
101 System.err.println(
"Modelview");
104 projectFloat.gluProject(1f, 0f, 0f, modelMatrixC, 0, projMatrixC, 0, viewport_i4, 0, winC10, 0);
105 System.err.println(
"C.1.0 - Project 1,0 -->" +Arrays.toString(winC10));
107 projectFloat.gluProject(0f, 0f, 0f, modelMatrixC, 0, projMatrixC, 0, viewport_i4, 0, winC11, 0);
108 System.err.println(
"B.1.1 - Project 0,0 -->" +Arrays.toString(winC11));
110 Assert.assertEquals(
"A/C 0.0 Project 1,0 failure",
new Vec3f(winC00), winA00);
111 Assert.assertEquals(
"A/C 0.1 Project 0,0 failure",
new Vec3f(winC01), winA01);
112 Assert.assertEquals(
"A/C 1.0 Project 1,0 failure",
new Vec3f(winC10), winA10);
113 Assert.assertEquals(
"A/C 1.1 Project 0,0 failure",
new Vec3f(winC11), winA11);
115 Assert.assertEquals(
"A 0.0 Project 1,0 failure X", 10.0, winA00.x(), epsilon);
116 Assert.assertEquals(
"A 0.0 Project 1,0 failure Y", 5.0, winA00.y(), epsilon);
117 Assert.assertEquals(
"A.0.1 Project 0,0 failure X", 5.0, winA01.x(), epsilon);
118 Assert.assertEquals(
"A.0.1 Project 0,0 failure Y", 5.0, winA01.y(), epsilon);
119 Assert.assertEquals(
"A 1.0 Project 1,0 failure X", 1.0, winA10.x(), epsilon);
120 Assert.assertEquals(
"A 1.0 Project 1,0 failure Y", 0.0, winA10.y(), epsilon);
121 Assert.assertEquals(
"A.1.1 Project 0,0 failure X", 0.0, winA11.x(), epsilon);
122 Assert.assertEquals(
"A.1.1 Project 0,0 failure Y", 0.0, winA11.y(), epsilon);
125 public final void glOrthof(
final float[] m,
final float left,
final float right,
final float bottom,
final float top,
final float zNear,
final float zFar) {
131 final float dx=right-left;
132 final float dy=top-bottom;
133 final float dz=zFar-zNear;
134 final float tx=-1.0f*(right+left)/dx;
135 final float ty=-1.0f*(top+bottom)/dy;
136 final float tz=-1.0f*(zFar+zNear)/dz;
138 final float[] matrixOrtho =
new float[16];
140 matrixOrtho[0+4*0] = 2.0f/dx;
141 matrixOrtho[1+4*1] = 2.0f/dy;
142 matrixOrtho[2+4*2] = -2.0f/dz;
143 matrixOrtho[0+4*3] = tx;
144 matrixOrtho[1+4*3] = ty;
145 matrixOrtho[2+4*3] = tz;
150 public static void main(
final String args[]) {
Basic Float math utility functions.
static void multMatrix(final float[] a, final int a_off, final float[] b, final int b_off, final float[] d, final int d_off)
Multiply matrix: [d] = [a] x [b].
static StringBuilder matrixToString(StringBuilder sb, final String rowPrefix, final String f, final FloatBuffer a, final int aOffset, final int rows, final int columns, final boolean rowMajorOrder)
static float[] makeIdentity(final float[] m)
Make matrix an identity matrix.
Basic 4x4 float matrix implementation using fields for intensive use-cases (host operations).
static boolean mapObjToWin(final Vec3f obj, final Matrix4f mMv, final Matrix4f mP, final Recti viewport, final Vec3f winPos)
Map object coordinates to window coordinates.
StringBuilder toString(final StringBuilder sb, final String rowPrefix, final String f)
Rectangle with x, y, width and height integer components.
3D Vector based upon three float components.
final Matrix4f getMulPMv(final Matrix4f result)
Returns multiplication result of P and Mv matrix, i.e.
final boolean mapObjToWin(final Vec3f objPos, final Recti viewport, final Vec3f winPos)
Map object coordinates to window coordinates.
final void glOrthof(final float[] m, final float left, final float right, final float bottom, final float top, final float zNear, final float zFar)
static void main(final String args[])
PMVMatrix implements a subset of the fixed function pipeline GLMatrixFunc using PMVMatrix4f.
final void glMatrixMode(final int matrixName)
Sets the current matrix mode.
final void glOrthof(final float left, final float right, final float bottom, final float top, final float zNear, final float zFar)
Multiply the current matrix with the orthogonal matrix.
Subset of OpenGL fixed function pipeline's matrix operations.
static final int GL_PROJECTION
Matrix mode projection.