Android OpenGL學習筆記(二)之—-三角形的繪製.

來源:互聯網
上載者:User

前面講了一些Android OpenGl 的概念問題,這一節講給大家講一下如何畫一個三角現出來.

 

一、建立一個Android工程命名為:OpenGL_Lesson2.

 

二、修改OpenGL_Lesson2.java代碼如下:

 

package com.android.tutor;<br />import android.app.Activity;<br />import android.os.Bundle;<br />public class OpenGL_Lesson2 extends Activity {</p><p>private OpenGlView mOpenGlView;<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);</p><p> mOpenGlView = new OpenGlView(this);<br /> setContentView(mOpenGlView);</p><p> }<br />}

 

三、建立一個類OpenGlView.java繼承與GLSurfaceView,代碼如下:

 

package com.android.tutor;<br />import android.content.Context;<br />import android.opengl.GLSurfaceView;<br />public class OpenGlView extends GLSurfaceView {</p><p>private OpenGlRender mOpenGlRender;<br />public OpenGlView(Context context) {<br />super(context);<br />mOpenGlRender = new OpenGlRender();<br />setRenderer(mOpenGlRender);<br />}</p><p>}<br />

 

四、建立一個OpenGlRender.java類繼承與Renderer,代碼如下:

 

package com.android.tutor;<br />import java.nio.ByteBuffer;<br />import java.nio.ByteOrder;<br />import java.nio.FloatBuffer;<br />import java.nio.ShortBuffer;<br />import javax.microedition.khronos.egl.EGLConfig;<br />import javax.microedition.khronos.opengles.GL10;<br />import android.opengl.GLSurfaceView.Renderer;<br />public class OpenGlRender implements Renderer {</p><p>private float _red = 0f;<br />private float _green = 25f;<br />private float _blue = 200f;</p><p>private ShortBuffer _indexBuffer;</p><p>private FloatBuffer _vertexBuffer;</p><p>private short[] _indicesArray = {0, 1, 2};<br /> private int _nrOfVertices = 3;<br />@Override<br />public void onSurfaceCreated(GL10 gl, EGLConfig config) {</p><p>gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);<br />initTriangle();<br />}<br />@Override<br />public void onSurfaceChanged(GL10 gl, int width, int height) {</p><p>gl.glViewport(0, 0, width, height);<br />}</p><p>@Override<br />public void onDrawFrame(GL10 gl) {<br />gl.glClearColor(_red, _green, _blue, 1.0f);</p><p>gl.glClear(GL10.GL_COLOR_BUFFER_BIT);</p><p> gl.glColor4f(0.5f, 0f, 0f, 0.5f);<br /> gl.glVertexPointer(_nrOfVertices, GL10.GL_FLOAT, 0, _vertexBuffer);<br /> gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);<br />}</p><p>private void initTriangle() {<br /> // float has 4 bytes<br /> ByteBuffer vbb = ByteBuffer.allocateDirect(_nrOfVertices * 3 * 4);<br /> vbb.order(ByteOrder.nativeOrder());<br /> _vertexBuffer = vbb.asFloatBuffer();</p><p> // short has 4 bytes<br /> ByteBuffer ibb = ByteBuffer.allocateDirect(_nrOfVertices * 2);<br /> ibb.order(ByteOrder.nativeOrder());<br /> _indexBuffer = ibb.asShortBuffer();</p><p> float[] coords = {<br /> -0.5f, -0.5f, 0f, // (x1, y1, z1)<br /> 0.5f, -0.5f, 0f, // (x2, y2, z2)<br /> 0f, 0.5f, 0f // (x3, y3, z3)<br /> };</p><p> _vertexBuffer.put(coords);</p><p> _indexBuffer.put(_indicesArray);</p><p> _vertexBuffer.position(0);<br /> _indexBuffer.position(0);<br /> }<br />}<br />

 

五、運行之,效果如下:

 

 

今天晚上就先不做詳細解釋了!改日在加上!謝謝~

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.