android OpenGL es lession5

本课程详细介绍了如何使用三角形和四边形在三维空间中创建几何形状,包括将三角形转换为金字塔形状和四边形转换为立方体。通过调整顶点位置和颜色数组,实现不同方向和颜色的几何体绘制,并展示了如何使用OpenGL进行图形渲染。
使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体。

先看看三角形的顶点变成啥了

private float[] mTriangleArray = {
0.0f,1.0f,0.0f,
-1.0f,-1.0f,1.0f,
1.0f,-1.0f,1.0f,

0.0f,1.0f,0.0f,
1.0f,-1.0f,1.0f,
1.0f,-1.0f,-1.0f,

0.0f,1.0f,0.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,

0.0f,1.0f,0.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,1.0f
};

private FloatBuffer mTriangleBuffer;

一个四个面,每个面三个点,地面没画。
你们仔细看看每个面,都是按逆时针方向画的。当然,如果你没有增加Cull剔除代码(上节课最后提到),至于顺时针,逆时针都无所谓,都画。但是我们还是推荐使用按照方向来写的array。

三角形的颜色数组来了

private float[] mColorArray={
1.0f,0.0f,0.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,

1.0f,0.0f,0.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,

1.0f,0.0f,0.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,

1.0f,0.0f,0.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,
};

private FloatBuffer mColorBuffer;

注意,同一个点是同一个颜色。

立方体的颜色数组来了
private float[] mQuadColorArray={
0.0f,1.0f,0.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,
0.0f,1.0f,0.0f,1.0f,

1.0f,0.5f,0.0f,1.0f,
1.0f,0.5f,0.0f,1.0f,
1.0f,0.5f,0.0f,1.0f,
1.0f,0.5f,0.0f,1.0f,

1.0f,0.0f,0.0f,1.0f,
1.0f,0.0f,0.0f,1.0f,
1.0f,0.0f,0.0f,1.0f,
1.0f,0.0f,0.0f,1.0f,

1.0f,1.0f,0.0f,1.0f,
1.0f,1.0f,0.0f,1.0f,
1.0f,1.0f,0.0f,1.0f,
1.0f,1.0f,0.0f,1.0f,

0.0f,0.0f,1.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,
0.0f,0.0f,1.0f,1.0f,

1.0f,0.0f,1.0f,1.0f,
1.0f,0.0f,1.0f,1.0f,
1.0f,0.0f,1.0f,1.0f,
1.0f,0.0f,1.0f,1.0f,
};



private FloatBuffer mQuadColorBuffer;
不要晕,后面有了纹理就好了,不过这是基础,一定要掌握。
画图的代码来了

gl.glTranslatef(-1.5f, 0.0f, -6.0f);
gl.glRotatef(rtri, 0.0f, 1.0f, 0.0f);
//绕Y轴旋转
// gl.glColor4f(1f, 1f, 1f, 1f);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mTriangleBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 12); //四棱锥有4个面,每个面3个点

gl.glLoadIdentity();
gl.glTranslatef(1.5f, 0.0f, -6.0f);
gl.glRotatef(rquad, 1.0f, 0.0f, 0.0f);

gl.glColorPointer(4, GL10.GL_FLOAT, 0, mQuadColorBuffer);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mQuadsBuffer);
//依次画6个面
for (int i=0; i<6; i++){
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, i*4, 4);
}
rtri+=0.2f;
rquad-=0.15f;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值