第五课 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. How to use the NFS Client c# Library

    类库下载 I add a wiki page that explains how to use the NFS Client c# .net library in your project. Neko ...

  2. 用Visual Studio 2015 编译张帆的第一个NT式驱动,并且成功安装到Windows XP里面!!!

    开发工具:Visual Studio 2015 企业版 目 标 机:Windows XP X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...

  3. Mysql内置功能《六》流程控制

    一 流程控制 delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THEN SELECT ...

  4. jquery.nav.js定位导航滚动插件

    jQuery.nav.js插件代码: /* * jQuery One Page Nav Plugin * http://github.com/davist11/jQuery-One-Page-Nav ...

  5. 如何构建debian包

        1)安装dh_make如下: sudo apt-get intasll aptitude sudo aptitude install dh_make    2)以jsoncpp为例,说明如何生 ...

  6. VMware安装linux系统报错:已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。

    检测问题所在: 下载LeoMoon CPU-V 检查一下CPU VT-x状态是否启用 地址:http://download.csdn.net/detail/qq_22860341/9858011 如果 ...

  7. 跑monkey前开启/关闭系统通知栏

    @echo off cls title 别忘了跑monkey啊 :menu cls color 0A echo. .禁用systemui并重启 echo. .启用systemui并重启 echo. e ...

  8. 调试K3网页版需要注意的问题

    1.BIN目录下不能存放类名相同的多个文件,即使修改了dll名称也不可以,必须保持唯一性,多余的备份到其他目录 2.引用的标准dll集合需要与当前运行程序的标准dll集合保持一致,可以通过修改引用路径 ...

  9. 自己写的第一个Schema文件

    <Schema name="FinSchema" description="财务模式" measuresCaption="财务模式"& ...

  10. [Ruby]Unzipping a file using rubyzip

    link: http://www.markhneedham.com/blog/2008/10/02/ruby-unzipping-a-file-using-rubyzip/ require 'ruby ...