鍍金池/ 教程/ Android/ 繪制點 Point
                                          繪制線段 Line Segment
                                          投影變換 Projection
                                          繪制迷你太陽系
                                          繪制一個球體
                                          繪制三角形 Triangle
                                          OpenGL 光照模型
                                          三維坐標系及坐標變換初步
                                          定義 3D 模型的前面和后面
                                          繪制一個 20 面體
                                          顏色 Color
                                          Depth Buffer
                                          材質及光照示例
                                          基本幾何圖形定義
                                          關于EGL
                                          導言
                                          Viewing 和 Modeling(MODELVIEW) 變換
                                          FrameBuffer
                                          設置光照效果 Set Lighting
                                          Viewport 變換
                                          階段小結
                                          繪制點 Point
                                          OpenGL ES API 命名習慣
                                          通用的矩陣變換指令
                                          關于 OpenGL ES
                                          創建實例應用 OpenGLDemos 程序框架
                                          OpenGL ES 管道(Pipeline)
                                          GLSurfaceView

                                          繪制點 Point

                                          上一篇介紹了 OpenGL ES 能夠繪制的幾種基本幾何圖形:點,線,三角形。將分別介紹這幾種基本幾何圖形的例子。為方便起見,暫時在同一平面上繪制這些幾何圖形,在后面介紹完 OpenGL ES 的坐標系統和坐標變換后,再介紹真正的 3D 圖形繪制方法。

                                          在 Android OpenGL ES 開發教程(7):創建實例應用 OpenGLDemos 程序框架 創建了示例應用的程序框架,并提供了一個“Hello World”示例。

                                          為避免一些重復代碼,這里定義一個所有示例代碼的基類 OpenGLESActivity,其定義如下:

                                          public class OpenGLESActivity extends Activity
                                           implements IOpenGLDemo{
                                           /** Called when the activity is first created. */
                                           @Override
                                           public void onCreate(Bundle savedInstanceState) {
                                           super.onCreate(savedInstanceState);
                                           this.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                           getWindow().setFlags(
                                           WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                           WindowManager.LayoutParams.FLAG_FULLSCREEN);
                                           mGLSurfaceView = new GLSurfaceView(this);
                                           mGLSurfaceView.setRenderer(new OpenGLRenderer(this));
                                           setContentView(mGLSurfaceView);
                                           }
                                           public void DrawScene(GL10 gl) {
                                           gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
                                           // Clears the screen and depth buffer.
                                           gl.glClear(GL10.GL_COLOR_BUFFER_BIT
                                           | GL10.GL_DEPTH_BUFFER_BIT);
                                           }
                                           @Override
                                           protected void onResume() {
                                           // Ideally a game should implement onResume() and onPause()
                                           // to take appropriate action when the activity looses focus
                                           super.onResume();
                                           mGLSurfaceView.onResume();
                                           }
                                           @Override
                                           protected void onPause() {
                                           // Ideally a game should implement onResume() and onPause()
                                           // to take appropriate action when the activity looses focus
                                           super.onPause();
                                           mGLSurfaceView.onPause();
                                           }
                                           protected GLSurfaceView mGLSurfaceView;
                                          }  
                                          • 在onCreate 方法中創建一個 GLSurfaceView mGLSurfaceView,并將屏幕設置為全屏。并為mGLSurfaceView 設置 Render。
                                          • onResume,onPause 處理 GLSurfaceView 的暫停和恢復。
                                          • DrawScene 使用黑色清空屏幕。

                                          OpenGL ES 內部存放圖形數據的 Buffer 有 COLOR ,DEPTH (深度信息)等,在繪制圖形只前一般需要清空 COLOR 和 DEPTH Buffer。

                                          本例在屏幕上使用紅色繪制 3 個點。創建一個 DrawPoint 作為 OpenGLESActivity 的子類,并定義 3 個頂點的坐標:

                                          public class DrawPoint extends OpenGLESActivity
                                           implements IOpenGLDemo{
                                           float[] vertexArray = new float[]{
                                           -0.8f , -0.4f * 1.732f , 0.0f ,
                                           0.8f , -0.4f * 1.732f , 0.0f ,
                                           0.0f , 0.4f * 1.732f , 0.0f ,
                                           };
                                           /** Called when the activity is first created. */
                                           @Override
                                           public void onCreate(Bundle savedInstanceState) {
                                           super.onCreate(savedInstanceState);
                                           }
                                           ...
                                          }  

                                          下面為 DrawPoint 的 DrawScene 的實現:

                                          public void DrawScene(GL10 gl) {
                                           super.DrawScene(gl);
                                           ByteBuffer vbb
                                           = ByteBuffer.allocateDirect(vertexArray.length*4);
                                           vbb.order(ByteOrder.nativeOrder());
                                           FloatBuffer vertex = vbb.asFloatBuffer();
                                           vertex.put(vertexArray);
                                           vertex.position(0);
                                           gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
                                           gl.glPointSize(8f);
                                           gl.glLoadIdentity();
                                           gl.glTranslatef(0, 0, -4);
                                           gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
                                           gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex);
                                           gl.glDrawArrays(GL10.GL_POINTS, 0, 3);
                                           gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
                                          }  
                                          • 首先是使用 FloatBuffer 存放三個頂點坐標。
                                          • 使用 glColor4f(float red, float green, float blue, float alpha) 將當前顏色設為紅色。
                                          • glPointSize(float size) 可以用來設置繪制點的大小。
                                          • 使用 glEnableClientState 打開 Pipeline 的Vectex 頂點“開關”
                                          • 使用 glVertexPointer 通知 OpenGL ES 圖形庫頂點坐標。
                                          • 使用 GL_POINTS 模式使用 glDrawArrays 繪制 3 個頂點。

                                          http://wiki.jikexueyuan.com/project/opengl-es-guide/images/56.png" alt="" />

                                          本例下載

                                          上一篇:材質及光照示例下一篇:Depth Buffer
                                          人妻精品动漫h无码中字