Android 3D游戏开发(一)

来源:互联网 发布:linux 查看绝对路径 编辑:程序博客网 时间:2024/04/30 00:54
首先我们实现了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. }
原创粉丝点击