public class PMVMatrix extends Object implements GLMatrixFunc
GLMatrixFunc
.
Further more, PMVMatrix provides the inverse modelview matrix (Mvi)
and
inverse transposed modelview matrix (Mvit)
.
Frustum
is also provided by glGetFrustum()
.
To keep these derived values synchronized after mutable Mv operations like glRotatef(..)
in glMatrixMode
(GL_MODELVIEW
),
users have to call update()
before using Mvi and Mvit.
All matrices are provided in column-major order, as specified in the OpenGL fixed function pipeline, i.e. compatibility profile.
PMVMatrix can supplement GL2ES2
applications w/ the
lack of the described matrix functionality.
All matrices use a common FloatBuffer storage
and are a sliced
representation of it.
The common FloatBuffer and hence all matrices may use NIO direct storage or a backing float array
,
depending how the instance if being constructed
.
Note:
Modifier and Type | Field and Description |
---|---|
static int |
DIRTY_ALL
Bit value stating all is dirty
|
static int |
DIRTY_FRUSTUM
Bit value stating a dirty
frustum . |
static int |
DIRTY_INVERSE_MODELVIEW
Bit value stating a dirty
inverse modelview matrix (Mvi) . |
static int |
DIRTY_INVERSE_TRANSPOSED_MODELVIEW
Bit value stating a dirty
inverse transposed modelview matrix (Mvit) . |
static int |
MODIFIED_ALL
Bit value stating all is modified
|
static int |
MODIFIED_MODELVIEW
Bit value stating a modified
modelview matrix (Mv) , since last update() call. |
static int |
MODIFIED_PROJECTION
Bit value stating a modified
projection matrix (P) , since last update() call. |
static int |
MODIFIED_TEXTURE
Bit value stating a modified
texture matrix (T) , since last update() call. |
GL_MATRIX_MODE, GL_MODELVIEW, GL_MODELVIEW_MATRIX, GL_PROJECTION, GL_PROJECTION_MATRIX, GL_TEXTURE_MATRIX
Constructor and Description |
---|
PMVMatrix()
Creates an instance of PMVMatrix
PMVMatrix(boolean useBackingArray) ,
with useBackingArray = true . |
PMVMatrix(boolean useBackingArray)
Creates an instance of PMVMatrix.
|
Modifier and Type | Method and Description |
---|---|
void |
clearAllUpdateRequests()
Clears all
update() requests of the Mvi and Mvit matrix and Frustum
after it has been enabled by one of the Mvi get , Mvit get
or Frustum get methods. |
void |
destroy() |
int |
getDirtyBits()
Deprecated.
Function is exposed for debugging purposes only.
|
int |
getModifiedBits(boolean clear)
Returns the modified bits due to mutable operations..
|
int |
getRequestMask()
Deprecated.
Function is exposed for debugging purposes only.
|
void |
glFrustumf(float left,
float right,
float bottom,
float top,
float zNear,
float zFar)
Multiply the current matrix with the frustum matrix. |
void |
glGetFloatv(int matrixGetName,
float[] params,
int params_offset)
Copy the named matrix to the given storage at offset.
|
void |
glGetFloatv(int matrixGetName,
FloatBuffer params)
Copy the named matrix into the given storage.
|
Frustum |
glGetFrustum()
Returns the frustum, derived from projection * modelview
|
void |
glGetIntegerv(int pname,
int[] params,
int params_offset) |
void |
glGetIntegerv(int pname,
IntBuffer params)
glGetIntegerv
|
FloatBuffer |
glGetMatrixf() |
FloatBuffer |
glGetMatrixf(int matrixName) |
int |
glGetMatrixMode()
|
FloatBuffer |
glGetMviMatrixf()
Returns the inverse
modelview matrix (Mvi). |
FloatBuffer |
glGetMvitMatrixf()
Returns the inverse transposed
modelview matrix (Mvit). |
FloatBuffer |
glGetMvMatrixf()
Returns the
modelview matrix (Mv). |
FloatBuffer |
glGetPMatrixf()
Returns the
projection matrix (P). |
FloatBuffer |
glGetPMvMatrixf()
|
FloatBuffer |
glGetPMvMviMatrixf()
|
FloatBuffer |
glGetPMvMvitMatrixf()
|
FloatBuffer |
glGetTMatrixf()
Returns the
texture matrix (T). |
void |
glLoadIdentity()
Load the current matrix with the identity matrix
|
void |
glLoadMatrixf(float[] values,
int offset)
Load the current matrix w/ the provided one.
|
void |
glLoadMatrixf(FloatBuffer m)
Load the current matrix w/ the provided one.
|
void |
glMatrixMode(int matrixName)
Sets the current matrix mode.
|
void |
glMultMatrixf(float[] m,
int m_offset)
Multiply the current matrix
|
void |
glMultMatrixf(FloatBuffer m)
Multiply the current matrix
|
void |
glOrthof(float left,
float right,
float bottom,
float top,
float zNear,
float zFar)
Multiply the current matrix with the orthogonal matrix. |
void |
glPopMatrix()
Pop the current matrix from it's stack.
|
void |
glPushMatrix()
Push the current matrix to it's stack, while preserving it's values.
|
void |
glRotatef(float angdeg,
float x,
float y,
float z)
Rotate the current matrix.
|
void |
glScalef(float x,
float y,
float z)
Scale the current matrix.
|
void |
glTranslatef(float x,
float y,
float z)
Translate the current matrix.
|
void |
gluLookAt(float eyex,
float eyey,
float eyez,
float centerx,
float centery,
float centerz,
float upx,
float upy,
float upz)
|
void |
gluPerspective(float fovy,
float aspect,
float zNear,
float zFar)
Multiply the current matrix with the perspective/frustum matrix. |
void |
gluPickMatrix(float x,
float y,
float deltaX,
float deltaY,
int[] viewport,
int viewport_offset) |
boolean |
gluProject(float objx,
float objy,
float objz,
int[] viewport,
int viewport_offset,
float[] win_pos,
int win_pos_offset)
Map object coordinates to window coordinates.
|
boolean |
gluUnProject(float winx,
float winy,
float winz,
int[] viewport,
int viewport_offset,
float[] obj_pos,
int obj_pos_offset)
Map window coordinates to object coordinates.
|
static boolean |
isMatrixGetName(int matrixGetName) |
static boolean |
isMatrixModeName(int matrixModeName) |
static int |
matrixGetName2MatrixModeName(int matrixGetName) |
static int |
matrixModeName2MatrixGetName(int matrixModeName) |
static StringBuilder |
matrixToString(StringBuilder sb,
String f,
FloatBuffer a) |
static StringBuilder |
matrixToString(StringBuilder sb,
String f,
FloatBuffer a,
FloatBuffer b) |
String |
toString() |
StringBuilder |
toString(StringBuilder sb,
String f) |
boolean |
update()
Update the derived
inverse modelview (Mvi) ,
inverse transposed modelview (Mvit) matrices and Frustum
if they are dirty and they were requested
by one of the Mvi get , Mvit get
or Frustum get methods. |
boolean |
usesBackingArray() |
public static final int MODIFIED_PROJECTION
projection matrix (P)
, since last update()
call.public static final int MODIFIED_MODELVIEW
modelview matrix (Mv)
, since last update()
call.public static final int MODIFIED_TEXTURE
texture matrix (T)
, since last update()
call.public static final int MODIFIED_ALL
public static final int DIRTY_INVERSE_MODELVIEW
inverse modelview matrix (Mvi)
.public static final int DIRTY_INVERSE_TRANSPOSED_MODELVIEW
inverse transposed modelview matrix (Mvit)
.public static final int DIRTY_FRUSTUM
frustum
.public static final int DIRTY_ALL
public PMVMatrix()
PMVMatrix(boolean useBackingArray)
,
with useBackingArray = true
.public PMVMatrix(boolean useBackingArray)
useBackingArray
- true
for non direct NIO Buffers with guaranteed backing array,
which allows faster access in Java computation.
false
for direct NIO buffers w/o a guaranteed backing array.
In most Java implementations, direct NIO buffers have no backing array
and hence the Java computation will be throttled down by direct IO get/put
operations.
Depending on the application, ie. whether the Java computation or
JNI invocation and hence native data transfer part is heavier,
this flag shall be set to true
or false
public static final boolean isMatrixModeName(int matrixModeName)
matrixModeName
- One of GL_MODELVIEW
, GL_PROJECTION
or GL_TEXTURE
public static final int matrixModeName2MatrixGetName(int matrixModeName)
matrixModeName
- One of GL_MODELVIEW
, GL_PROJECTION
or GL_TEXTURE
GL_MODELVIEW_MATRIX
, GL_PROJECTION_MATRIX
or GL_TEXTURE_MATRIX
public static final boolean isMatrixGetName(int matrixGetName)
matrixGetName
- One of GL_MODELVIEW_MATRIX
, GL_PROJECTION_MATRIX
or GL_TEXTURE_MATRIX
public static final int matrixGetName2MatrixModeName(int matrixGetName)
matrixGetName
- One of GL_MODELVIEW_MATRIX
, GL_PROJECTION_MATRIX
or GL_TEXTURE_MATRIX
GL_MODELVIEW
, GL_PROJECTION
or GL_TEXTURE
public static StringBuilder matrixToString(StringBuilder sb, String f, FloatBuffer a)
sb
- optional passed StringBuilder instance to be usedf
- the format string of one floating point, i.e. "%10.5f", see Formatter
a
- 4x4 matrix in column major order (OpenGL)public static StringBuilder matrixToString(StringBuilder sb, String f, FloatBuffer a, FloatBuffer b)
sb
- optional passed StringBuilder instance to be usedf
- the format string of one floating point, i.e. "%10.5f", see Formatter
a
- 4x4 matrix in column major order (OpenGL)b
- 4x4 matrix in column major order (OpenGL)public final boolean usesBackingArray()
PMVMatrix(boolean)
public final void destroy()
public final int glGetMatrixMode()
public final FloatBuffer glGetTMatrixf()
texture matrix
(T).
public final FloatBuffer glGetPMatrixf()
projection matrix
(P).
public final FloatBuffer glGetMvMatrixf()
modelview matrix
(Mv).
public final FloatBuffer glGetMviMatrixf()
modelview matrix
(Mvi).
Method enables the Mvi matrix update, and performs it's update w/o clearing the modified bits.
See update()
and matrix storage details.
update()
,
clearAllUpdateRequests()
public final FloatBuffer glGetMvitMatrixf()
modelview matrix
(Mvit).
Method enables the Mvit matrix update, and performs it's update w/o clearing the modified bits.
See update()
and matrix storage details.
update()
,
clearAllUpdateRequests()
public final FloatBuffer glGetPMvMatrixf()
public final FloatBuffer glGetPMvMviMatrixf()
P
, Mv
and Mvi
.
Method enables the Mvi matrix update, and performs it's update w/o clearing the modified bits.
See update()
and matrix storage details.
update()
,
clearAllUpdateRequests()
public final FloatBuffer glGetPMvMvitMatrixf()
P
, Mv
, Mvi
and Mvit
.
Method enables the Mvi and Mvit matrix update, and performs it's update w/o clearing the modified bits.
See update()
and matrix storage details.
update()
,
clearAllUpdateRequests()
public Frustum glGetFrustum()
public final FloatBuffer glGetMatrixf()
public final FloatBuffer glGetMatrixf(int matrixName)
matrixName
- Either a matrix-get-name, i.e.
GL_MODELVIEW_MATRIX
, GL_PROJECTION_MATRIX
or GL_TEXTURE_MATRIX
,
or a matrix-mode-name, i.e.
GL_MODELVIEW
, GL_PROJECTION
or GL_TEXTURE
public final void glMatrixMode(int matrixName)
GLMatrixFunc
glMatrixMode
in interface GLMatrixFunc
matrixName
- GLMatrixFunc.GL_MODELVIEW
, GLMatrixFunc.GL_PROJECTION
or GL_TEXTURE
.public final void glGetFloatv(int matrixGetName, FloatBuffer params)
GLMatrixFunc
glGetFloatv
in interface GLMatrixFunc
matrixGetName
- GLMatrixFunc.GL_MODELVIEW_MATRIX
, GLMatrixFunc.GL_PROJECTION_MATRIX
or GLMatrixFunc.GL_TEXTURE_MATRIX
params
- the FloatBuffer's position remains unchanged,
which is the same behavior than the native JOGL GL implpublic final void glGetFloatv(int matrixGetName, float[] params, int params_offset)
GLMatrixFunc
glGetFloatv
in interface GLMatrixFunc
matrixGetName
- GLMatrixFunc.GL_MODELVIEW_MATRIX
, GLMatrixFunc.GL_PROJECTION_MATRIX
or GLMatrixFunc.GL_TEXTURE_MATRIX
params
- storageparams_offset
- storage offsetpublic final void glGetIntegerv(int pname, IntBuffer params)
GLMatrixFunc
glGetIntegerv
in interface GLMatrixFunc
pname
- GLMatrixFunc.GL_MATRIX_MODE
to receive the current matrix modeparams
- the FloatBuffer's position remains unchanged
which is the same behavior than the native JOGL GL implpublic final void glGetIntegerv(int pname, int[] params, int params_offset)
glGetIntegerv
in interface GLMatrixFunc
public final void glLoadMatrixf(float[] values, int offset)
GLMatrixFunc
glLoadMatrixf
in interface GLMatrixFunc
public final void glLoadMatrixf(FloatBuffer m)
GLMatrixFunc
glLoadMatrixf
in interface GLMatrixFunc
public final void glPopMatrix()
GLMatrixFunc
glPopMatrix
in interface GLMatrixFunc
GLMatrixFunc.glPushMatrix()
public final void glPushMatrix()
GLMatrixFunc
There exist one stack per matrix mode, i.e. GLMatrixFunc.GL_MODELVIEW
, GLMatrixFunc.GL_PROJECTION
and GL_TEXTURE
.
glPushMatrix
in interface GLMatrixFunc
public final void glLoadIdentity()
GLMatrixFunc
glLoadIdentity
in interface GLMatrixFunc
public final void glMultMatrixf(FloatBuffer m)
GLMatrixFunc
glMultMatrixf
in interface GLMatrixFunc
m
- the FloatBuffer's position remains unchanged,
which is the same behavior than the native JOGL GL implpublic final void glMultMatrixf(float[] m, int m_offset)
GLMatrixFunc
glMultMatrixf
in interface GLMatrixFunc
public final void glTranslatef(float x, float y, float z)
GLMatrixFunc
glTranslatef
in interface GLMatrixFunc
public final void glRotatef(float angdeg, float x, float y, float z)
GLMatrixFunc
glRotatef
in interface GLMatrixFunc
public final void glScalef(float x, float y, float z)
GLMatrixFunc
glScalef
in interface GLMatrixFunc
public final void glOrthof(float left, float right, float bottom, float top, float zNear, float zFar)
GLMatrixFunc
Multiply
the current matrix with the orthogonal matrix.glOrthof
in interface GLMatrixFunc
public final void glFrustumf(float left, float right, float bottom, float top, float zNear, float zFar)
GLMatrixFunc
Multiply
the current matrix with the frustum matrix.glFrustumf
in interface GLMatrixFunc
public final void gluPerspective(float fovy, float aspect, float zNear, float zFar)
Multiply
the current matrix
with the perspective/frustum matrix.public final void gluLookAt(float eyex, float eyey, float eyez, float centerx, float centery, float centerz, float upx, float upy, float upz)
public final boolean gluProject(float objx, float objy, float objz, int[] viewport, int viewport_offset, float[] win_pos, int win_pos_offset)
objx
- objy
- objz
- viewport
- viewport_offset
- win_pos
- win_pos_offset
- public final boolean gluUnProject(float winx, float winy, float winz, int[] viewport, int viewport_offset, float[] obj_pos, int obj_pos_offset)
winx
- winy
- winz
- viewport
- viewport_offset
- obj_pos
- obj_pos_offset
- public final void gluPickMatrix(float x, float y, float deltaX, float deltaY, int[] viewport, int viewport_offset)
public StringBuilder toString(StringBuilder sb, String f)
public final int getModifiedBits(boolean clear)
A modified bit is set, if the corresponding matrix had been modified by a mutable operation
since last update()
or getModifiedBits(true)
call.
clear
- if true, clears the modified bits, otherwise leaves them untouched.MODIFIED_PROJECTION
,
MODIFIED_MODELVIEW
,
MODIFIED_TEXTURE
public final int getDirtyBits()
A dirty bit is set , if the corresponding matrix had been modified by a mutable operation
since last update()
call. The latter clears the dirty state only if the dirty matrix (Mvi or Mvit) or Frustum
has been requested by one of the Mvi get
, Mvit get
or Frustum get
methods.
public final int getRequestMask()
The request bit mask is set by one of the Mvi get
, Mvit get
or Frustum get
methods.
public final void clearAllUpdateRequests()
update()
requests of the Mvi and Mvit matrix and Frustum
after it has been enabled by one of the Mvi get
, Mvit get
or Frustum get
methods.
Allows user to disable subsequent Mvi, Mvit and Frustum
updates if no more required.
public final boolean update()
inverse modelview (Mvi)
,
inverse transposed modelview (Mvit)
matrices and Frustum
if they are dirty and they were requested
by one of the Mvi get
, Mvit get
or Frustum get
methods.
The Mvi and Mvit matrices and Frustum
are considered dirty, if their corresponding
Mv matrix
has been modified since their last update.
Method should be called manually in case mutable operations has been called
and caller operates on already fetched references, i.e. not calling
Mvi get
, Mvit get
or Frustum get
etc anymore.
This method clears the modified bits like getModifiedBits(true)
,
which are set by any mutable operation. The modified bits have no impact
on this method, but the return value.
Frustum
were updated, otherwise false.
In other words, method returns true if any matrix used by the caller must be updated,
e.g. uniforms in a shader program.getModifiedBits(boolean)
,
MODIFIED_PROJECTION
,
MODIFIED_MODELVIEW
,
MODIFIED_TEXTURE
,
DIRTY_INVERSE_MODELVIEW
,
DIRTY_INVERSE_TRANSPOSED_MODELVIEW
,
DIRTY_FRUSTUM
,
glGetMviMatrixf()
,
glGetMvitMatrixf()
,
glGetPMvMviMatrixf()
,
glGetPMvMvitMatrixf()
,
glGetFrustum()
,
clearAllUpdateRequests()
Copyright 2010 JogAmp Community.