微信扫一扫,移动浏览光盘

简介

   本书是OpenGL及3D图形编程最好的入门指南,涵盖了使用最新版本的   OpenGL进行编程所需要的主要知识。    全书分3个部分,共22章,另有3个附录。第一部分包括第1章到第14章   ,介绍如何构建一个使用OpenGL的程序,如何设置3D渲染环境,以及如何创   建基本对象和光线并对他们进行着色。然后,深入研究使用OpenGL和它的一   些高级特性及不同的特殊效果。第二部分包括第15章到第18章,分别介绍了   OpenGL中支持可编程硬件[特别是在OpenGL着色语言(GLSL)中]的新特性。第   三部分是第19章到第22章,着重介绍OpenGL是如何支持和连接Windows、Mac   OS X、Linux和掌上设备。附录部分给出了更多阅读建议、术语表和API参考   介绍。    本书适合希望精通OpenGL以便对他们的图形编程和3D图形知识进行扩展   的程序员阅读,也可以帮助那些经验丰富的OpenGL程序员学习如何移植自己   的应用程序。本书既可以作为学习OpenGL的教材,也可以作为随时查阅的参   考手册。   

目录

目 录 第一部分 “旧约”——经典属性 第1章 3D图形和OpenGL的介绍 2 1.1 计算机图形的简单历史回顾 2 1.1.1 进入电子时代 2 1.1.2 走向3D 3 1.2 3D效果初探 5 1.2.1 透视(视角) 5 1.2.2 颜色和着色 6 1.2.3 光照和阴影 6 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.3.3 着色器 11 1.4 3D编程的基本原则 12 1.4.1 立即模式和保持模式 12 1.4.2 坐标系统 12 1.4.3 投影:从3D到2D 15 1.5 总结 17 第2章 使用OpenGL 18 2.1 什么是OpenGL 18 2.1.1 标准的演化 19 2.1.2 API战争 20 2.1.3 OpenGL的未来 20 2.2 OpenGL的工作原理 21 2.2.1 通用实现 21 2.2.2 硬件实现 22 2.2.3 管线 23 2.3 OpenGL是API而不是编程语言 23 2.3.1 标准函数库和头文件 24 2.3.2 头文件自定义 24 2.4 API特定细节 25 2.4.1 数据类型 26 2.4.2 函数名约定 27 2.5 平台独立性 27 2.5.1 使用GLUT 28 2.5.2 第一个程序 28 2.5.3 用OpenGL绘制形状 32 2.6 使用OpenGL和GLUT生成动画 38 2.7 OpenGL状态机 41 2.8 OpenGL错误 42 2.9 确认版本 43 2.10 使用glHint获取线索 43 2.11 使用扩展 44 2.11.1 检查扩展 44 2.11.2 这是谁的扩展 45 2.12 总结 45 第3章 空间绘图:几何图元和缓冲区 46 3.1 在3D中绘制点 46 3.2 设置3D画布 47 3.3 3D空间中的点:顶点 48 3.4 绘制图形 49 3.4.1 画点 49 3.4.2 第一个例子 50 3.5 设置点的大小 52 3.6 在3D空间中画直线 54 3.6.1 线带和线环 55 3.6.2 用直线构成近似曲线 56 3.6.3 设置直线的宽度 57 3.6.4 直线点画 58 3.7 在3D空间中绘制三角形 60 3.7.1 三角形:第一种多边形 60 3.7.2 环绕 61 3.7.3 三角形带 62 3.7.4 三角形扇 62 3.8 创建实心物体 63 3.8.1 设置多边形的颜色 65 3.8.2 隐藏表面消除 65 3.8.3 剔除:隐藏表面,提高性能 67 3.8.4 多边形模式 68 3.9 其他图元 69 3.9.1 四条边的多边形:四边形 69 3.9.2 通用多边形 70 3.9.3 填充多边形,重新讨论点画 70 3.9.4 多边形的创建规则 73 3.9.5 细分和边界 74 3.10 其他缓冲区技巧 76 3.10.1 使用缓冲区目标 76 3.10.2 操纵深度缓冲区 77 3.10.3 用剪刀进行裁剪 77 3.10.4 使用模板缓冲区 78 3.10.5 创建模板图案 80 3.11 总结 82 第4章 几何变换:管线 83 4.1 本章是不是枯燥的数学课 83 4.2 理解变换 84 4.2.1 视觉坐标 84 4.2.2 视图变换 85 4.2.3 模型变换 85 4.2.4 模型视图对偶性 85 4.2.5 投影变换 86 4.2.6 视口变换 87 4.3 矩阵:3D图形的数学基础 87 4.3.1 什么是矩阵 88 4.3.2 变换管线 88 4.3.3 模型视图矩阵 89 4.3.4 单位矩阵 91 4.3.5 矩阵堆栈 93 4.3.6 一个原子例子 94 4.4 使用投影 96 4.4.1 正投影 96 4.4.2 透视投影 97 4.4.3 一个远处缩小的例子 99 4.5 高级矩阵操作 101 4.5.1 加载矩阵 102 4.5.2 自己执行变换 103 4.5.3 变换的叠加 105 4.6 使用照相机和角色在OpenGL中移动 105 4.6.1 角色帧 106 4.6.2 欧拉角:“卢克!请使用帧” 107 4.6.3 照相机管理 107 4.6.4 综合应用 108 4.7 总结 112 第5章 颜色、材料和光照:基础知识 113 5.1 什么是颜色 113 5.1.1 光的波动性 114 5.1.2 光的粒子性 114 5.1.3 人眼作为光子检测器 115 5.1.4 计算机作为光子检测器 116 5.2 PC颜色硬件 116 5.3 PC显示模式 117 5.3.1 屏幕分辨率 117 5.3.2 颜色深度 118 5.4 在OpenGL中使用颜色 118 5.4.1 颜色立方体 118 5.4.2 设置绘图颜色 119 5.4.3 着色 120 5.4.4 设置着色模型 121 5.5 现实世界的颜色 122 5.5.1 环境光 123 5.5.2 散射光 123 5.5.3 镜面光 124 5.5.4 综合考虑 124 5.6 现实世界的材料 124 5.6.1 材料属性 125 5.6.2 向材料添加光照 125 5.6.3 计算环境光效果 125 5.6.4 散射和镜面光效果 126 5.7 向场景添加光照 126 5.7.1 启用光照 126 5.7.2 设置宇宙背景发射光 127 5.7.3 设置材料属性 127 5.8 使用光源 129 5.8.1 哪种方式最合适 129 5.8.2 表面法线 130 5.8.3 指定法线 130 5.8.4 单位法线 132 5.8.5 寻找法线 132 5.8.6 设置光源 133 5.8.7 设置材料属性 135 5.8.8 指定多边形 135 5.9 光照效果 136 5.9.1 镜面亮点 136 5.9.2 镜面光 137 5.9.3 镜面反射 137 5.9.4 镜面指数 138 5.9.5 法线均衡 139 5.10 综合讨论 140 5.10.1 创建聚光灯 141 5.10.2 绘制聚光灯 142 5.11 阴影 145 5.11.1 什么是阴影 146 5.11.2 实现压平的代码 147 5.11.3 一个阴影例子 147 5.11.4 重新回顾球体世界 149 5.12 总结 150 第6章 颜色和材料的更多细节 151 6.1 混合 151 6.1.1 组合颜色 151 6.1.2 修改混合方程式 154 6.1.3 抗锯齿 154 6.1.4 多重采样 157 6.2 应用雾 158 6.2.1 雾方程式 159 6.2.2 雾坐标 160 6.3 累积缓冲区 161 6.4 其他颜色操作 163 6.4.1 颜色掩码 163 6.4.2 颜色逻辑操作 163 6.4.3 alpha测试 163 6.4.4 抖动 164 6.5 总结 164 第7章 OpenGL中的图像 165 7.1 位图 165 7.1.1 一个位图例子 166 7.1.2 设置光栅位置 168 7.2 像素包装 169 7.3 像素图 170 7.3.1 经过包装的像素格式 171 7.3.2 一个颜色更丰富的例子 172 7.3.3 移动像素 174 7.3.4 保存像素 175 7.4 像素的更多乐趣 177 7.4.1 像素缩放 181 7.4.2 像素转移 183 7.4.3 像素映射 185 7.5 图像“子集”和管线 186 7.5.1 颜色矩阵 190 7.5.2 颜色查找 190 7.5.3 代理 192 7.5.4 其他操作 192 7.5.5 卷积 193 7.5.6 最小最大值操作 198 7.6 总结 198 第8章 纹理贴图:基础知识 199 8.1 加载纹理 200 8.1.1 使用颜色缓冲区 202 8.1.2 更新纹理 202 8.1.3 将纹理贴图到几何图形 203 8.1.4 纹理矩阵 205 8.2 一个简单的2D例子 205 8.3 纹理环境 208 8.4 纹理参数 209 8.4.1 基本过滤 209 8.4.2 纹理环绕 211 8.4.3 带纹理的卡通 211 8.4.4 Mip贴图 214 8.5 纹理对象 217 8.6 总结 223 第9章 纹理贴图:高级知识 224 9.1 辅助颜色 224 9.2 各向异性过滤 226 9.3 纹理压缩 227 9.3.1 压缩纹理 228 9.3.2 加载压缩纹理 229 9.4 纹理坐标生成 230 9.4.1 物体线性贴图 232 9.4.2 视觉线性贴图 233 9.4.3 球体贴图 234 9.4.4 立方体贴图 234 9.5 多重纹理 237 9.5.1 多重纹理坐标 238 9.5.2 一个多重纹理例子 239 9.6 纹理组合器 242 9.7 点块纹理 244 9.7.1 使用点 244 9.7.2 纹理应用 245 9.7.3 点参数 245 9.8 总结 246 第10章 曲线和表面 247 10.1 内部支持的表面 247 10.1.1 设置二次方程状态 248 10.1.2 绘制二次方程图形 249 10.1.3 用二次方程进行建模 251 10.2 Bézier曲线和表面 253 10.2.1 参数方程表示形式 253 10.2.2 求值器(evaluator) 255 10.3 NURBS 262 10.3.1 从Bézier到B样条 262 10.3.2 结点 263 10.3.3 创建NURBS表面 263 10.3.4 NURBS属性 264 10.3.5 定义表面 264 10.3.6 修剪 265 10.3.7 NURBS表面 267 10.4 分格化(tessellation) 267 10.4.1 分格器(tessellator) 267 10.4.2 分格器回调函数 268 10.4.3 指定顶点数据 269 10.4.4 综合应用 269 10.5 总结 273 第11章 这就是管线:更快的几何图形渲染 275 11.1 显示列表 275 11.1.1 批处理 276 11.1.2 预批处理 277 11.1.3 使用显示列表的一些注意事项 278 11.1.4 转换到显示列表 278 11.2 顶点数组 279 11.2.1 加载几何图形 281 11.2.2 启用数组 282 11.2.3 数据在哪里 282 11.2.4 用数据绘图 283 11.2.5 索引顶点数组 284 11.3 顶点缓冲区对象 293 11.3.1 管理和使用缓冲区对象 294 11.3.2 回到Thunderbird 295 11.4 总结 297 第12章 交互式图形 298 12.1 选择 298 12.1.1 为图元命名 299 12.1.2 在选择模式下工作 300 12.1.3 选择缓冲区 301 12.1.4 挑选 302 12.1.5 层次式挑选 304 12.2 反馈 307 12.2.1 反馈缓冲区 307 12.2.2 反馈数据 308 12.2.3 用户定义标记 308 12.3 一个反馈例子 309 12.3.1 对物体加上标签以便反馈 309 12.3.2 步骤1:选择物体 311 12.3.3 步骤2:从物体获取反馈信息 312 12.4 总结 314 第13章 遮挡查询:消除不必要的工作 315 13.1 遮挡查询之前的世界 315 13.2 边框 317 13.3 对查询对象进行查询 321 13.4 最佳实践 322 13.5 总结 323 第14章 深度纹理和阴影 324 14.1 作为光源 325 14.1.1 使场景正好占据整个窗口 325 14.1.2 去掉不必要的东西 326 14.2 一种新类型的纹理 326 14.3 首先绘制阴影 327 14.4 然后是光照 328 14.4.1 投影阴影贴图:“为什么” 328 14.4.2 投影阴影贴图:“怎么做” 329 14.4.3 阴影比较 330 14.5 只用两个就够了 333 14.6 关于多边形偏移 334 14.7 总结 334 第二部分 “新约”——新的发展 第15章 可编程管线:这已不是旧式的OpenGL 336 15.1 旧的被淘汰 336 15.1.1 固定的顶点处理 337 15.1.2 固定的片断处理 339 15.2 新的占主导 339 15.2.1 可编程顶点着色器 340 15.2.2 固定功能胶水 341 15.2.3 可编程片断着色器 342 15.3 初窥OpenGL着色语言 343 15.4 管理高层着色器 344 15.4.1 着色器对象 344 15.4.2 程序对象 345 15.5 变量 347 15.5.1 基本类型 347 15.5.2 结构 348 15.5.3 数组 349 15.5.4 限定符 349 15.5.5 内置的变量 350 15.6 表达式 351 15.6.1 操作符 351 15.6.2 数组访问 352 15.6.3 构造函数 352 15.6.4 成分选择 353 15.7 控制流 353 15.7.1 循环 354 15.7.2 if/else 354 15.7.3 discard 354 15.7.4 函数 354 15.8 总结 356 第16章 顶点着色:自行转换、光照和Texgen 357 16.1 初次试验 357 16.2 散射光照 358 16.3 镜面光照 359 16.4 改善镜面光照 360 16.5 基于顶点的雾 362 16.6 基于顶点的点大小 364 16.7 自定义的顶点变换 365 16.8 顶点混合 366 16.9 总结 367 第17章 片断着色器:增强像素处理的威力 368 17.1 颜色转换 368 17.1.1 灰度 368 17.1.2 调棕色 369 17.1.3 反色 370 17.1.4 热信号 370 17.1.5 基于片断的雾 371 17.2 图像处理 372 17.2.1 模糊 372 17.2.2 锐化 373 17.2.3 膨胀和侵蚀 374 17.2.4 边缘检测 375 17.3 光照 376 17.3.1 散射光照 377 17.3.2 多重镜面光照 378 17.4 过程纹理贴图 379 17.4.1 棋盘纹理 380 17.4.2 沙滩球纹理 382 17.4.3 玩具球纹理 384 17.5 总结 386 第18章 高级缓冲区 387 18.1 像素缓冲区对象 387 18.1.1 如何使用PBO 388 18.1.2 PBO的优点 388 18.1.3 实际使用PBO 389 18.1.4 可以使用PBO的命令 391 18.2 帧缓冲区对象 392 18.2.1 如何使用FBO 392 18.2.2 离屏渲染 395 18.2.3 渲染到纹理 396 18.2.4 多个渲染目标 398 18.3 浮点纹理 400 18.3.1 高动态范围 400 18.3.2 OpenEXR文件格式 401 18.3.3 调和映射(tone mapping) 403 18.4 更白、更亮 405 18.4.1 绘制场景 405 18.4.2 亮度渲染 407 18.4.3 借助于高斯模糊 407 18.4.4 把各部分相加 408 18.4.5 再次使用PBO 409 18.5 总结 409 第三部分 “新约外传”——扩展应用 第19章 Wiggle:Windows上的OpenGL 412 19.1 Windows上的OpenGL实现 412 19.1.1 泛型OpenGL 413 19.1.2 可安装客户驱动程序 413 19.1.3 Mini客户驱动程序 413 19.1.4 Mini驱动程序 414 19.1.5 Vista上的OpenGL 414 19.1.6 扩展OpenGL 414 19.2 基本的窗口渲染 415 19.2.1 GDI设备环境 415 19.2.2 像素格式 416 19.2.3 OpenGL渲染环境 421 19.3 综合应用 421 19.3.1 创建窗口 422 19.3.2 使用OpenGL渲染环境 425 19.3.3 其他Windows消息 427 19.4 OpenGL和Windows字体 428 19.4.1 3D字体和文本 429 19.4.2 2D字体和文本 430 19.5 全屏渲染 432 19.5.1 创建一个无边框窗口 432 19.5.2 创建一个全屏窗口 433 19.6 多线程渲染 435 19.7 OpenGL和WGL扩展 436 19.7.1 简单扩展 436 19.7.2 使用新入口 437 19.7.3 自动魔法扩展 437 19.7.4 WGL扩展 438 19.8 总结 441 第20章 Mac OS X上的OpenGL 442 20.1 GLUT 442 20.1.1 创建一个GLUT项目 443 20.1.2 应用程序框架 443 20.1.3 Ditching Cocoa 444 20.2 使用Carbon的OpenGL 444 20.2.1 为OpenGL进行设置 444 20.2.2 设置像素格式 446 20.2.3 位图字体 449 20.3 使用Cocoa的OpenGL 451 20.3.1 创建一个Cocoa程序 451 20.3.2 综合运用 452 20.4 全屏渲染 455 20.4.1 显示管理 455 20.4.2 AGL全屏支持 456 20.5 总结 458 第21章 Linux上的OpenGL 459 21.1 基础知识 459 21.2 安装 460 21.2.1 安装Mesa 460 21.2.2 安装硬件驱动程序 461 21.2.3 其他安装细节 461 21.2.4 安装GLUT 461 21.2.5 生成OpenGL应用程序 461 21.3 GLUT 462 21.4 GLX——处理X Window接口 462 21.4.1 显示和X 463 21.4.2 配置管理和画面 463 21.4.3 窗口和渲染表面 466 21.4.4 环境管理 467 21.4.5 同步 468 21.4.6 GLX字符串 469 21.4.7 其他关于GLX的内容 469 21.5 综合运用 470 21.6 总结 473 第22章 OpenGL ES:嵌入式OpenGL 474 22.1 精简的OpenGL 474 22.1.1 ES指什么 474 22.1.2 历史概述 475 22.2 版本选择 476 22.2.1 ES 1.0 476 22.2.2 ES 1.1 478 22.2.3 ES 2.0 481 22.2.4 ES SC 485 22.3 ES环境 486 22.3.1 应用程序设计的注意事项 486 22.3.2 有限环境的处理 487 22.3.3 定点数学 487 22.4 EGL:新的窗口环境 488 22.4.1 EGL显示 489 22.4.2 创建一个窗口 489 22.4.3 环境管理 492 22.4.4 呈现缓冲区和渲染同步 493 22.4.5 更多EGL相关内容 493 22.5 处理嵌入式环境 494 22.5.1 流行操作系统 494 22.5.2 嵌入式硬件 495 22.5.3 供应商特定扩展 495 22.5.4 个人玩家 495 22.6 实施OpenGL ES 495 22.6.1 设置环境 495 22.6.2 设置OpenGL ES状态 497 22.6.3 渲染 497 22.6.4 清除工作 498 22.7 总结 498 附录A 更多阅读建议 499 附录B 词汇表 501 附录C API参考 504

已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

OpenGL superbible
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    loading icon