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

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

繪制一個(gè)球體

OpenGL ES 只能通過(guò)繪制三角形來(lái)構(gòu)造幾何圖形,比如前面繪制的 20 面體 Android OpenGL ES 開(kāi)發(fā)教程(12):繪制一個(gè) 20 面體,通過(guò)增加正多面體的邊數(shù),就可以構(gòu)造出一個(gè)球體:

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

在項(xiàng)目中創(chuàng)建一個(gè) Sphere 類,它的 Draw 方法,通過(guò)繪制三角形來(lái)構(gòu)造球體,并且為其添加法線,法線主要用于光照效果,將在后面介紹。

public void draw(GL10 gl) {
 float    theta, pai;
 float    co, si;
 float    r1, r2;
 float    h1, h2;
 float    step = 2.0f;
 float[][] v = new float[32][3];
 ByteBuffer vbb;
 FloatBuffer vBuf;
 vbb = ByteBuffer.allocateDirect(v.length \* v[0].length \* 4);
 vbb.order(ByteOrder.nativeOrder());
 vBuf = vbb.asFloatBuffer();
 gl.glEnableClientState(GL10.GL\_VERTEX\_ARRAY);
 gl.glEnableClientState(GL10.GL\_NORMAL\_ARRAY);
 for (pai = -90.0f; pai < 90.0f; pai += step) {
 int    n = 0;
 r1 = (float)Math.cos(pai \* Math.PI / 180.0);
 r2 = (float)Math.cos((pai + step) \* Math.PI / 180.0);
 h1 = (float)Math.sin(pai \* Math.PI / 180.0);
 h2 = (float)Math.sin((pai + step) \* Math.PI / 180.0);
 for (theta = 0.0f; theta <= 360.0f; theta += step) {
 co = (float)Math.cos(theta \* Math.PI / 180.0);
 si = -(float)Math.sin(theta \* Math.PI / 180.0);
 v[n][0] = (r2 \* co);
 v[n][1] = (h2);
 v[n][2] = (r2 \* si);
 v[n + 1][0] = (r1 \* co);
 v[n + 1][1] = (h1);
 v[n + 1][2] = (r1 \* si);
 vBuf.put(v[n]);
 vBuf.put(v[n + 1]);
 n += 2;
 if(n>31){
 vBuf.position(0);
 gl.glVertexPointer(3, GL10.GL\_FLOAT, 0, vBuf);
 gl.glNormalPointer(GL10.GL\_FLOAT, 0, vBuf);
 gl.glDrawArrays(GL10.GL\_TRIANGLE\_STRIP, 0, n);
 n = 0;
 theta -= step;
 }
 }
 vBuf.position(0);
 gl.glVertexPointer(3, GL10.GL\_FLOAT, 0, vBuf);
 gl.glNormalPointer(GL10.GL\_FLOAT, 0, vBuf);
 gl.glDrawArrays(GL10.GL\_TRIANGLE\_STRIP, 0, n);
 }
 gl.glDisableClientState(GL10.GL\_VERTEX\_ARRAY);
 gl.glDisableClientState(GL10.GL\_NORMAL\_ARRAY);
}  

有了 Sphere 類,創(chuàng)建一個(gè) DrawSphere Activity 來(lái)繪制球體,為了能看出 3D 效果,給場(chǎng)景中添加光源(后面介紹)

public void DrawScene(GL10 gl) {
 super.DrawScene(gl);
 initScene(gl);
 sphere.draw(gl);
}  

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

本例下載

上一篇:Depth Buffer下一篇:Viewport 變換