干货贴:资深图形开发者必备技能及学习资源.docxVIP

干货贴:资深图形开发者必备技能及学习资源.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
干货贴:资深图形开发者必备技能及学习资源 作者:魏明阳1. 什么是 OpenGL ES? OpenGL ES 是一个为便携或嵌入式设备例如:移动电话、PDAs、监视器、等, 发展的 3D 绘图 APIs(应用编程接口)。OpenGL ES 是一个被叫做 Khronos 联 盟的组织创造的一系列 APIs 中的一个。Khronos 联盟成立于 2000 年一月,是 一个专注为手持和嵌入式设备建立开放标准和自由版权的 APIs 的工业联盟。 因为 OpenGL 作为 3D API 的广泛使用,这是很自然的从桌面的 OpenGL 开 始发展为手持设备和便携式开放标准的 3D API;又因为使用 OpenGL ES 的设备 地址空间和内存的限制、低的内存带宽、敏感的电源功耗、缺乏浮点运算硬件, 所以修改它以适用与手持和便携设备领域。工作组对 OpenGL ES 做了下面的一 些定义限制。 OpenGL ES API 是巨大的和复杂的,工作组的目标是建立一个适合设备驱动 程序。为此工作组删除了一些 OpenGL API 的冗余设计,对同一种操作有多种实 现方法,只留下主要的,多余的技术被删除,例如:一个几何体,OpenGL 中可 以使用立即模式、显示列表、顶点矩阵,在 OpenGL ES 中只能使用顶点矩阵, 显示列表和立即模式被移除。 移除冗余是重要的,但保持兼容性也是重要的。尽可能的 OpenGL ES 被设 计成 OpenGL 的嵌入式子集,OpenGL 将也能运行 OpenGL ES 的程序。原因是作 为一个子集能更好的应用桌面程序的代码和工具。所以一般嵌入式设备,或者准 备开发跨平台相关都会用到 OpenGL Es 这个轻量级而不是 OpenGL。 2. 着色器和和可编程管道: OpenGL ES 2.0 包含两部分:OpenGL ES 2.0 API 说明和 OpenGL ES 着色器语 言说明。 Shader 就是我们所说的着色器,着色器对于 OpengGL ES 的来说是很重要的。 因为所有的渲染都是要经过 shader。Shader 其实就是一段执行在 GPU 上的程序, 此程序使用 OpenGL ES SL 语言来编写。它是一个 述顶点或像素特性的简单程序。 在 opengles 中常用的 shader 有两种:vertex shader 和 fragment shader。Geometry Shader(几何着色器)是继 Vertex Shader 和 Fragment Shader 之后。 下图显示 OpenGL ES 2.0 图像管线,图中的着色器盒子 述了 OpenGL ES 2.0 的管道可编程各个阶段。 着色器是 OpenGL ES 2.0 以上 API 核心的基础。每个 OpenGL ES 程序要求 一个顶点着色器和一个片段着色器去渲染一个图形。对着色器来说,使用着色器 渲染有两个基本的对象类型你需要去创建:着色器对象和项目对象。如何理解着 色器对象和项目对象,可以对比 C 语言的编译器和连接器。C 语言编译器可以 从项目源码产生目标码(.obj 或者 .o 文件),然后 C 连接器链接目标码成为 最后的程序。 如下图就是一段简单的可编程的 shader 代码。它类似 c 语言,是需要动态编 译,编译成功后会生成一个正整数,通过 glUseProgram 函数将二进制传递给 GPU 使其按照自己的需求去渲染。所以我们很多时候需要通过修改 shader 得到想要 的渲染效果。一些更高级的操作,例如位移矩阵、计算光照方程、产生贴图坐标 等都是需要修改 shader 来实现的。 如下图是一个可以通过传递 a_mvpMatrix 矩阵变量来进行图形变量。图形的 变化就要设计到矩阵。而 shader 里面可以定义 mat4 类型的矩阵,然后乘以一个 原始定点坐标。如果我们传入的矩阵是一个正价矩阵,那么是不会变化的,相当 于是传递 1。 3. OpenGL ES 基础 API 简介以及绘图: OpenGL ES 单纯是没有那些高级图元,比如正方形,圆等。OpenGL ES 2.0 能 绘制的基元有:三角形、直线、点、三角形。所以复杂的图形,如圆、矩形、不 规则多边形都是通过画三角形来实现的。基元是使用 glDrawArrays 和 glDrawElements 能够绘制的图形。基元是一系列用顶点位置、颜色、贴图坐标等 信息 述的顶点。 glLineWidth(GLfloat width)设置线条基本宽度:opengl 标准没有定义线宽的具体数值,这个是每个 GPU 自己内部定义的,甚至 同一款 GPU 换了显卡驱动后都不一定一样,想跨平台的话,不能依赖于具体某 个 GPU 给出的值,所以宽度一般不能设置太大,实践

文档评论(0)

uCgHGWadUt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档