天天看點

Android 3D遊戲開發(一)

首先我們實作了GLSurfaceView.Renderer 這個接口,主要是實作3 個方法:onSurfaceCreated(), onSurfaceChanged() 和 onDrawFrame() 。這些方法很容易了解,第一個在surface 建立以後調用,第二個是在surface 發生改變以後調用,例如從豎屏切換到橫屏的時候,最後一個方法是當任何時候調用一個畫圖方法的時候。

    我們通過glClearColor()方法為底色定義了顔色。底色是在我們能看到的所有東西的後面,是以所有在底色後面的東西都是不可見的。可以想象這種東西為濃霧,擋住了所有的東西。然後我們将要為之設定距離來show一下它怎麼用的。那時候你就一定會明白它是怎麼存在的了。

為了讓顔色變化可見,我們必須調用glClear()以及顔色緩沖的Mask來清空buffer,然後為我們的底色使用新的底色。

       為了能看到它在起作用,我們這裡為MotionEvent建立一個response,使用它來改變顔色。首先在VortexRenderer中來建立一個設定顔色的函數。

java代碼:

  1. public void setColor(float r, float g, float b) {
  2. _red = r;
  3. _green = g;
  4. _blue = b;
  5. }

複制代碼

   下面是VortexView類中建立的方法來處理MotionEvent。

java代碼:

  1. public boolean onTouchEvent(final MotionEvent event) {
  2. queueEvent(new Runnable() {
  3. public void run() {
  4. _renderer.setColor(event.getX() / getWidth(), event.getY() / getHeight(), 1.0f);
  5. }
  6. });
  7. return true;
  8. }

複制代碼

    這個系列的第二部分是關于如何添加一個三角形并可以旋轉它。

    第一件事情是初始化需要顯示的三角形。我們來在VortexRenderer類中添加一個方法initTriangle()。

java代碼:

  1. // new object variables we need
  2. // a raw buffer to hold indices
  3. private ShortBuffer _indexBuffer;
  4. // a raw buffer to hold the vertices
  5. private FloatBuffer _vertexBuffer;
  6. private short[] _indicesArray = {0, 1, 2};
  7. private int _nrOfVertices = 3;
  8. // code snipped
  9. private void initTriangle() {
  10. // float has 4 bytes
  11. ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3 * 4);
  12. vbb.order(ByteOrder.nativeOrder());
  13. _vertexBuffer = vbb.asFloatBuffer();
  14. // short has 2 bytes
  15. ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2);
  16. ibb.order(ByteOrder.nativeOrder());
  17. _indexBuffer = ibb.asShortBuffer();
  18. float[] coords = {
  19. -0.5f, -0.5f, 0f, // (x1, y1, z1)
  20. 0.5f, -0.5f, 0f, // (x2, y2, z2)
  21. 0f, 0.5f, 0f // (x3, y3, z3)
  22. };
  23. _vertexBuffer.put(coords);
  24. _indexBuffer.put(_indicesArray);
  25. _vertexBuffer.position(0);
  26. _indexBuffer.position(0);
  27. }