首先我們實作了GLSurfaceView.Renderer 這個接口,主要是實作3 個方法:onSurfaceCreated(), onSurfaceChanged() 和 onDrawFrame() 。這些方法很容易了解,第一個在surface 建立以後調用,第二個是在surface 發生改變以後調用,例如從豎屏切換到橫屏的時候,最後一個方法是當任何時候調用一個畫圖方法的時候。
我們通過glClearColor()方法為底色定義了顔色。底色是在我們能看到的所有東西的後面,是以所有在底色後面的東西都是不可見的。可以想象這種東西為濃霧,擋住了所有的東西。然後我們将要為之設定距離來show一下它怎麼用的。那時候你就一定會明白它是怎麼存在的了。
為了讓顔色變化可見,我們必須調用glClear()以及顔色緩沖的Mask來清空buffer,然後為我們的底色使用新的底色。
為了能看到它在起作用,我們這裡為MotionEvent建立一個response,使用它來改變顔色。首先在VortexRenderer中來建立一個設定顔色的函數。
java代碼:
- public void setColor(float r, float g, float b) {
- _red = r;
- _green = g;
- _blue = b;
- }
複制代碼
下面是VortexView類中建立的方法來處理MotionEvent。
java代碼:
- public boolean onTouchEvent(final MotionEvent event) {
- queueEvent(new Runnable() {
- public void run() {
- _renderer.setColor(event.getX() / getWidth(), event.getY() / getHeight(), 1.0f);
- }
- });
- return true;
- }
複制代碼
這個系列的第二部分是關于如何添加一個三角形并可以旋轉它。
第一件事情是初始化需要顯示的三角形。我們來在VortexRenderer類中添加一個方法initTriangle()。
java代碼:
- // new object variables we need
- // a raw buffer to hold indices
- private ShortBuffer _indexBuffer;
- // a raw buffer to hold the vertices
- private FloatBuffer _vertexBuffer;
- private short[] _indicesArray = {0, 1, 2};
- private int _nrOfVertices = 3;
- // code snipped
- private void initTriangle() {
- // float has 4 bytes
- ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3 * 4);
- vbb.order(ByteOrder.nativeOrder());
- _vertexBuffer = vbb.asFloatBuffer();
- // short has 2 bytes
- ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2);
- ibb.order(ByteOrder.nativeOrder());
- _indexBuffer = ibb.asShortBuffer();
- float[] coords = {
- -0.5f, -0.5f, 0f, // (x1, y1, z1)
- 0.5f, -0.5f, 0f, // (x2, y2, z2)
- 0f, 0.5f, 0f // (x3, y3, z3)
- };
- _vertexBuffer.put(coords);
- _indexBuffer.put(_indicesArray);
- _vertexBuffer.position(0);
- _indexBuffer.position(0);
- }