第五课 3D空间:

我们使用多边形和四边形创建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[] mQuadsArray = {
// 前
1f, 1f, 1f, // 右上
-1f, 1f, 1f, // 左上
-1f, -1f, 1f, // 左下
1f, -1f, 1f,// 右下
// 右
1f, 1f, -1f, // 右上
1f, 1f, 1f, // 左上
1f, -1f, 1f, // 左下
1f, -1f, -1f,// 右下
// 后
-1f, 1f, -1f, // 右上
1f, 1f, -1f, // 左上
1f, -1f, -1f, // 左下
-1f, -1f, -1f,// 右下
// 左
-1f, 1f, 1f, // 右上
-1f, 1f, -1f, // 左上
-1f, -1f, -1f, // 左下
-1f, -1f, 1f, // 右下
// 顶
1f, 1f, -1f, // 右上
-1f, 1f, -1f, // 左上
-1f, 1f, 1f, // 左下
1f, 1f, 1f, // 右下
// 底
1f, -1f, 1f, // 右上
-1f, -1f, 1f, // 左上
-1f, -1f, -1f, // 左下
1f, -1f, -1f // 右下
}; // 从这里可以看出,我们按照逆时针的方向画图
private FloatBuffer mQuadsBuffer;

立方体的颜色数组来了

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.glRotatef(rquad, 1.0f, -0.8f, 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;

运行结果:

(注:本教程转自其他网页,并加以修改,查看原网页请点击这里

Android OpenGL教程-第五课【转】的更多相关文章

  1. NeHe OpenGL教程 第五课:3D空间

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. Android OpenGL教程-第六课【转】

    第六课 纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 激动的时刻来了,加载图片了. 复习一下android加载图片的知识.放一个png到drawable里面. (图片文件名:ne ...

  3. Android OpenGL教程-第四课【转】

    第四课 旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 我们增加两个变量来控制这两个对象的旋转.这两个变量加在程序的开始处其他变量的后面.它们是浮 ...

  4. Android OpenGL教程-第三课【转】

    第三课 给多边形上色: 作为第二课的扩展,我将叫你如何使用颜色.你将理解两种着色模式,在左图中,三角形用的是光滑着色,四边形用的是平面着色. 这次增加的代码不算多. 增加一个color的buffer ...

  5. Adafruit的树莓派教程第五课:使用控制电缆

    Adafruit的树莓派教程第五课:使用控制电缆 时间 2014-05-09 01:11:20 极客范 原文 http://www.geekfan.net/9095/ 主题 Raspberry PiM ...

  6. Android OpenGL教程-第一课【转】

    第一课 快速的开始一个Android OpenGL项目 首先,读懂我们的教程,需要有android的初步基础,我们这里只是通过android提供的SDK,来进行OpenGL的学习,所以你必须先学习如何 ...

  7. NeHe OpenGL教程 第六课:纹理映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. NeHe OpenGL教程 第二十七课:影子

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. NeHe OpenGL教程 第二十三课:球面映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. js拼接字符串传值,子窗口传值

    避免下次再去查资料,记录一下 1.拼接字符串传值 "UpdateState?ids=" + subStr+"&remark="+reValue) 目标页 ...

  2. value_counts()

    Serise类型: Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True) 功 ...

  3. 点击隐藏显示和点击body空白处隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. nginx负载均衡配合keepalived服务案例实战

    本实验用4台 centos6 虚拟机,2台做负载均衡,2台做web服务器,都先装上nginx lb01:192.168.0.235  --主负载均衡器 lb02:192.168.0.236  --备负 ...

  5. Flask 发布 1.0 稳定版

    简评:现在都开始版本大跃进了吗?对,别看别人,说的就是你 pipenv(名单太长,待补齐...) Flask 其实早就已经十分稳定了,而在第一个 commit 大概 8 年之后,版本号才最终反映出了这 ...

  6. 极光大数据告诉你,程序员们都在"愁"些啥?

    有言道:隔行如隔山.面对不甚熟悉的人群和岗位,我们很容易在固有印象的干扰下,作出一些偏离实际的解读.比如在很多外行人眼中,程序员群体的固有形象是性格木讷,生活方式通常也比较宅.他们最大的爱好就是玩游戏 ...

  7. Flink学习笔记:Operators串烧

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  8. 通过Maven简单搭建SSM框架

    创建Maven就不用多说了,下面直接看Pom.xml里面的依赖吧 <properties> <!-- spring版本号 --> <spring.version>5 ...

  9. Mongo限制规则

    文章翻译自来源:http://docs.mongodb.org/manual/reference/limits/#limit-bson-document-size 一.BSON 文档 1.BSON文档 ...

  10. html5兼容问题

    1.html5对于ie9一下的版本不支持,所以我们可以添加(你可以下载至本地): <!--[if lt IE 9]> <script src="http://cdn.sta ...