JOGL v2.6.0-rc-20250706
JOGL, High-Performance Graphics Binding for Java™ (public API).
TestPMVMatrix03NOUI.java
Go to the documentation of this file.
1package com.jogamp.opengl.test.junit.math;
2
3import java.util.Arrays;
4
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;
11
12import jogamp.opengl.ProjectFloat;
13
14import com.jogamp.opengl.util.PMVMatrix;
15
16import org.junit.Assert;
17import org.junit.Test;
18import org.junit.FixMethodOrder;
19import org.junit.runners.MethodSorters;
20
21@FixMethodOrder(MethodSorters.NAME_ASCENDING)
22public class TestPMVMatrix03NOUI extends JunitTracer {
23
24 static final float epsilon = 0.00001f;
25
26 // Simple 10 x 10 view port
27 static final Recti viewport = new Recti( 0,0,10,10 );
28 static final int[] viewport_i4 = new int[] { 0, 0, 10, 10 };
29
30 @Test
31 public void test01() {
32 final Vec3f winA00 = new Vec3f();
33 final Vec3f winA01 = new Vec3f();
34 final Vec3f winA10 = new Vec3f();
35 final Vec3f winA11 = new Vec3f();
36 final Vec3f winB00 = new Vec3f();
37 final Vec3f winB01 = new Vec3f();
38 final Vec3f winB10 = new Vec3f();
39 final Vec3f winB11 = new Vec3f();
40
41 final PMVMatrix m = new PMVMatrix();
42 final Matrix4f mat4PMv = new Matrix4f();
43 m.getMulPMv(mat4PMv);
44 System.err.println(mat4PMv.toString(null, "mat4PMv", "%10.5f"));
45
46 m.mapObjToWin(new Vec3f(1f, 0f, 0f), viewport, winA00);
47 System.err.println("A.0.0 - Project 1,0 -->" + winA00);
48 Matrix4f.mapObjToWin(new Vec3f(1f, 0f, 0f), mat4PMv, viewport, winB00); // single PMv
49 System.err.println("B.0.0 - Project 1,0 -->" + winB00);
50
51 m.mapObjToWin(new Vec3f(0f, 0f, 0f), viewport, winA01);
52 System.err.println("A.0.1 - Project 0,0 -->" + winA01);
53 Matrix4f.mapObjToWin(new Vec3f(0f, 0f, 0f), mat4PMv, viewport, winB01); // single PMv
54 System.err.println("B.0.1 - Project 0,0 -->" + winB01);
55
57 m.glOrthof(0, 10, 0, 10, 1, -1);
58 System.err.println("MATRIX - Ortho 0,0,10,10 - Locate the origin in the bottom left and scale");
59 System.err.println(m);
60 m.getMulPMv(mat4PMv);
61 System.err.println(mat4PMv.toString(null, "mat4PMv", "%10.5f"));
62
63 m.mapObjToWin(new Vec3f(1f, 0f, 0f), viewport, winA10);
64 System.err.println("A.1.0 - Project 1,0 -->" +winA10);
65 Matrix4f.mapObjToWin(new Vec3f(1f, 0f, 0f), mat4PMv, viewport, winB10); // single PMv
66 System.err.println("B.1.0 - Project 1,0 -->" +winB10);
67
68 m.mapObjToWin(new Vec3f(0f, 0f, 0f), viewport, winA11);
69 System.err.println("A.1.1 - Project 0,0 -->" +winA11);
70 Matrix4f.mapObjToWin(new Vec3f(0f, 0f, 0f), mat4PMv, viewport, winB11); // single PMv
71 System.err.println("B.1.1 - Project 0,0 -->" +winB11);
72
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);
77
78 ////////////////////
79 /////////////////////
80
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];
87 FloatUtil.makeIdentity(projMatrixC);
88 FloatUtil.makeIdentity(modelMatrixC);
89 final ProjectFloat projectFloat = new ProjectFloat();
90
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));
93
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));
96
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");
100 System.err.println(FloatUtil.matrixToString(null, null, "%10.5f", projMatrixC, 0, 4, 4, false /* rowMajorOrder */));
101 System.err.println("Modelview");
102 System.err.println(FloatUtil.matrixToString(null, null, "%10.5f", modelMatrixC, 0, 4, 4, false /* rowMajorOrder */));
103
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));
106
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));
109
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);
114
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);
123 }
124
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) {
126 // Ortho matrix:
127 // 2/dx 0 0 tx
128 // 0 2/dy 0 ty
129 // 0 0 2/dz tz
130 // 0 0 0 1
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;
137
138 final float[] matrixOrtho = new float[16];
139 FloatUtil.makeIdentity(matrixOrtho);
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;
146
147 FloatUtil.multMatrix(m, 0, matrixOrtho, 0);
148 }
149
150 public static void main(final String args[]) {
151 org.junit.runner.JUnitCore.main(TestPMVMatrix03NOUI.class.getName());
152 }
153}
Basic Float math utility functions.
Definition: FloatUtil.java:83
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].
Definition: FloatUtil.java:785
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.
Definition: FloatUtil.java:96
Basic 4x4 float matrix implementation using fields for intensive use-cases (host operations).
Definition: Matrix4f.java:89
static boolean mapObjToWin(final Vec3f obj, final Matrix4f mMv, final Matrix4f mP, final Recti viewport, final Vec3f winPos)
Map object coordinates to window coordinates.
Definition: Matrix4f.java:1696
StringBuilder toString(final StringBuilder sb, final String rowPrefix, final String f)
Definition: Matrix4f.java:2085
Rectangle with x, y, width and height integer components.
Definition: Recti.java:34
3D Vector based upon three float components.
Definition: Vec3f.java:37
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)
PMVMatrix implements a subset of the fixed function pipeline GLMatrixFunc using PMVMatrix4f.
Definition: PMVMatrix.java:62
final void glMatrixMode(final int matrixName)
Sets the current matrix mode.
Definition: PMVMatrix.java:218
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.
Definition: PMVMatrix.java:469
Subset of OpenGL fixed function pipeline's matrix operations.
static final int GL_PROJECTION
Matrix mode projection.