OpenGL ES学习笔记之三

 OpenGL ES简化了模型描述,取消了通过在 glBegin/glEnd 之间使用大量glVertex之类的调用来逐点描述模型,统一到使用VertexArray。

下面我们就来画一个简单的物体:用三角形拼出的HELLO EGL。该物体的示意图如下:

helloegl vertex layout

照例,先New App:

new app

然后设置一下项目属性:

project properties

共有三处要改的,使得该项目可以利用上如下图所示的库和头文件:
 my lib files

首先是头文件包含目录:
 project include dir

然后是库文件目录:
 project lib dir

最后是OpenGL ES库:
 project egl lib

OK,环境准备好了,可以写代码了。先把我们准备好的OpenGL ES初始化代码加上:
 code skeleton
最后标记出来的那个draw()函数就是实际绘制HELLO EGL的代码了:
 draw code

正如前面提过的,我们只能通过VERTEX_ARRAY批量的将模型顶点坐标发送给OpenGL ES,为此需要先glEnableClientState()以打开相关支持。为了让世界看上去更美好一点,我还用ColorArray给每个顶点指定了颜色。然后通过glVertexPointer/glColorPointer将数据发送出去,再通过glDrawArrays(GL_TRIANGLES)进行绘制。值得一提的是,目前GLES不支持GL_QUADS。 除了调用glDrawArrays(),OpenGL ES还提供了更为灵活的glDrawElements()方法,值得看一下规范里的说明。

  1. #ifndef _HELLO_MESH_
  2. #define _HELLO_MESH_
  3. GLfixed helloVertex[] = {   // HELLO EGL
  4.     // H
  5.     Float2Fixed(0.0f), Float2Fixed(0.0f),  Float2Fixed(0.1f), Float2Fixed(0.0f),  Float2Fixed(0.1f), Float2Fixed(0.7f), 
  6.     Float2Fixed(0.0f), Float2Fixed(0.0f),  Float2Fixed(0.1f), Float2Fixed(0.7f),  Float2Fixed(0.0f), Float2Fixed(0.7f), 
  7.     Float2Fixed(0.1f), Float2Fixed(0.3f),  Float2Fixed(0.3f), Float2Fixed(0.3f),  Float2Fixed(0.3f), Float2Fixed(0.4f), 
  8.     Float2Fixed(0.1f), Float2Fixed(0.3f),  Float2Fixed(0.3f), Float2Fixed(0.4f),  Float2Fixed(0.1f), Float2Fixed(0.4f), 
  9.     Float2Fixed(0.3f), Float2Fixed(0.0f),  Float2Fixed(0.4f), Float2Fixed(0.0f),  Float2Fixed(0.4f), Float2Fixed(0.7f), 
  10.     Float2Fixed(0.3f), Float2Fixed(0.0f),  Float2Fixed(0.4f), Float2Fixed(0.7f),  Float2Fixed(0.3f), Float2Fixed(0.7f), 
  11.     // E
  12.     Float2Fixed(0.5f), Float2Fixed(0.0f),  Float2Fixed(0.6f), Float2Fixed(0.0f),  Float2Fixed(0.6f), Float2Fixed(0.7f), 
  13.     Float2Fixed(0.5f), Float2Fixed(0.0f),  Float2Fixed(0.6f), Float2Fixed(0.7f),  Float2Fixed(0.5f), Float2Fixed(0.7f), 
  14.     Float2Fixed(0.6f), Float2Fixed(0.0f),  Float2Fixed(0.9f), Float2Fixed(0.0f),  Float2Fixed(0.9f), Float2Fixed(0.1f), 
  15.     Float2Fixed(0.6f), Float2Fixed(0.0f),  Float2Fixed(0.9f), Float2Fixed(0.1f),  Float2Fixed(0.6f), Float2Fixed(0.1f), 
  16.     Float2Fixed(0.6f), Float2Fixed(0.3f),  Float2Fixed(0.9f), Float2Fixed(0.3f),  Float2Fixed(0.9f), Float2Fixed(0.4f), 
  17.     Float2Fixed(0.6f), Float2Fixed(0.3f), Float2Fixed(0.9f), Float2Fixed(0.4f),  Float2Fixed(0.6f), Float2Fixed(0.4f), 
  18.     Float2Fixed(0.6f), Float2Fixed(0.6f),  Float2Fixed(0.9f), Float2Fixed(0.6f),  Float2Fixed(0.9f), Float2Fixed(0.7f), 
  19.     Float2Fixed(0.6f), Float2Fixed(0.6f),  Float2Fixed(0.9f), Float2Fixed(0.7f),  Float2Fixed(0.6f), Float2Fixed(0.7f), 
  20.     // L
  21.     Float2Fixed(1.0f), Float2Fixed(0.0f),  Float2Fixed(1.1f), Float2Fixed(0.0f),  Float2Fixed(1.1f), Float2Fixed(0.7f), 
  22.     Float2Fixed(1.0f), Float2Fixed(0.0f),  Float2Fixed(1.1f), Float2Fixed(0.7f),  Float2Fixed(1.0f), Float2Fixed(0.7f), 
  23.     Float2Fixed(1.1f), Float2Fixed(0.0f),  Float2Fixed(1.4f), Float2Fixed(0.0f),  Float2Fixed(1.4f), Float2Fixed(0.1f), 
  24.     Float2Fixed(1.1f), Float2Fixed(0.0f),  Float2Fixed(1.4f), Float2Fixed(0.1f),  Float2Fixed(1.1f), Float2Fixed(0.1f), 
  25.     // L
  26.     Float2Fixed(1.5f), Float2Fixed(0.0f),  Float2Fixed(1.6f), Float2Fixed(0.0f),  Float2Fixed(1.6f), Float2Fixed(0.7f), 
  27.     Float2Fixed(1.5f), Float2Fixed(0.0f),  Float2Fixed(1.6f), Float2Fixed(0.7f),  Float2Fixed(1.5f), Float2Fixed(0.7f), 
  28.     Float2Fixed(1.6f), Float2Fixed(0.0f),  Float2Fixed(1.9f), Float2Fixed(0.0f),  Float2Fixed(1.9f), Float2Fixed(0.1f), 
  29.     Float2Fixed(1.6f), Float2Fixed(0.0f),  Float2Fixed(1.9f), Float2Fixed(0.1f),  Float2Fixed(1.6f), Float2Fixed(0.1f), 
  30.     // O
  31.     Float2Fixed(2.0f), Float2Fixed(0.0f),  Float2Fixed(2.1f), Float2Fixed(0.0f),  Float2Fixed(2.1f), Float2Fixed(0.7f), 
  32.     Float2Fixed(2.0f), Float2Fixed(0.0f),  Float2Fixed(2.1f), Float2Fixed(0.7f),  Float2Fixed(2.0f), Float2Fixed(0.7f), 
  33.     Float2Fixed(2.1f), Float2Fixed(0.0f),  Float2Fixed(2.3f), Float2Fixed(0.0f),  Float2Fixed(2.3f), Float2Fixed(0.1f), 
  34.     Float2Fixed(2.1f), Float2Fixed(0.0f),  Float2Fixed(2.3f), Float2Fixed(0.1f),  Float2Fixed(2.1f), Float2Fixed(0.1f), 
  35.     Float2Fixed(2.1f), Float2Fixed(0.6f),  Float2Fixed(2.3f), Float2Fixed(0.6f),  Float2Fixed(2.3f), Float2Fixed(0.7f), 
  36.     Float2Fixed(2.1f), Float2Fixed(0.6f),  Float2Fixed(2.3f), Float2Fixed(0.7f),  Float2Fixed(2.1f), Float2Fixed(0.7f), 
  37.     Float2Fixed(2.3f), Float2Fixed(0.0f),  Float2Fixed(2.4f), Float2Fixed(0.0f),  Float2Fixed(2.4f), Float2Fixed(0.7f), 
  38.     Float2Fixed(2.3f), Float2Fixed(0.0f),  Float2Fixed(2.4f), Float2Fixed(0.7f),  Float2Fixed(2.3f), Float2Fixed(0.7f), 
  39.     // E
  40.     Float2Fixed(2.5f), Float2Fixed(0.0f),  Float2Fixed(2.6f), Float2Fixed(0.0f),  Float2Fixed(2.6f), Float2Fixed(0.7f), 
  41.     Float2Fixed(2.5f), Float2Fixed(0.0f),  Float2Fixed(2.6f), Float2Fixed(0.7f),  Float2Fixed(2.5f), Float2Fixed(0.7f), 
  42.     Float2Fixed(2.6f), Float2Fixed(0.0f),  Float2Fixed(2.9f), Float2Fixed(0.0f),  Float2Fixed(2.9f), Float2Fixed(0.1f), 
  43.     Float2Fixed(2.6f), Float2Fixed(0.0f),  Float2Fixed(2.9f), Float2Fixed(0.1f),  Float2Fixed(2.6f), Float2Fixed(0.1f), 
  44.     Float2Fixed(2.6f), Float2Fixed(0.3f),  Float2Fixed(2.9f), Float2Fixed(0.3f),  Float2Fixed(2.9f), Float2Fixed(0.4f), 
  45.     Float2Fixed(2.6f), Float2Fixed(0.3f),  Float2Fixed(2.9f), Float2Fixed(0.4f),  Float2Fixed(2.6f), Float2Fixed(0.4f), 
  46.     Float2Fixed(2.6f), Float2Fixed(0.6f),  Float2Fixed(2.9f), Float2Fixed(0.6f),  Float2Fixed(2.9f), Float2Fixed(0.7f), 
  47.     Float2Fixed(2.6f), Float2Fixed(0.6f),  Float2Fixed(2.9f), Float2Fixed(0.7f),  Float2Fixed(2.6f), Float2Fixed(0.7f), 
  48.     // G
  49.     Float2Fixed(3.1f), Float2Fixed(0.6f),  Float2Fixed(3.4f), Float2Fixed(0.6f),  Float2Fixed(3.4f), Float2Fixed(0.7f), 
  50.     Float2Fixed(3.1f), Float2Fixed(0.6f),  Float2Fixed(3.4f), Float2Fixed(0.7f),  Float2Fixed(3.1f), Float2Fixed(0.7f), 
  51.     Float2Fixed(3.0f), Float2Fixed(0.0f),  Float2Fixed(3.1f), Float2Fixed(0.0f),  Float2Fixed(3.1f), Float2Fixed(0.7f), 
  52.     Float2Fixed(3.0f), Float2Fixed(0.0f),  Float2Fixed(3.1f), Float2Fixed(0.7f),  Float2Fixed(3.0f), Float2Fixed(0.7f), 
  53.     Float2Fixed(3.1f), Float2Fixed(0.0f),  Float2Fixed(3.4f), Float2Fixed(0.0f),  Float2Fixed(3.4f), Float2Fixed(0.1f), 
  54.     Float2Fixed(3.1f), Float2Fixed(0.0f),  Float2Fixed(3.4f), Float2Fixed(0.1f),  Float2Fixed(3.1f), Float2Fixed(0.1f), 
  55.     Float2Fixed(3.3f), Float2Fixed(0.1f),  Float2Fixed(3.4f), Float2Fixed(0.1f),  Float2Fixed(3.4f), Float2Fixed(0.3f), 
  56.     Float2Fixed(3.3f), Float2Fixed(0.1f),  Float2Fixed(3.4f), Float2Fixed(0.3f),  Float2Fixed(3.3f), Float2Fixed(0.3f), 
  57.     Float2Fixed(3.25f), Float2Fixed(0.3f),  Float2Fixed(3.45f), Float2Fixed(0.3f),  Float2Fixed(3.45f), Float2Fixed(0.4f), 
  58.     Float2Fixed(3.25f), Float2Fixed(0.3f),  Float2Fixed(3.45f), Float2Fixed(0.4f),  Float2Fixed(3.25f), Float2Fixed(0.4f), 
  59.     // L
  60.     Float2Fixed(3.5f), Float2Fixed(0.0f),  Float2Fixed(3.6f), Float2Fixed(0.0f),  Float2Fixed(3.6f), Float2Fixed(0.7f), 
  61.     Float2Fixed(3.5f), Float2Fixed(0.0f),  Float2Fixed(3.6f), Float2Fixed(0.7f),  Float2Fixed(3.5f), Float2Fixed(0.7f), 
  62.     Float2Fixed(3.6f), Float2Fixed(0.0f),  Float2Fixed(3.9f), Float2Fixed(0.0f),  Float2Fixed(3.9f), Float2Fixed(0.1f), 
  63.     Float2Fixed(3.6f), Float2Fixed(0.0f),  Float2Fixed(3.9f), Float2Fixed(0.1f),  Float2Fixed(3.6f), Float2Fixed(0.1f)
  64. };
  65. #define RED   Float2Fixed(1.0f) , Float2Fixed(0.0f) , Float2Fixed(0.0f) , Float2Fixed(1.0f) 
  66. #define GREEN Float2Fixed(0.0f) , Float2Fixed(1.0f) , Float2Fixed(0.0f) , Float2Fixed(1.0f) 
  67. #define BLUE  Float2Fixed(0.0f) , Float2Fixed(0.0f) , Float2Fixed(1.0f) , Float2Fixed(1.0f) 
  68. float helloColor[] = {  // HELLO EGL
  69.     // H
  70.     // 0.0,0.0, 0.1,0.0, 0.1,0.7,
  71.     RED,          GREEN,       BLUE,
  72.     // 0.0,0.0, 0.1,0.7, 0.0,0.7,
  73.     RED,          GREEN,       BLUE,
  74.     // 0.1,0.3, 0.3,0.3, 0.3,0.4,
  75.     RED,          GREEN,       BLUE,
  76.     // 0.1,0.3, 0.3,0.4, 0.1,0.4,
  77.     RED,          GREEN,       BLUE,
  78.     // 0.3,0.0, 0.4,0.0, 0.4,0.7,
  79.     RED,          GREEN,       BLUE,
  80.     // 0.3,0.0, 0.4,0.7, 0.3,0.7,
  81.     RED,          GREEN,       BLUE,
  82.     // E
  83.     //0.5,0.0, 0.6,0.0, 0.6,0.7,
  84.     RED,          GREEN,       BLUE,
  85.     //0.5,0.0, 0.6,0.7, 0.5,0.7,
  86.     RED,          GREEN,       BLUE,
  87.     //0.6,0.0, 0.9,0.0, 0.9,0.1,
  88.     RED,          GREEN,       BLUE,
  89.     //0.6,0.0, 0.9,0.1, 0.6,0.1,
  90.     RED,          GREEN,       BLUE,
  91.     //0.6,0.3, 0.9,0.3, 0.9,0.4,
  92.     RED,          GREEN,       BLUE,
  93.     //0.6,0.3, 0.9,0.4, 0.6,0.4,
  94.     RED,          GREEN,       BLUE,
  95.     //0.6,0.6, 0.9,0.6, 0.9,0.7,
  96.     RED,          GREEN,       BLUE,
  97.     //0.6,0.6, 0.9,0.7, 0.6,0.7,
  98.     RED,          GREEN,       BLUE,
  99.     // L
  100.     //1.0,0.0, 1.1,0.0, 1.1,0.7,
  101.     RED,          GREEN,       BLUE,
  102.     //1.0,0.0, 1.1,0.7, 1.0,0.7,
  103.     RED,          GREEN,       BLUE,
  104.     RED,          GREEN,       BLUE,
  105.     //1.1,0.0, 1.4,0.0, 1.4,0.1,
  106.     RED,          GREEN,       BLUE,
  107.     //1.1,0.0, 1.4,0.1, 1.1,0.1,
  108.     // L
  109.     //1.5,0.0, 1.6,0.0, 1.6,0.7,
  110.     RED,          GREEN,       BLUE,
  111.     //1.5,0.0, 1.6,0.7, 1.5,0.7,
  112.     RED,          GREEN,       BLUE,
  113.     //1.6,0.0, 1.9,0.0, 1.9,0.1,
  114.     RED,          GREEN,       BLUE,
  115.     //1.6,0.0, 1.9,0.1, 1.6,0.1,
  116.     RED,          GREEN,       BLUE,
  117.     // O
  118.     //2.0,0.0, 2.1,0.0, 2.1,0.7,
  119.     RED,          GREEN,       BLUE,
  120.     //2.0,0.0, 2.1,0.7, 2.0,0.7,
  121.     RED,          GREEN,       BLUE,
  122.     //2.1,0.0, 2.3,0.0, 2.3,0.1,
  123.     RED,          GREEN,       BLUE,
  124.     //2.1,0.0, 2.3,0.1, 2.1,0.1,
  125.     RED,          GREEN,       BLUE,
  126.     //2.1,0.6, 2.3,0.6, 2.3,0.7,
  127.     RED,          GREEN,       BLUE,
  128.     //2.1,0.6, 2.3,0.7, 2.1,0.7,
  129.     RED,          GREEN,       BLUE,
  130.     //2.3,0.0, 2.4,0.0, 2.4,0.7,
  131.     RED,          GREEN,       BLUE,
  132.     //2.3,0.0, 2.4,0.7, 2.3,0.7,
  133.     RED,          GREEN,       BLUE,
  134.     // E
  135.     //2.5,0.0, 2.6,0.0, 2.6,0.7,
  136.     RED,          GREEN,       BLUE,
  137.     //2.5,0.0, 2.6,0.7, 2.5,0.7,
  138.     RED,          GREEN,       BLUE,
  139.     //2.6,0.0, 2.9,0.0, 2.9,0.1,
  140.     RED,          GREEN,       BLUE,
  141.     //2.6,0.0, 2.9,0.1, 2.6,0.1,
  142.     RED,          GREEN,       BLUE,
  143.     //2.6,0.3, 2.9,0.3, 2.9,0.4,
  144.     RED,          GREEN,       BLUE,
  145.     //2.6,0.3, 2.9,0.4, 2.6,0.4,
  146.     RED,          GREEN,       BLUE,
  147.     //2.6,0.6, 2.9,0.6, 2.9,0.7,
  148.     RED,          GREEN,       BLUE,
  149.     //2.6,0.6, 2.9,0.7, 2.6,0.7,
  150.     RED,          GREEN,       BLUE,
  151.     // G
  152.     //3.1,0.6, 3.4,0.6, 3.4,0.7,
  153.     RED,          GREEN,       BLUE,
  154.     //3.1,0.6, 3.4,0.7, 3.1,0.7,
  155.     RED,          GREEN,       BLUE,
  156.     //3.0,0.0, 3.1,0.0, 3.1,0.7,
  157.     RED,          GREEN,       BLUE,
  158.     //3.0,0.0, 3.1,0.7, 3.0,0.7,
  159.     RED,          GREEN,       BLUE,
  160.     //3.1,0.0, 3.4,0.0, 3.4,0.1,
  161.     RED,          GREEN,       BLUE,
  162.     //3.1,0.0, 3.4,0.1, 3.1,0.1,
  163.     RED,          GREEN,       BLUE,
  164.     //3.3,0.1, 3.4,0.1, 3.4,0.3
  165.     RED,          GREEN,       BLUE,
  166.     //3.3,0.1, 3.4,0.3, 3.3,0.3
  167.     RED,          GREEN,       BLUE,
  168.     //3.25,0.3, 3.45,0.3, 3.45,0.4,
  169.     RED,          GREEN,       BLUE,
  170.     //3.25,0.3, 3.45,0.4, 3.25,0.4,
  171.     RED,          GREEN,       BLUE,
  172.     // L
  173.     //3.5,0.0, 3.6,0.0, 3.6,0.7,
  174.     RED,          GREEN,       BLUE,
  175.     //3.5,0.0, 3.6,0.7, 3.5,0.7,
  176.     RED,          GREEN,       BLUE,
  177.     //3.6,0.0, 3.9,0.0, 3.9,0.1,
  178.     RED,          GREEN,       BLUE,
  179.     //3.6,0.0, 3.9,0.1, 3.6,0.1
  180.     RED,          GREEN,       BLUE
  181. };
  182. #endif // _HELLO_MESH_
  183.      
可能注意到里面大量调用了宏Float2Fixed,这是因为OpenGL ES 1.0 Common Lite Profile只支持定点数,不能直接使用浮点坐标。所谓定点数这里指的是16整数部份+16位小数部份的32位数,也就是OpenGL ES预定义的GLfixed类型。 将单精度浮点数转成定点数很简单,直接乘个65536再强制一下类型就行了,这也就是Float2Fixed所做的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值