Advertisement
alexarcan

CG lab 7

Apr 7th, 2016
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.83 KB | None | 0 0
  1.  
  2. package cg.bouncysquare;
  3.  
  4. import android.app.Activity;
  5. import android.opengl.GLSurfaceView;
  6. import android.os.Bundle;
  7. import android.view.WindowManager;
  8.  
  9. public class BouncySquareActivity extends Activity
  10. {
  11.     public void onCreate(Bundle savedInstanceState)
  12.     {
  13.         super.onCreate(savedInstanceState);
  14.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  15.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
  16.         GLSurfaceView view = new GLSurfaceView(this);
  17.         view.setRenderer(new SquareRenderer(this.getApplicationContext()));
  18.         setContentView(view);
  19.     }
  20. }
  21.  
  22. //--------------------------------
  23. package cg.bouncysquare;
  24.  
  25. import java.nio.ByteBuffer;
  26. import java.nio.ByteOrder;
  27. import java.nio.FloatBuffer;
  28. import javax.microedition.khronos.opengles.GL10;
  29. import javax.microedition.khronos.opengles.GL11;
  30. import android.graphics.*;
  31. import android.opengl.*;
  32. import android.content.Context;
  33. class Square
  34. {
  35.     private FloatBuffer mFVertexBuffer;
  36.     private ByteBuffer mColorBuffer;
  37.     private ByteBuffer mIndexBuffer;
  38.     private int[] textures=new int[1];
  39.     public FloatBuffer mTextureBuffer;
  40.     float[] textureCoords={
  41.             0.0f, 2.0f,
  42.             2.0f, 2.0f,
  43.             0.0f, 0.0f,
  44.             2.0f, 0.0f
  45.     };
  46.  
  47.     public Square()
  48.     {
  49.  
  50.  
  51.         float vertices[] =
  52.                 {
  53.                         -1.0f, -0.7f,
  54.                         1.0f, -0.30f,
  55.                         -1.0f, 0.70f,
  56.                         1.0f, 0.30f
  57.                 };
  58.         byte maxColor=(byte)255;
  59.         byte colors[] =
  60.                 {
  61.                         0, 0, 0,maxColor,
  62.                         maxColor,0, 0,maxColor,
  63.                         0, 0, 0,maxColor,
  64.                         maxColor,0, 0,maxColor,
  65.                 };
  66.         byte indices[] =
  67.                 {
  68.                         0, 3, 1,
  69.                         0, 2, 3
  70.                 };
  71.         ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
  72.         vbb.order(ByteOrder.nativeOrder());
  73.         mFVertexBuffer = vbb.asFloatBuffer();
  74.         mFVertexBuffer.put(vertices);
  75.         mFVertexBuffer.position(0);
  76.         mColorBuffer = ByteBuffer.allocateDirect(colors.length);
  77.         mColorBuffer.put(colors);
  78.         mColorBuffer.position(0);
  79.         mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
  80.         mIndexBuffer.put(indices);
  81.         mIndexBuffer.position(0);
  82.  
  83.         ByteBuffer tbb=ByteBuffer.allocateDirect(textureCoords.length*4);
  84.         tbb.order(ByteOrder.nativeOrder());
  85.         mTextureBuffer=tbb.asFloatBuffer();
  86.         mTextureBuffer.put(textureCoords);
  87.         mTextureBuffer.position(0);
  88.     }
  89.  
  90.     public void draw(GL10 gl)
  91.     {
  92.         gl.glFrontFace(GL11.GL_CW);
  93.         gl.glVertexPointer(2, GL11.GL_FLOAT, 0, mFVertexBuffer);
  94.         gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  95.         //gl.glColorPointer(4, GL11.GL_UNSIGNED_BYTE, 0, mColorBuffer);
  96.         gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
  97.         gl.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);
  98.         gl.glFrontFace(GL11.GL_CCW);
  99.  
  100.         gl.glVertexPointer(2, GL10.GL_FLOAT,0,mFVertexBuffer);
  101.         gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  102.         //gl.glColorPointer(4,GL10.GL_UNSIGNED_BYTE,0,mColorBuffer);
  103.         gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
  104.         gl.glEnable(GL10.GL_TEXTURE_2D);
  105.         gl.glEnable(GL10.GL_BLEND);
  106.         gl.glBlendFunc(GL10.GL_ONE, GL10.GL_SRC_COLOR);
  107.         gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
  108.         gl.glTexCoordPointer(2,GL10.GL_FLOAT,0, mTextureBuffer);
  109.         gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
  110.  
  111.     }
  112.  
  113.     public void createTexture(GL10 gl, Context contextRegf, int resource){
  114.  
  115.         Bitmap image = BitmapFactory.decodeResource(contextRegf.getResources(), resource);
  116.         gl.glGenTextures(1, textures, 0);
  117.         gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
  118.         GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, image, 0);
  119.         gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
  120.         gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
  121.         image.recycle();
  122.     }
  123. }
  124. //----------------------------------
  125. package cg.bouncysquare;
  126.  
  127. import javax.microedition.khronos.egl.EGLConfig;
  128. import javax.microedition.khronos.opengles.GL10;
  129. import android.opengl.GLSurfaceView;
  130. import java.lang.Math;
  131. import android.content.Context;
  132.  
  133. class SquareRenderer implements GLSurfaceView.Renderer
  134. {
  135.     private Square mSquare;
  136.     private float mTransY;
  137.     private Context context;
  138.  
  139.     public SquareRenderer(Context context)
  140.     {
  141.         this.context=context;
  142.         this.mSquare = new Square();
  143.     }
  144.  
  145.     public void onDrawFrame(GL10 gl)
  146.     {
  147.         gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
  148.         gl.glMatrixMode(GL10.GL_MODELVIEW);
  149.         gl.glLoadIdentity();
  150.         gl.glTranslatef(0.0f,(float)Math.sin(mTransY), -3.0f);
  151.         mSquare.draw(gl);
  152.         mTransY += .075f;
  153.     }
  154.  
  155.     public void onSurfaceChanged(GL10 gl, int width, int height)
  156.     {
  157.         gl.glViewport(0, 0, width, height);
  158.         float ratio = (float) width / height;
  159.         gl.glMatrixMode(GL10.GL_PROJECTION);
  160.         gl.glLoadIdentity();
  161.         gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
  162.     }
  163.     public void onSurfaceCreated(GL10 gl, EGLConfig config)
  164.     {
  165.         int resid=R.drawable.hedly;
  166.         mSquare.createTexture(gl, this.context, resid);
  167.         gl.glDisable(GL10.GL_DITHER);
  168.         gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
  169.                 GL10.GL_FASTEST);
  170.         gl.glClearColor(0,0,0,0);
  171.         gl.glEnable(GL10.GL_CULL_FACE);
  172.         gl.glShadeModel(GL10.GL_SMOOTH);
  173.         gl.glEnable(GL10.GL_DEPTH_TEST);
  174.     }
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement