Graphics Programs Reference
In-Depth Information
Perspective/Projection transformation
Matrix .frustumM(float[ ] m, int mOffset, float left, float right,
float bottom, float top, float near, float far): Defines a projection
matrix m in terms of six clip planes
To perform these transformations, we need to associate matrices with objects (again,
an object is a primitive or a combination of same type of primitives). There are three
stages—first, we declare a new kind of input variable in our vertex shader called uni-
form ; then we multiply this variable with an attribute so as to transform per-vertex
position data; finally, we “externally” pass data to this uniform variable. You may
have guessed that this data consists of Java float arrays.
We describe this with the help of an application, but first we explain an important
concept about combined transformations. In almost all cases, when working with
transformations of objects in interactive ES 2.0 applications, we have to use model-
ing transformation in combination with viewing and projection transformations. We
can use a single matrix to represent all of these transformations, and we usually call
this as MVPmatrix (that is, Model-View-Projection matrix ). It bears this name to
signify the order in which we combine the transformations so they are represented
as a single matrix. We first update the MVPmatrix with any of the modeling trans-
formations, say using the translateM method. Then, we update it with the
setLookAtM method to apply viewing transformation. Finally, using the frust-
umM method, we apply projection transformation. Please note that, because of the
way matrices work, this order (that is, Model-View-Projection ) becomes important
when combining transformations.
From the source code for this chapter, import the archive file glcube.zip . This
loads the GL CUBE application into your workspace. First, turn your attention to the
onSurfaceChanged method of the Renderer class.
setLookAtM method ( Listing 3-25 ) defines a view matrix _ViewMatrix (fields
named as _*Matrix are float arrays of size 16) in terms of an eye point (-13,
5, 10) , a center of view (0, 0, 0) , and an up vector (0, 1, 0) for (x, y,
z) .
Listing 3-25. GL CUBE/src/com/apress/android/glcube/GLES20Renderer.java
float ratio = (float) width / height;
float zNear = 0.1f;
 
 
Search WWH ::




Custom Search