在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

繪制線段 Line Segment

創(chuàng)建一個 DrawLine Activity,定義四個頂點:

float vertexArray[] = {
 -0.8f, -0.4f * 1.732f, 0.0f,
 -0.4f, 0.4f * 1.732f, 0.0f,
 0.0f, -0.4f * 1.732f, 0.0f,
 0.4f, 0.4f * 1.732f, 0.0f,
};  

分別以三種模式 GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP 來繪制直線:

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.glLoadIdentity();
 gl.glTranslatef(0, 0, -4);
 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex);
 index++;
 index%=10;
 switch(index){
 case 0:
 case 1:
 case 2:
 gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
 gl.glDrawArrays(GL10.GL_LINES, 0, 4);
 break;
 case 3:
 case 4:
 case 5:
 gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
 gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 4);
 break;
 case 6:
 case 7:
 case 8:
 case 9:
 gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
 gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4);
 break;
 }
 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}  

這里 index 的目的是為了延遲一下顯示(更好的做法是使用固定時間間隔)。前面說過 GLSurfaceView 的渲染模式有兩種,一種是連續(xù)不斷的更新屏幕,另一種為 on-demand,只有在調(diào)用 requestRender() 在更新屏幕。 缺省為 RENDERMODE_CONTINUOUSLY 持續(xù)刷新屏幕。

OpenGLDemos 使用的是缺省的 RENDERMODE_CONTINUOUSLY 持續(xù)刷新屏幕 ,因此 Activity 的 drawScene 會不斷的執(zhí)行。本例中屏幕上順序以紅,綠,藍色顯示 LINES, LINE_STRIP,LINE_LOOP。

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