OpenGL ES系列 之 基本-3:Hello,EGL

 

注:本文中例子针对Windows CE平台编写。

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()方法,值得看一下规范里的说明。

剩下的奥密就全在数组helloVertex里了。其实它的内容已经完全表示的本文开始的那张示意图里了,建议您自己推算一下,以熟悉TRIANGLES建模。这个小小的例子也可以利用GL_TRIANG_STRIP得到很大的优化,感兴趣的可以练习一下。

代码如下:
hellomesh.h

可能注意到里面大量调用了宏Float2Fixed,这是因为OpenGL ES 1.0 Common Lite Profile只支持定点数,不能直接使用浮点坐标。所谓定点数这里指的是16整数部份+16位小数部份的32位数,也就是OpenGL ES预定义的GLfixed类型。 将单精度浮点数转成定点数很简单,直接乘个65536再强制一下类型就行了,这也就是Float2Fixed所做的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值