零、简介

1985 年,我带回家一台崭新闪亮的海军准将 Amiga 1000,大约在它们发布一周后。它配备了巨大的 512K 内存、可编程色彩映射表、摩托罗拉 68K CPU 和现代多任务操作系统,写满了“令人敬畏”的字样。当然是打个比方。我想它可能会成为一个天文学项目的良好平台,因为我现在可以控制那些恒星的颜色,而不是不得不满足于像 Hercules 或 C64 这样的人强加给我的蹩脚的固定调色板。所以我编写了一个 24 行的基本程序来绘制一个随机的星域,关掉灯,心想,“哇!我打赌我能为那东西写一个很酷的天文学程序!”26 年后,我仍在研究它,并希望有一天能搞清楚。那时候,我的梦想设备是一种我可以放入口袋,需要时拿出来,对准天空告诉我正在看什么星星或星座的东西。

这叫智能手机。

我先想到的。

虽然这些东西很适合播放音乐、打电话或向小猪扔小鸟,但当你接触到 3D 东西时,它真的会发光。毕竟,3D 就在我们周围——除非你是一个海盗,并且戴上了眼罩,在这种情况下,你的深度感知将非常有限。啊啊啊。

另外,向人们炫耀 3D 应用很有趣。他们会“明白”事实上,他们将会得到比所有孩子都在谈论的地膜购买指南应用更多的东西。(除非他们在 3D 中展示他们的覆盖物,但那会浪费一个完美的维度。)

因此,3D 应用看起来很有趣,互动起来很有趣,编程起来也很有趣。这让我想到了这本书。我绝不是这方面的专家。真正的大师是那些可以在早餐前击倒几个 NVIDIA 驱动程序,在午餐前击倒 4 维超立方体模拟器,并在晚上的 SyFy 上的 Firefly 马拉松之前将光晕移植到 TokyoFlash 手表的人。我做不到。但我是一个体面的作家,对这个主题有足够的工作知识使我无害,并且知道如何拼写“3D”所以我们在这里。

首先,这本书是为那些想要至少学习一点 3D 语言的有经验的 Android 程序员准备的。至少在下一次游戏程序员的鸡尾酒会上,你也可以和他们中最好的人一起笑四元数笑话。

这本书涵盖了 3D 理论和使用行业标准 OpenGL ES toolkit 实现小型设备的基础知识。虽然 Android 可以支持这两种风格——版本 1.x 用于简单的方式,版本 2.x 用于那些喜欢获得细节的人——但我主要介绍前者,除了在最后一章介绍后者和可编程着色器的使用。

第 1 章沿着漫长而曲折的计算机图形学历史介绍 OpenGL ES。第 2 章是基本 3D 渲染背后的数学,而第 3 章到第 8 章将带你慢慢了解所有图形程序员最终会遇到的各种问题,比如如何投射阴影、渲染多个 OpenGL 屏幕、添加镜头光晕等等。最终这变成了一个简单的(S-I-M-P-L-E!)由太阳、地球和一些恒星组成的太阳系模型——传统的 3D 练习。第 9 章着眼于最佳实践和开发工具,第 10 章作为 OpenGL ES 2 和着色器使用的简要概述。

所以,玩得开心点,给我发一些 M & Ms,当你在玩的时候,可以随意看看我自己的应用:遥远的太阳 3。是的,这就是 1985 年在 Commodore Amiga 1000 上启动的同一应用,它是一个 24 行的 basic 程序,在屏幕上随机画了几百颗星星。

现在更大了。

迈克·史密斯威克