新書推薦:
《
不被他人左右:基于阿德勒心理学的无压力工作法
》
售價:NT$
301.0
《
SDGSAT-1卫星热红外影像图集
》
售價:NT$
2030.0
《
股市趋势技术分析(原书第11版)
》
售價:NT$
1010.0
《
汉匈战争全史
》
售價:NT$
454.0
《
恶的哲学研究(社会思想丛书)
》
售價:NT$
500.0
《
不止江湖
》
售價:NT$
449.0
《
天才留步!——从文艺复兴到新艺术运动(一本关于艺术天才的鲜活故事集,聚焦艺术史的高光时刻!)
》
售價:NT$
704.0
《
双城史
》
售價:NT$
505.0
內容簡介:
本书采用自顶向下方法并辅以面向编程的方式,基于现代可编程GPU的WebGL 2.0着色器编程,综合利用HTML5、JavaScript和GLSL(OpenGL ES 3.0),开发可以在各种浏览器中运行的三维图形应用程序,同时系统地介绍了现代计算机图形学的核心概念、原理和方法。本书是作者多年教学与科研的结晶,涵盖了交互式图形编程、可编程GPU绘制流水线、变换与观察、光照与着色、曲线与曲面建模等计算机图形学的基本内容,以及离散技术、层级建模、过程建模、光线跟踪、并行绘制、体绘制和虚拟现实等高级内容。为了方便读者进一步深入学习和研究计算机图形学,本书在每章末尾提供了相关的建议阅读资料。
關於作者:
Edward Angel是新墨西哥大学(UNM)计算机科学的退休教授,并担任过艺术、技术和科学实验室(ARTS Lab)的主任。直到2007年7月,他一直是UNM的计算机科学、电子与计算机工程、媒体艺术教授。Angel于1964年在加州理工大学获得学士学位,并于1968年在南加州大学获得博士学位。他曾任职于加州大学伯克利分校、南加州大学和罗切斯特大学。Angel目前的研究领域是计算机图形学及科学可视化、虚拟现实和大规模并行计算等。张荣华,男,1973年10月出生,中共党员,高级工程师。1996年本科毕业于华北电力大学电子工程系计算机专业。2001年就读于北京理工大学计算机学院VR实验室,研究方向为计算机图形学,虚拟现实(视景仿真),2004年获硕士学位,并获北京理工大学优秀硕士论文。现为华北电力大学计算机系高级工程师,从事计算机图形学、视景仿真和数字孪生方向的教学和科研工作,在国内外重要刊物发表论文20余篇,出版译著、教材和专著5部,参与国家自然科学基金青年基金和河北省自然科学基金青年基金2项,主持省部级重点教改项目2项。
目錄 :
目 录 第1章 图形系统和模型1 1.1 计算机图形学的应用1 1.1.1 信息的显示1 1.1.2 设计2 1.1.3 仿真和动画3 1.1.4 用户界面4 1.2 图形系统5 1.2.1 像素和帧缓存6 1.2.2 CPU与GPU7 1.2.3 输出设备7 1.2.4 输入设备9 1.3 物理图像与合成图像9 1.3.1 对象与观察者9 1.3.2 光和图像10 1.3.3 成像模型11 1.4 成像系统12 1.4.1 针孔照相机13 1.4.2 人类视觉系统14 1.5 虚拟照相机模型14 1.6 应用程序编程接口16 1.6.1 笔式绘图仪模型16 1.6.2 三维API18 1.6.3 使用WebGL API绘制的一系列 图像20 1.6.4 建模-绘制模式22 1.7 图形绘制系统体系结构23 1.7.1 显示处理器23 1.7.2 流水线体系结构24 1.7.3 图形绘制流水线24 1.7.4 顶点处理24 1.7.5 裁剪和图元组装25 1.7.6 光栅化25 1.7.7 片元处理25 1.8 可编程流水线26 1.9 性能特征26 1.10 OpenGL版本和WebGL27 小结和注释28 建议阅读资料29 习题29 第2章 图形学编程31 2.1 Sierpinski镂垫31 2.2 编写二维图形应用程序33 2.3 WebGL应用程序编程接口38 2.3.1 图形函数38 2.3.2 图形绘制流水线和状态机40 2.3.3 OpenGL和WebGL40 2.3.4 WebGL接口41 2.3.5 坐标系42 2.4 图元和属性43 2.4.1 多边形的基本概念45 2.4.2 WebGL中的多边形46 2.4.3 三角剖分47 2.4.4 文本48 2.4.5 顶点属性49 2.5 颜色50 2.5.1 RGB颜色51 2.5.2 查色表53 2.5.3 设置颜色属性54 2.6 观察55 2.6.1 正投影视图55 2.6.2 二维观察56 2.7 控制函数57 2.7.1 HTML canvas元素57 2.7.2 宽高比和视口58 2.7.3 应用程序的执行59 2.8 Sierpinski镂垫绘制程序60 2.8.1 向GPU发送数据62 2.8.2 绘制点数据63 2.8.3 顶点着色器63 2.8.4 片元着色器64 2.8.5 组合各部分代码65 2.8.6 initShaders函数66 2.8.7 init函数67 2.8.8 在应用程序中读取着色器67 2.9 使用多边形和递归68 2.10 三维Sierpinski镂垫69 2.10.1 使用三维点70 2.10.2 使用多边形的三维Sierpinski 镂垫73 2.10.3 隐藏面消除75 小结和注释76 代码示例77 建议阅读资料78 习题78 第3章 交互和动画82 3.1 动画82 3.1.1 旋转的正方形82 3.1.2 显示过程84 3.1.3 双缓存85 3.1.4 使用定时器86 3.1.5 使用requestAnimationFrame 函数86 3.2 交互87 3.3 输入设备88 3.4 物理输入设备88 3.4.1 键码89 3.4.2 鼠标和追踪球89 3.4.3 数据板、触摸板和触摸屏90 3.4.4 多维输入设备91 3.4.5 逻辑设备91 3.4.6 输入模式91 3.4.7 客户端和服务器93 3.5 基于事件驱动输入的编程93 3.5.1 事件和事件监听器93 3.5.2 增加按钮94 3.5.3 菜单95 3.5.4 使用键码96 3.5.5 滑动条97 3.6 位置输入97 3.7 窗口事件99 3.8 手势和触摸100 3.9 拾取101 3.10 交互式建模101 3.11 交互式程序的设计105 小结和注释106 代码示例106 建议阅读资料107 习题107 第4章 几何对象和变换110 4.1 标量、点和向量110 4.1.1 几何对象110 4.1.2 坐标无关的几何112 4.1.3 数学的观点:向量空间和仿射 空间112 4.1.4 计算机科学的观点113 4.1.5 几何ADT114 4.1.6 直线114 4.1.7 仿射加法115 4.1.8 凸性115 4.1.9 点积和叉积116 4.1.10 平面117 4.2 三维图元118 4.3 坐标系和标架120 4.3.1 向量的表示和n元组121 4.3.2 坐标系的变换122 4.3.3 举例:不同基下的表示之间的 变换124 4.3.4 齐次坐标124 4.3.5 举例:标架变换127 4.3.6 使用表示128 4.4 WebGL中的标架129 4.5 矩阵和向量类型133 4.5.1 行主序和列主序矩阵表示134 4.6 建模彩色立方体134 4.6.1 建模立方体的面135 4.6.2 向内和向外的面135 4.6.3 表示对象的数据结构136 4.6.4 彩色立方体137 4.6.5 颜色插值138 4.6.6 显示立方体139 4.6.7 使用元素绘制网格139 4.6.8 图元重启140 4.7 仿射变换141 4.8 平移、旋转和缩放143 4.8.1 平移143 4.8.2 旋转143 4.8.3 缩放145 4.9 变换的齐次坐标表示146 4.9.1 平移146 4.9.2 缩放147 4.9.3 旋转147 4.9.4 错切149 4.10 变换的级联149 4.10.1 不动点在任意位置的旋转150 4.10.2 一般的旋转151 4.10.3 实例变换152 4.10.4 绕任意轴的旋转153 4.11 WebGL中的变换矩阵155 4.11.1 当前变换矩阵155 4.11.2 基本矩阵函数156 4.11.3 旋转、平移和缩放157 4.11.4 绕任意不动点的旋转157 4.11.5 变换的顺序158 4.12 旋转立方体158 4.12.1 uniform矩阵160 4.13 平滑的旋转162 4.13.1 增量式旋转163 4.14 四元数164 4.14.1 复数和四元数164 4.14.2 四元数和旋转165 4.14.3 四元数和万向节死锁166 4.15 三维应用程序的接口167 4.15.1 使用屏幕区域167 4.15.2 虚拟追踪球168 4.15.3 用四元数实现追踪球169 小结和注释171 代码示例171 建议阅读资料171 习题172 第5章 观察174 5.1 经典观察和计算机观察174 5.1.1 经典观察175 5.1.2 正投影176 5.1.3 轴测投影176 5.1.4 斜投影177 5.1.5 透视观察178 5.2 计算机观察179 5.3 定位照相机180 5.3.1 从对象标架到照相机标架180 5.3.2 两个观察API183 5.3.3 lookAt函数186 5.4 平行投影188 5.4.1 正投影188 5.4.2 WebGL中的平行投影189 5.4.3 投影的规范化190 5.4.4 正投影变换矩阵190 5.4.5 斜投影192 5.4.6 交互式观察立方体194 5.5 透视投影196 5.5.1 简单的透视投影196 5.6 WebGL中的透视投影198 5.6.1 透视投影函数199 5.7 透视投影变换矩阵200 5.7.1 透视投影的规范化200 5.7.2 WebGL中的透视投影变换202 5.7.3 透视投影示例程序204 5.8 隐藏面消除204 5.8.1 背面剔除206 5.9 显示网格206 5.9.1 将网格显示为曲面208 5.9.2 多边形偏移210 5.9.3 在场景中漫游211 5.10 投影和阴影211 5.10.1 基于投影的阴影生成211 5.11 阴影贴图215 小结和注释216 代码示例216 建议阅读资料217 习题217 第6章 光照和着色219 6.1 光线和材质219 6.2 光源221 6.2.1 彩色光源222 6.2.2 环境光222 6.2.3 点光源222 6.2.4 聚光灯223 6.2.5 远距离光源224 6.3 Phong光照模型224 6.3.1 环境光反射226 6.3.2 漫反射226 6.3.3 镜面反射227 6.3.4 改进的Phong光照模型229 6.4 计算向量229 6.4.1 法向量230 6.4.2 反射角231 6.5 多边形的着色232 6.5.1 均匀着色233 6.5.2 平滑着色和Gouraud着色234 6.5.3 Phong着色235 6.6 通过递归细分生成近似球面236 6.7 指定光照参数237 6.7.1 光源238 6.7.2 材质239 6.8 实现光照模型239 6.8.1 在WebGL应用程序代码中 应用光照模型239 6.8.2 绘制效率242 6.8.3 在顶点着色器中实现光照 计算243 6.9 球面模型的着色246 6.10 基于每个片元的光照计算248 6.11 非真实感着色249 6.12 全局光照250 小结和注释251 代码示例252 建议阅读资料252 习题253 第7章 纹理映射255 7.1 缓存255 7.2 数字图像256 7.3 映射方法259 7.4 二维纹理映射261 7.5 WebGL中的纹理映射265 7.5.1 纹理对象266 7.5.2 纹理图像数组266 7.5.3 纹理坐标和纹理采样器267 7.5.4 纹理采样271 7.5.5 使用纹理坐标273 7.5.6 三维纹理映射274 7.5.7 多纹理映射279 7.6 环境映射281 7.7 反射映射示例程序285 7.8 凹凸映射288 7.8.1 计算凹凸贴图289 7.8.2 凹凸映射示例程序291 小结和注释295 代码示例295 建议阅读资料296 习题296 第8章 使用帧缓存298 8.1 混合技术298 8.1.1 不透明度与混合298 8.1.2 图像混合299 8.1.3 WebGL中的图像混合299 8.1.4 重温反走样301 8.1.5 从后向前或从前向后绘制 多边形302 8.1.6 场景反走样和多重采样303 8.2 图像处理303 8.2.1 其他多重绘制方法304 8.3 GPGPU305 8.4 帧缓存对象308 8.5 多重绘制技术313 8.5.1 环境光遮蔽313 8.5.2 延迟光照315 8.6 缓存交换316 8.7 拾取317 8.8 阴影贴图321 8.9 投影纹理324 小结和注释326 代码示例326 建议阅读资料327 习题327 第9章 层级建模方法328 9.1 几何图形和实例328 9.2 层9