|
读过这本书吗?
最近在读
读过
想读
还不熟悉
|
图书城书列:
加入到博客或社交网站:
|
|
我来评论这本书:
内容提要:
本书是OpenGL编程指南,涵盖了使用新版本的OpenGL进行编程所需要的主要知识。
全书分3个部分,共23章,另有3个附录。第一部分包括第1章到第12章,介绍经典OpenGL绘图的所有基础知识,包括3D图形和OpenGL简介,OpenGL空间绘图,几何转换,颜色、材料和光照,纹理贴图,曲线和表面,管线,交互式图形等内容。第二部分包括第13章到第15章,分别介绍了不同操作系统平台上的OpenGL功能特性和编程细节。第三部分是第16章到第23章,着重介绍OpenGL的一些高级功能以及OpenGL 1.5的新特性。附录部分给出了更多阅读建议、术语表和对OpenGL ES的简单介绍。随书光盘中包含了不同操作系统平台下的丰富的示例程序及其源代码。 本书适合于希望精通OpenGL以便对他们的图形编程和3D图形知识进行扩展的程序员,也可以帮助那些经验丰富的OpenGL程序员学习如何移植自己的应用程序。本书既可以作为学习OpenGL的教材,也可以作为随时查阅的参考手册。 编辑推荐:
本书包括以下内容:
?在PC上创建三维物体。 ?在虚拟世界中移动物体或观察者。 ?利用在WINDWOS、MAC OS X和LINUX上实现更快的实时渲染的技巧。 ?利用OPENGL硬件加速。 ?创建交互式三维场景。 ?利用新的OPENGL着色语言和可编程图形硬件。 随书光盘包括: ?所有示例程序的完整源代码。 ?GLUT函数库和用于WINDOWS的RENDERMONKEY。 ?RIGHT HEMISPHERE的DEEP EXPLORATION 演示版本。 ?完整的PDF格式的OPENGL规范。 ?附赠的OPENGL示例程序。 目录:
第一部分 经典OpenGL
第1章 3D图形和OpenGL简介 3 1.1 计算机图形的简单历史回顾 3 1.1.1 进入CRT 3 1.1.2 走向3D 4 1.2 3D效果初探 6 1.2.1 透视(视角) 6 1.2.2 颜色和着色 6 1.2.3 光照和阴影 7 1.2.4 纹理贴图 7 1.2.5 雾 7 1.2.6 混和和透明 8 1.2.7 抗锯齿 8 1.3 3D图形的常见用途 9 1.3.1 实时3D 9 1.3.2 非实时3D 10 1.4 3D编程的基本原则 11 1.4.1 立即模式和保持模式(场景图) 11 1.4.2 坐标系统 11 1.4.3 投影(从3D到2D) 14 1.5 小结 16 第2章 使用OpenGL 17 2.1 什么是OpenGL 17 2.1.1 标准的演化 18 2.1.2 API战争 19 2.2 OpenGL的工作原理 22 2.2.1 泛型实现 22 2.2.2 硬件实现 23 2.2.3 管线 24 2.3 OpenGL是API而不是编程语言 24 2.4 API规范 25 2.4.1 数据类型 25 2.4.2 函数名约定 26 2.5 平台独立性 27 2.5.1 使用GLUT 27 2.5.2 设置编程环境 28 2.5.3 你的第一个程序 28 2.5.4 用OpenGL绘制形状 32 2.6 使用OpenGL和GLUT生成动画 37 2.7 OpenGL状态机 40 2.8 OpenGL错误 41 2.9 确认版本 42 2.10 调用glHint获得线索 42 2.11 使用扩展 42 2.11.1 检查扩展 43 2.11.2 这是谁的扩展 43 2.11.3 在Windows中使用OpenGL 1.1以后的版本 44 2.12 小结 44 2.13 参考 45 第3章 在空间中绘图(几何图元和缓冲区) 55 3.1 在3D中绘制点 55 3.2 设置3D画布 56 3.3 3D空间中的点――顶点 57 3.4 绘制图形 58 3.5 设置点的大小 60 3.6 在3D空间中画直线 62 3.6.1 线带和线环 63 3.6.2 用直线构成近似曲线 64 3.6.3 设置直线的宽度 64 3.6.4 直线点画 66 3.7 在3D空间中绘制三角形 68 3.7.1 三角形――第一种多边形 68 3.7.2 环绕 68 3.7.3 三角形带 69 3.7.4 三角形扇 69 3.8 创建实心物体 70 3.8.1 设置多边形颜色 72 3.8.2 隐藏表面消除 72 3.8.3 剔除:隐藏表面,提高性能 73 3.8.4 多边形模式 75 3.9 其他图元 75 3.9.1 四条边的多边形――四边形 75 3.9.2 通用多边形 76 3.9.3 填充多边形,回顾点画 76 3.9.4 多边形创建规则 79 3.9.5 细分和边界 80 3.10 其他缓冲区技巧 82 3.10.1 使用缓冲区目标 82 3.10.2 操纵深度缓冲区 83 3.10.3 用剪刀进行裁剪 84 3.10.4 使用模版缓冲区 85 3.11 小结 88 3.12 参考 88 第4章 几何转换――管线 100 4.1 本章是不是枯燥的数学课 100 4.2 理解转换 101 4.2.1 视觉坐标 101 4.2.2 视图转换 102 4.2.3 模型转换 102 4.2.4 模型视图二元性 103 4.2.5 投影转换 104 4.2.6 视口转换 104 4.3 矩阵――3D图形的数学基础 105 4.3.1 什么是矩阵 105 4.3.2 转换管线 105 4.3.3 模型视图矩阵 106 4.3.4 单位矩阵 108 4.3.5 矩阵堆栈 109 4.3.6 一个原子例子 110 4.4 使用投影 112 4.4.1 正投影 112 4.4.2 透视投影 113 4.4.3 一个远处缩小的例子 114 4.5 高级矩阵操作 116 4.5.1 载入矩阵 117 4.5.2 自己执行转换 118 4.5.3 把转换放在一起 120 4.6 使用照相机和角色在OpenGL中移动 121 4.6.1 角色帧 121 4.6.2 欧拉角:“卢克!请使用帧” 122 4.6.3 照相机管理 122 4.7 综合应用 123 4.8 小结 127 4.9 参考 128 第5章 颜色、材料和光照基础知识 134 5.1 什么是颜色 134 5.1.1 光的波性 134 5.1.2 光的粒子性 135 5.1.3 人眼作为光子检测器 136 5.1.4 计算机作为光子检测器 136 5.2 PC颜色硬件 137 5.3 PC显示模式 137 5.3.1 屏幕分辨率 138 5.3.2 颜色深度 138 5.4 在OpenGL中使用颜色 139 5.4.1 颜色立方体 139 5.4.2 设置绘图颜色 140 5.4.3 着色 140 5.4.4 设置着色模型 142 5.5 现实世界的颜色 142 5.5.1 环境光 143 5.5.2 散射光 143 5.5.3 镜面光 143 5.5.4 综合考虑 143 5.6 现实世界的材料 144 5.6.1 材料属性 144 5.6.2 向材料添加光照 144 5.6.3 计算环境光效果 144 5.6.4 散射和镜面光效果 145 5.7 向场景添加光照 145 5.7.1 启用光照 145 5.7.2 设置光照模型 146 5.7.3 设置材料属性 146 5.8 使用光源 148 5.8.1 哪种方式最合适 148 5.8.2 表面法线 149 5.8.3 指定法线 149 5.8.4 单位法线 150 5.8.5 寻找法线 151 5.8.6 设置光源 152 5.8.7 设置材料属性 153 5.8.8 指定多边形 153 5.9 光照效果 154 5.9.1 镜面加亮 154 5.9.2 镜面光 154 5.9.3 镜面反射 155 5.9.4 镜面指数 156 5.9.5 法线均衡 157 5.10 综合讨论 158 5.10.1 创建亮点 158 5.10.2 绘制光点 159 5.11 阴影 162 5.11.1 什么是阴影 163 5.11.2 实现压平的代码 163 5.11.3 一个阴影例子 164 5.11.4 重新回顾球体世界 166 5.12 小结 167 5.13 参考 167 第6章 颜色和材料的更多细节 174 6.1 混合 174 6.1.1 组合颜色 174 6.1.2 修改混合方程式 177 6.1.3 抗锯齿 177 6.2 雾 181 6.3 累积缓冲区 183 6.4 其他颜色操作 185 6.4.1 颜色掩码 185 6.4.2 颜色逻辑操作 185 6.4.3 Alpha测试 186 6.4.4 抖动 186 6.5 小结 186 6.6 参考 187 第7章 OpenGL中的图像 191 7.1 位图 191 7.2 像素包装 195 7.3 像素图 196 7.3.1 经过包装的像素格式 198 7.3.2 一个颜色更丰富的例子 198 7.3.3 移动像素 200 7.3.4 保存像素 201 7.4 像素的更多乐趣 203 7.4.1 像素缩放 208 7.4.2 像素转移 208 7.4.3 像素映射 211 7.5 图像“子集” 212 7.6 小结 222 7.7 参考 223 第8章 纹理贴图基础知识 239 8.1 载入纹理 239 8.1.1 使用颜色缓冲区 242 8.1.2 更新纹理 242 8.2 将纹理贴图到几何图形 243 8.3 一个简单的2D例子 244 8.4 纹理环境 249 8.5 纹理参数 250 8.5.1 基本过滤 250 8.5.2 纹理环绕 251 8.5.3 带纹理的卡通 252 8.5.4 Mip贴图 256 8.6 纹理对象 259 8.7 小结 266 8.8 参考 266 第9章 纹理贴图高级知识 279 9.1 第二颜色 279 9.2 各向异性过滤 281 9.3 纹理压缩 282 9.3.1 压缩纹理 283 9.3.2 载入压缩纹理 284 9.4 纹理坐标生成 284 9.4.1 物体线性贴图 289 9.4.2 视觉线性贴图 290 9.4.3 球体贴图 291 9.4.4 立方体贴图 292 9.5 多重纹理 294 9.5.1 多重纹理坐标 295 9.5.2 一个多重纹理例子 295 9.6 纹理组合器 298 9.7 小结 300 9.8 参考 300 第10章 曲线和表面 306 10.1 内部支持的表面 306 10.1.1 设置二次方程状态 307 10.1.2 绘制二次方程图形 308 10.1.3 用二次方程进行建模 311 10.2 Bézier曲线和表面 312 10.2.1 参数方程表示形式 313 10.2.2 求值器 314 10.3 NURBS 321 10.3.1 从Bézier到B样条 321 10.3.2 结点 322 10.3.3 创建NURBS表面 322 10.3.4 NURBS属性 323 10.3.5 定义表面 323 10.3.6 修剪 324 10.3.7 NURBS表面 326 10.4 镶嵌 326 10.4.1 镶嵌器 327 10.4.2 镶嵌器回调函数 327 10.4.3 指定顶点数据 328 10.4.4 综合应用 328 10.5 小结 332 10.6 参考 332 第11章 这就是管线――更快的几何图形渲染 353 11.1 模型装配101 353 11.2 显示列表 363 11.2.1 批处理 363 11.2.2 预批处理 364 11.2.3 使用显示列表的一些注意事项 365 11.2.4 转换到显示列表 365 11.3 测量性能 366 11.4 顶点数组 370 11.4.1 载入几何图形 373 11.4.2 启用数组 374 11.4.3 数据在哪里 374 11.4.4 进行绘图 375 11.4.5 索引顶点数组 376 11.5 小结 385 11.6 参考 385 第12章 交互式图形 395 12.1 选择 395 12.1.1 为图元命名 396 12.1.2 在选择模式下工作 397 12.1.3 选择缓冲区 398 12.1.4 挑选 399 12.1.5 层次式挑选 401 12.1.6 反馈 404 12.1.7 反馈缓冲区 404 12.1.8 反馈数据 405 12.1.9 用户定义标记 405 12.2 一个反馈例子 406 12.2.1 对物体加上标签以便反馈 406 12.2.2 步骤1:选择物体 408 12.2.3 步骤2:从物体获取反馈信息 409 12.3 小结 411 12.4 参考 411 第二部分 OpenGL无处不在 第13章 Windows上的OpenGL Wiggle 417 13.1 Windows上的OpenGL实现 417 13.1.1 泛型OpenGL 418 13.1.2 可安装客户驱动程序(ICD) 418 13.1.3 Mini客户驱动程序(MCD) 418 13.1.4 Mini驱动程序 419 13.1.5 扩展OpenGL 419 13.2 基本的窗口渲染 420 13.2.1 GDI设备环境 420 13.2.2 像素格式 421 13.2.3 OpenGL渲染环境 426 13.3 综合应用 427 13.3.1 创建窗口 427 13.3.2 使用OpenGL渲染环境 430 13.3.3 其他Windows消息 433 13.4 Windows调色板 434 13.4.1 颜色匹配 434 13.4.2 调色板仲裁 435 13.4.3 为OpenGL创建调色板 436 13.4.4 调色板的创建和销毁 439 13.5 OpenGL和Windows字体 440 13.5.1 3D字体和文本 441 13.5.2 2D字体和文本 442 13.6 全屏渲染 444 13.6.1 创建一个无边框窗口 444 13.6.2 创建一个全屏窗口 445 13.7 多线程渲染 447 13.8 OpenGL和WGL扩展 448 13.8.1 简单扩展 448 13.8.2 使用新入口 449 13.8.3 WGL扩展 449 13.9 小结 470 13.10 参考 470 第14章 MacOS X上的OpenGL 482 14.1 基础知识 482 14.1.1 框架 482 14.1.2 使用GLUT API 483 14.2 使用AGL和Carbon API 483 14.2.1 像素格式 483 14.2.2 管理渲染环境 484 14.2.3 执行双缓冲渲染 485 14.2.4 你的第一个AGL程序 485 14.2.5 使用位图字体 494 14.3 使用Cocoa API 504 14.3.1 NSOpenGL类 504 14.3.2 你的第一个Cocoa程序 505 14.4 小结 512 14.5 参考 512 第15章 GLX:Linux上的OpenGL 516 15.1 基础知识 516 15.1.1 使用OpenGL和X11函数库 516 15.1.2 使用GLUT函数库 518 15.1.3 Linux上的OpenGL 518 15.1.4 OpenGL模拟:Mesa 519 15.2 X Window系统的OpenGL扩展 519 15.2.1 X Window系统基础知识 519 15.2.2 选择画面 519 15.2.3 管理OpenGL渲染环境 520 15.2.4 创建OpenGL窗口 521 15.2.5 双缓冲窗口 521 15.2.6 综合应用 521 15.3 为OpenGL创建位图字体 528 15.4 离屏渲染 537 15.4.1 使用GLX Pixmap 537 15.4.2 使用Pbuffer 541 15.5 使用Motif函数库 546 15.5.1 GLwDrawingArea和GLwMDrawingArea 546 15.5.2 回调资源 547 15.5.3 函数 548 15.5.4 综合应用 549 15.6 小结 557 15.7 参考 557 第三部分 下一代OpenGL 第16章 缓冲区对象 565 16.1 顶点数组 566 16.1.1 生成球状微粒云彩 566 16.1.2 启用顶点数组 567 16.1.3 使用更多的球体 568 16.2 迁移到缓冲区对象 569 16.2.1 缓冲区对象管理 570 16.2.2 用缓冲区对象进行渲染 571 16.3 把数据载入到缓冲区对象 571 16.3.1 把数据复制到缓冲区对象 571 16.3.2 直接映射缓冲区对象 572 16.4 补遗 575 16.5 小结 576 16.6 参考 576 第17章 遮挡查询 581 17.1 遮挡查询之前的世界 581 17.2 边框 584 17.3 对查询对象进行查询 587 17.4 小结 589 17.5 参考 589 第18章 深度纹理和阴影 593 18.1 作为光源 前言:
我第一次听说OpenGL是在1992年的San Francisco Win32开发人员会议上,当时Windows NT 3.1还处于早期的Beta版本(或晚期的Alpha)阶段。许多厂商参加了会议,并纷纷表态将对这个激动人心的图形新技术提供支持。在众多厂商之中,有一家叫做SGI(Silicon Graphics,Inc)的公司。SGI公司的代表展示了他们的图形工作站,并播放了一些特效视频演示,这些特效都来自于一些流行的电影。但是,他们到会的主要目的是推广一种新的叫做OpenGL的3D图形标准。它基于SGI专用的IRIS GL,并进行了革新,使之成为一种图形标准。引人注目的是,Microsott也表示要在Windows NT上对OpenGL提供支持。
直到Windows NT 3.5的Beta版本..
|