1. Are you ready for the Galaxy S20? Here is everything we know so far!

OpenGL liveWallpaper

Discussion in 'Android Development' started by kodiak211, Aug 9, 2012.

  1. kodiak211

    kodiak211 Member
    Thread Starter

    I'm wanting to give my model in my live wallpaper some animations. How I have it set up now, It's spins around my model. What I want to do is, have it pan left and right, and when you touch the screen, it animates my model. Here are some references of what I'm doing, and what I'm wanting to do.

    My own app
    3D Jelly Bean Live Wallpaper
    Jelly Bean 3D Live Wallpaper - YouTube

    What I'm trying to do
    Amazing Spider-Man 3D Live WP
    https://www.youtube.com/watch?v=OlXuubJs0b0&feature=player_embedded
    minus the soundboard and widgets.


    Crown Skull LiveWallpaper
    https://play.google.com/store/apps/...sMSwxLDEsImNyb3duc2t1bGwubGl2ZXdhbGxwYXBlciJd

    FileTexture.java

    Code (Text):
    1. import java.io.BufferedOutputStream;
    2. import java.io.DataOutputStream;
    3. import java.io.File;
    4. import java.io.FileOutputStream;
    5. import java.io.IOException;
    6. import java.io.InputStream;
    7. import java.net.HttpURLConnection;
    8. import java.net.MalformedURLException;
    9. import java.net.URL;
    10. import java.util.ArrayList;
    11. import java.util.Random;
    12.  
    13. import javax.microedition.khronos.opengles.GL10;
    14. import javax.microedition.khronos.opengles.GL11;
    15. import javax.microedition.khronos.opengles.GL11Ext;
    16.  
    17. import com.Beck.GLExample.R;
    18.  
    19. import android.content.Context;
    20. import android.database.Cursor;
    21. import android.graphics.Bitmap;
    22. import android.graphics.BitmapFactory;
    23. import android.opengl.GLUtils;
    24. import android.os.Environment;
    25. import android.provider.MediaStore;
    26. import android.provider.MediaStore.Images;
    27. import android.util.Log;
    28.  
    29. public class FileTexture {
    30.     public Context context;
    31.     private GL10 gl;
    32.     private int[] textures = new int[1];
    33.     private static BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();
    34.     private Bitmap bitmap;
    35.     private String fname;
    36.    
    37.  
    38.  
    39.     public FileTexture(GL10 gl,String fname) {
    40.         if(gl==null)return;
    41.         this.gl = gl;
    42.         this.fname=fname;
    43.        
    44.         sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
    45.         context = GLExample.context;
    46.     }
    47.  
    48.        
    49.     public void loadTexture() {
    50.        
    51.        
    52.         InputStream is = context.getResources().openRawResource(R.drawable.jellytext);
    53.         bitmap = BitmapFactory.decodeStream(is);
    54.        
    55.            
    56.        
    57.        createTexture();
    58.    
    59.         }
    60.    
    61.  
    62.     private void createTexture() {
    63.        
    64.             gl.glGenTextures(1, textures, 0);
    65.             gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
    66.             gl.glPixelStorei(GL10.GL_UNPACK_ALIGNMENT, 1);
    67.             gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
    68.                     GL10.GL_LINEAR);
    69.             gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
    70.                     GL10.GL_LINEAR);
    71.    
    72.             gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
    73.                     GL10.GL_REPEAT);
    74.             gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
    75.                     GL10.GL_REPEAT);
    76.    
    77.             gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
    78.                     GL10.GL_MODULATE);
    79.    
    80.            
    81.             GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    82.    
    83.            
    84.    
    85.             bitmap.recycle();
    86.            
    87.    
    88.             int error = gl.glGetError();
    89.             if (error != GL10.GL_NO_ERROR) {
    90.                 Log.w("", "" + error);
    91.             }
    92.         //}
    93.     }
    94.  
    95.     public void setTexture() {
    96.        
    97.         gl.glBindTexture(GL10.GL_TEXTURE_2D, this.textures[0]);
    98.     }
    99. }
    100.  
    GLModel.java

    Code (Text):
    1. import java.io.BufferedReader;
    2. import java.io.FileNotFoundException;
    3. import java.io.IOException;
    4. import java.io.InputStreamReader;
    5. import java.io.Serializable;
    6. import java.nio.ByteBuffer;
    7. import java.nio.ByteOrder;
    8. import java.nio.CharBuffer;
    9. import java.nio.FloatBuffer;
    10. import java.util.ArrayList;
    11.  
    12. import javax.microedition.khronos.opengles.GL10;
    13. import javax.microedition.khronos.opengles.GL11;
    14.  
    15. import com.Beck.GLExample.R;
    16.  
    17. import android.content.Context;
    18. import android.content.res.AssetManager;
    19. import android.os.Handler;
    20. import android.util.Log;
    21.  
    22. class GLModel implements Serializable {
    23.  
    24.    
    25.     private static String mTex;
    26.     private static int intTex;
    27.     private float moonangle = 0f;
    28.     private int IdxCnt;
    29.     private float langle = 0f;
    30.     public static boolean useshading = false;
    31.     public static float shadowcolor = 0.50f;
    32.     private static FileTexture filetexture;
    33.    
    34.     // public static final Handler mHandler = new Handler();
    35.     // Create runnable for posting
    36.     public static final Runnable mUpdateTex = new Runnable() {
    37.         public void run() {
    38.             InitTex();
    39.         }
    40.     };
    41.  
    42.     public GLModel(Context context) {
    43.         mContext = context;
    44.         loadObj();
    45.         Log.e("Model", "LOADED");
    46.        
    47.  
    48.     }
    49.  
    50.     public static void InitTex() {
    51.         intTex = 3;
    52.         setTexture(1);
    53.         filetexture = new FileTexture(gl11, "null");
    54.         filetexture.loadTexture();
    55.         textures = new GLTextures(gl11, mContext);
    56.         textures.add(R.drawable.jellytext);
    57.         textures.loadTextures();
    58.     }
    59.  
    60.     public void Init(GL10 gl) {
    61.         if (gl == null)
    62.             return;
    63.         gl11 = (GL11) gl;
    64.  
    65.         InitTex();
    66.  
    67.         int[] buffer = new int[1];
    68.  
    69.    
    70.         gl11.glGenBuffers(1, buffer, 0);
    71.         mVertBufferIndex = buffer[0];
    72.         gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, mVertBufferIndex);
    73.         gl11.glBufferData(GL11.GL_ARRAY_BUFFER, mVertexBuffer.capacity() * 4,
    74.                 mVertexBuffer, GL11.GL_STATIC_DRAW);
    75.         Log.e("Vertex", "ok");
    76.  
    77.        
    78.         gl11.glGenBuffers(1, buffer, 0);
    79.         mNormBufferIndex = buffer[0];
    80.         gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, mNormBufferIndex);
    81.         gl11.glBufferData(GL11.GL_ARRAY_BUFFER, mNormBuffer.capacity() * 4,
    82.                 mNormBuffer, GL11.GL_STATIC_DRAW);
    83.         Log.e("Normal", "ok");
    84.  
    85.         // texcoord buffer
    86.         gl11.glGenBuffers(1, buffer, 0);
    87.         mTexBufferIndex = buffer[0];
    88.         gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, mTexBufferIndex);
    89.         gl11.glBufferData(GL11.GL_ARRAY_BUFFER, mTexBuffer.capacity() * 4,
    90.                 mTexBuffer, GL11.GL_STATIC_DRAW);
    91.         Log.e("Texture", "ok");
    92.  
    93.         // unbind array buffer
    94.         gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, 0);
    95.  
    96.         // Buffer d'indices
    97.         gl11.glGenBuffers(1, buffer, 0);
    98.         mIndexBufferIndex = buffer[0];
    99.         gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, mIndexBufferIndex);
    100.         gl11.glBufferData(GL11.GL_ELEMENT_ARRAY_BUFFER,
    101.                 mIndexBuffer.capacity() * 2, mIndexBuffer, GL11.GL_STATIC_DRAW);
    102.  
    103.         // Unbind the element array buffer.
    104.         gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, 0);
    105.         Log.e("VboCube", "Idx ok");
    106.         IdxCnt = mIndexBuffer.capacity();
    107.        
    108.     }
    109.  
    110.     private void loadObj() {
    111.         try {
    112.             AssetManager am = mContext.getAssets();
    113.             String str;
    114.             String[] tmp;
    115.             String[] ftmp;
    116.             float v;
    117.             ArrayList<Float> vlist = new ArrayList<Float>();
    118.             ArrayList<Float> tlist = new ArrayList<Float>();
    119.             ArrayList<Float> nlist = new ArrayList<Float>();
    120.             ArrayList<Fp> fplist = new ArrayList<Fp>();
    121.  
    122.             BufferedReader inb = new BufferedReader(new InputStreamReader(am
    123.                     .open("jellybean.obj")), 1024);
    124.             while ((str = inb.readLine()) != null) {
    125.                 tmp = str.split(" ");
    126.                 if (tmp[0].equalsIgnoreCase("v")) {
    127.  
    128.                     for (int i = 1; i < 4; i++) {
    129.                         v = Float.parseFloat(tmp[i]);
    130.                         vlist.add(v);
    131.                     }
    132.  
    133.                 }
    134.                 if (tmp[0].equalsIgnoreCase("vn")) {
    135.  
    136.                     for (int i = 1; i < 4; i++) {
    137.                         v = Float.parseFloat(tmp[i]);
    138.                         nlist.add(v);
    139.                     }
    140.  
    141.                 }
    142.                 if (tmp[0].equalsIgnoreCase("vt")) {
    143.                     for (int i = 1; i < 3; i++) {
    144.                         v = Float.parseFloat(tmp[i]);
    145.                         tlist.add(v);
    146.                     }
    147.  
    148.                 }
    149.                 if (tmp[0].equalsIgnoreCase("f")) {
    150.                     for (int i = 1; i < 4; i++) {
    151.                         ftmp = tmp[i].split("/");
    152.  
    153.                         long chi = Integer.parseInt(ftmp[0]) - 1;
    154.                         int cht = Integer.parseInt(ftmp[1]) - 1;
    155.                         int chn = Integer.parseInt(ftmp[2]) - 1;
    156.  
    157.                         fplist.add(new Fp(chi, cht, chn));
    158.                     }
    159.                     NBFACES++;
    160.                 }
    161.             }
    162.  
    163.             ByteBuffer vbb = ByteBuffer.allocateDirect(fplist.size() * 4 * 3);
    164.             vbb.order(ByteOrder.nativeOrder());
    165.             mVertexBuffer = vbb.asFloatBuffer();
    166.  
    167.             ByteBuffer vtbb = ByteBuffer.allocateDirect(fplist.size() * 4 * 2);
    168.             vtbb.order(ByteOrder.nativeOrder());
    169.             mTexBuffer = vtbb.asFloatBuffer();
    170.  
    171.             ByteBuffer nbb = ByteBuffer.allocateDirect(fplist.size() * 4 * 3);
    172.             nbb.order(ByteOrder.nativeOrder());
    173.             mNormBuffer = nbb.asFloatBuffer();
    174.  
    175.             for (int j = 0; j < fplist.size(); j++) {
    176.                 mVertexBuffer.put(vlist.get((int) (fplist.get(j).Vi * 3)));
    177.                 mVertexBuffer.put(vlist.get((int) (fplist.get(j).Vi * 3 + 1)));
    178.                 mVertexBuffer.put(vlist.get((int) (fplist.get(j).Vi * 3 + 2)));
    179.  
    180.                 mTexBuffer.put(tlist.get(fplist.get(j).Ti * 2));
    181.                 mTexBuffer.put(tlist.get((fplist.get(j).Ti * 2) + 1));
    182.  
    183.                 mNormBuffer.put(nlist.get(fplist.get(j).Ni * 3));
    184.                 mNormBuffer.put(nlist.get((fplist.get(j).Ni * 3) + 1));
    185.                 mNormBuffer.put(nlist.get((fplist.get(j).Ni * 3) + 2));
    186.             }
    187.  
    188.             mIndexBuffer = CharBuffer.allocate(fplist.size());
    189.             for (int j = 0; j < fplist.size(); j++) {
    190.                 mIndexBuffer.put((char) j);
    191.             }
    192.  
    193.             mVertexBuffer.position(0);
    194.             mTexBuffer.position(0);
    195.             mNormBuffer.position(0);
    196.             mIndexBuffer.position(0);
    197.  
    198.         } catch (FileNotFoundException e) {
    199.             // TODO Auto-generated catch block
    200.             e.printStackTrace();
    201.         } catch (IOException e) {
    202.             // TODO Auto-generated catch block
    203.             e.printStackTrace();
    204.         }
    205.  
    206.     }
    207.  
    208.     public void draw(GL10 gl, boolean showmoon) {
    209.         if (gl11 == null)
    210.             return;
    211.         if (gl11 == null)
    212.             return;
    213.         gl.glPushMatrix();
    214.         gl.glEnable(GL10.GL_TEXTURE_2D);
    215.  
    216.        
    217.            
    218.             filetexture.setTexture();
    219.    
    220.  
    221.         gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, mTexBufferIndex);
    222.        
    223.            
    224.             gl11.glClientActiveTexture(GL10.GL_TEXTURE0); // lightmap
    225.             gl11.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    226.             gl11.glTexCoordPointer(2, GL10.GL_FLOAT, 0, 0);
    227.  
    228.             gl11.glClientActiveTexture(GL10.GL_TEXTURE1); // color
    229.             gl11.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    230.             gl11.glTexCoordPointer(2, GL10.GL_FLOAT, 0, 0);
    231.  
    232.             gl11.glActiveTexture(GL10.GL_TEXTURE0);
    233.             gl11.glEnable(GL10.GL_TEXTURE_2D);
    234.             gl11.glActiveTexture(GL10.GL_TEXTURE1);
    235.             gl11.glEnable(GL10.GL_TEXTURE_2D);
    236.  
    237.             gl11.glColor4f(shadowcolor, shadowcolor, shadowcolor, shadowcolor);
    238.  
    239.             gl11.glActiveTexture(GL10.GL_TEXTURE0);
    240.            
    241.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
    242.                     GL11.GL_COMBINE);
    243.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_COMBINE_RGB,
    244.                     GL10.GL_ADD);
    245.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_SRC0_RGB,
    246.                     GL10.GL_TEXTURE);
    247.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_SRC1_RGB,
    248.                     GL11.GL_PREVIOUS);
    249.  
    250.             gl11.glActiveTexture(GL10.GL_TEXTURE1);
    251.        
    252.             filetexture.setTexture();
    253.            
    254.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
    255.                     GL11.GL_COMBINE);
    256.            
    257.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_COMBINE_RGB,
    258.                     GL10.GL_MODULATE);
    259.        
    260.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_SRC0_RGB,
    261.                     GL11.GL_PREVIOUS);
    262.        
    263.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_SRC1_RGB,
    264.                     GL10.GL_TEXTURE);
    265.            
    266.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_OPERAND0_RGB,
    267.                     GL10.GL_SRC_COLOR);
    268.             gl11.glTexEnvi(GL10.GL_TEXTURE_ENV, GL11.GL_OPERAND1_RGB,
    269.                     GL10.GL_SRC_COLOR);
    270.        
    271.         gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, mVertBufferIndex);
    272.         gl11.glVertexPointer(3, GL10.GL_FLOAT, 0, 0);
    273.  
    274.         gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, mNormBufferIndex);
    275.         gl11.glNormalPointer(GL10.GL_FLOAT, 0, 0);
    276.  
    277.         gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, mIndexBufferIndex);
    278.         gl11.glDrawElements(GL11.GL_TRIANGLES, IdxCnt, GL11.GL_UNSIGNED_SHORT,
    279.                 0);
    280.  
    281.        
    282.  
    283.        
    284.         gl.glPopMatrix();
    285.        
    286.     }
    287.  
    288.     public void freeHardwareBuffers() {
    289.  
    290.         int[] buffer = new int[1];
    291.         buffer[0] = mVertBufferIndex;
    292.        
    293.  
    294.         buffer[0] = mTexBufferIndex;
    295.        
    296.  
    297.         buffer[0] = mNormBufferIndex;
    298.        
    299.  
    300.         buffer[0] = mIndexBufferIndex;
    301.        
    302.  
    303.         mVertBufferIndex = 0;
    304.         mIndexBufferIndex = 0;
    305.         mTexBufferIndex = 0;
    306.         mNormBufferIndex = 0;
    307.  
    308.         Log.d("Log", "hardware buffer freed");
    309.  
    310.     }
    311.  
    312.     public static void setTexture(int t) {
    313.         intTex = t;
    314.         t = 1;
    315.         switch (t) {
    316.         case 0:
    317.             mTex = "0";
    318.            
    319.             break;
    320.        
    321.         }
    322.     }
    323.     private class Fp {
    324.         public long Vi;
    325.         public int Ti;
    326.         public int Ni;
    327.  
    328.         public Fp(long chi, int ti, int ni) {
    329.             Vi = chi;
    330.             Ti = ti;
    331.             Ni = ni;
    332.            
    333.         }
    334.     }
    335.  
    336.     public static GL11 gl11;
    337.     private static int NBFACES = 0;
    338.     private static GLTextures textures;
    339.    
    340.     private static int mVertBufferIndex;
    341.     private static int mNormBufferIndex;
    342.     private static int mTexBufferIndex;
    343.     private static int mIndexBufferIndex;
    344.     private static FloatBuffer mVertexBuffer;
    345.     private static FloatBuffer mTexBuffer;
    346.     private static FloatBuffer mNormBuffer;
    347.     private static CharBuffer mIndexBuffer;
    348.     private static Context mContext;
    349.  
    350. }
    351.  
    OpenGLRenderer.java

    Code (Text):
    1. import javax.microedition.khronos.egl.EGLConfig;
    2. import javax.microedition.khronos.opengles.GL10;
    3.  
    4. import android.content.*;
    5. import android.opengl.GLU;
    6. import android.opengl.GLSurfaceView.Renderer;
    7.  
    8. public class OpenGLRenderer implements GLWallpaperService.Renderer {
    9.     public int toss;
    10.     public int count;
    11.    
    12.     private GLModel model;
    13.    
    14.     public Context context;
    15.     public float angle =0;
    16.     public OpenGLRenderer() {
    17.        
    18.         this.context = GLExample.context;
    19.         model = new GLModel(this.context);
    20.        
    21.        
    22.        
    23.        
    24.     }
    25.     /*
    26.      * (non-Javadoc)
    27.      *
    28.      * @see
    29.      * android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition
    30.      * .khronos.opengles.GL10, javax.microedition.khronos.egl.EGLConfig)
    31.      */
    32.     public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    33.         // Set the background color to black ( rgba ).
    34.         model.Init(gl);
    35.        
    36.        
    37.         gl.glEnable(GL10.GL_TEXTURE_2D);            //Enable Texture Mapping ( NEW )
    38.         gl.glShadeModel(GL10.GL_SMOOTH);            //Enable Smooth Shading
    39.         gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    //Black Background
    40.         gl.glClearDepthf(1.0f);                     //Depth Buffer Setup
    41.         gl.glEnable(GL10.GL_DEPTH_TEST);            //Enables Depth Testing
    42.         gl.glDepthFunc(GL10.GL_LEQUAL);             //The Type Of Depth Testing To Do
    43.        
    44.         //Really Nice Perspective Calculations
    45.         gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
    46.        
    47.     }
    48.  
    49.     /*
    50.      * (non-Javadoc)
    51.      *
    52.      * @see
    53.      * android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.
    54.      * khronos.opengles.GL10)
    55.      */
    56.     public void onDrawFrame(GL10 gl) {
    57.                
    58.         if (gl == null)
    59.             return;
    60.         gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    61.         gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    62.         gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
    63.         gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    64.         gl.glMatrixMode(GL10.GL_MODELVIEW);
    65.         gl.glLoadIdentity();
    66.         gl.glPushMatrix();
    67.         gl.glScalef(.2f, .2f, .2f);    
    68.         gl.glTranslatef(0, -1f, -20f);
    69.            
    70.                
    71.    
    72.        
    73.        
    74.        
    75.         gl.glRotatef (angle, 0.0f, 1.0f, 0.0f);
    76.         gl.glRotatef (90f, 0.0f, 0.0f, 1.0f);
    77.         gl.glRotatef(-90f, 0.0f, 0.0f, 1.0f);
    78.         gl.glScalef(1.6f, 1.6f, 1.6f);
    79.        
    80.        
    81.    
    82.        
    83.            
    84.    
    85.        
    86.        
    87.     model.draw(gl, false);
    88.  
    89.    
    90. gl.glPopMatrix();
    91.  
    92. angle = angle + .1f;
    93.  
    94.        
    95.        
    96.     }
    97.  
    98.     /*
    99.      * (non-Javadoc)
    100.      *
    101.      * @see
    102.      * android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition
    103.      * .khronos.opengles.GL10, int, int)
    104.      */
    105.     public void onSurfaceChanged(GL10 gl, int width, int height) {
    106.         // Sets the current view port to the new size.
    107.         model.Init(gl);
    108.        
    109.         //model.InitTex();
    110.         //square.loadGLTexture(gl, this.context);
    111.         //square2.loadGLTexture(gl, this.context);
    112.         gl.glViewport(0, 0, width, height);
    113.         // Select the projection matrix
    114.         gl.glMatrixMode(GL10.GL_PROJECTION);
    115.         // Reset the projection matrix
    116.         gl.glLoadIdentity();
    117.         // Calculate the aspect ratio of the window
    118.         GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,
    119.                 100.0f);
    120.         // Select the modelview matrix
    121.         gl.glMatrixMode(GL10.GL_MODELVIEW);
    122.         // Reset the modelview matrix
    123.         gl.glLoadIdentity();
    124.     }
    125. }
    126.  
     



    1. Download the Forums for Android™ app!


      Download

       
Loading...

Share This Page

Loading...