当前: 首页 - 图书专区 - OpenGL编程指南(原书第9版)
OpenGL编程指南(原书第9版)


  在线购买
[美]约翰?克赛尼希(John Kessenich),格雷厄姆?塞勒斯(Graham Sellers),戴夫?施莱尔(Dave Shreiner)著
978-7-111-57511-5
139.00
680
2017年08月03日
王锐 等译
计算机 > 数码/设计 > 数字图像处理
Pearson Education Inc.
345
简体中文
16
OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.5 with SPIR-V
店面
华章程序员书库








24位并行技术专家联袂编写,分享业界前沿的OpenACC开发策略和实践经验
以性能为导向,从标准解析、性能优化到程序移植,满足未来的并行和扩展需求

性能至上!OpenACC是为未来的高度并行而设计的,在现有代码中增加指令比用一门新语言重写代码简单得多。本书将帮助你精巧地设计各类应用,充分释放程序性能,不仅从当下的并行系统中受益,而且在之后的几十年中都将持续受益。
—— Michael Wolfe,OpenACC技术委员会主席

过去十年,伴随着异构系统的突飞猛进,众多科研团队都开始在大型超级计算机上编写程序,而OpenACC正是实现加速的首选开放编程标准。本书包含丰富的OpenACC开发策略和实践经验,对于广大程序员而言极富参考价值。
—— Jeffrey S. Vetter,橡树岭国家实验室

本书特色
透彻讲解OpenACC的工作原理,逐步进阶编写可解决实际问题的高性能且可移植的程序。
轻松掌握利用GPU实现程序加速的方法,包含分子动力学和天气建模等不同领域的实例。
免费下载源代码和PPT:github.com/rmfarber/ParallelProgrammingWithOpenACC。

作者简介











TechEnablement.com的创始人和CEO,担任美国国家实验室等机构的高性能编程顾问,并为多家《财富》世界500强企业提供咨询服务,是该领域中的权威专家。此外,他还是一位技术作家,在《Dr. Dobb's Journal》《Scientific Computing》等期刊上发表过多篇广获好评的经典文章。

内容简介
本书由高性能技术专家Rob Farber领衔编著,24位来自世界各地的业界翘楚分享了他们的一线经验。你不仅能够从中学到OpenACC的基础知识和编程技巧,还能够通过多领域的应用案例快速掌握实战方法。其中涉及PGI和Cray等编译器的使用,以及在多核CPU和GPU等设备上的运行和性能分析。此外,本书网站上还提供了大量实用代码,涵盖科学、商业、大数据和实时系统等热门领域。
OpenGL图形系统是图形硬件的一种软件接口(GL表示Graphics Library,即图形库)。它使得用户可以创建交互式的程序以产生运动的三维对象的颜色图像。通过OpenGL,我们可以使用计算机图形学技术产生逼真的图像,或者通过一些虚构的方式产生虚拟的图像。这本指南将告诉你如何使用OpenGL图形系统进行编程,得到你所期望的视觉效果。
本书的主要内容
本书中包含以下章节:
第1章对OpenGL可以完成的工作进行了概览。它还提供了一个简单的OpenGL程序并解释了一些本质性的编程细节,它们可能会用于后续的章节中。
第2章讨论了OpenGL中最主要的特性—着色语言和SPIR-V,并介绍了它们在应用程序中的初始化和使用方法。
第3章介绍了使用OpenGL进行几何体绘制的各种方法,以及一些可以让渲染更为高效的优化手段。
第4章解释了OpenGL对于颜色的处理过程,包括像素的处理、缓存的管理,以及像素处理相关的渲染技术。
第5章给出了将三维场景表现在一个二维计算机屏幕上的操作细节,包括各种几何投影类型的数学原理和着色器操作。
第6章讨论了将几何模型与图像结合来创建真实的、高质量的三维模型的方法。
第7章介绍了计算机图形的光照效果模拟方法,主要是这类方法在可编程着色器中的实现。
第8章介绍了使用可编程着色器生成纹理和其他表面效果的方法细节,从而增强真实感和其他的渲染特效。
第9章解释了OpenGL管理和细分几何表面的着色器功能。
第10章介绍了在OpenGL渲染流水线中使用着色器进行几何体图元修改的一种特殊技术。
第11章介绍了使用OpenGL帧缓存和缓存内存实现高级渲染技术和非图形学应用的相关方法。
第12章介绍了最新的着色器阶段,将通用计算的方法融合到OpenGL的渲染管线当中。
此外,我们也提供了一系列作为参考的附录内容。
附录A介绍了本书示例程序中用到的一些第三方支持库。GLFW是可移植的,它可以用来实现更简短也更加可读的代码示例。而GL3W负责处理应用程序与OpenGL函数之间的绑定关系。
附录B介绍了OpenGL体系中的其他API,包括用于嵌入式和移动平台系统的OpenGL ES,以及用于Web浏览器内的交互式3D应用程序的WebGL。
附录C提供了有关OpenGL着色语言的详细参考文档。
附录D列出了OpenGL维护的所有状态变量,并介绍了获取其值的方法。
附录E介绍了矩阵变换相关的一些数学方法。
附录F对于OpenGL中所用到的浮点数格式做出了概述。
附录G介绍了OpenGL中最新的调试特性。
附录H给出了有关uniform缓存的使用的参考文档,其中使用了OpenGL定义的标准内存布局。
本版中的新特性
本版《OpenGL编程指南》已经针对最新的OpenGL 4.5进行了修订和更新。我们知道上一版是对以前版本的《OpenGL编程指南》内容的一次颠覆,而这一版则是在此基础上进行了校对,修订了错误,重写了一些内容以便让读者更加愉悦地阅读。从程序开发的角度来说,OpenGL 4.5版本所带来的最重大的特性变更就是直接状态访问(direct state access),这是对OpenGL程序开发模型和对象访问机制的一次重大革新。此外,我们也继续尝试将越来越多的功能移植到图形处理器硬件中,因此本书将着重于对着色器功能和GPU处理机制的讲解。
需要在阅读本书之前掌握的知识
本书假设你已经了解了使用C++语言进行编程的方法(我们将使用少量的C++程序,如果你对C语言已经比较熟悉的话,应该会比较容易理解它们),并且具有一定的数学背景(几何、三角学、线性代数、微积分以及微分几何)。即使对计算机图形学技术没有太多的经验或者一无所知,你也可以学习和理解本书中讨论的大部分内容。当然,计算机图形学是一个不断延展的学科,因此你也许还需要阅读以下补充内容来丰富自己的知识。
《Computer Graphics: Principles and Practice》第3版,John F. Hughes、Andries van Dam、Morgan McGuire、David F. Sklar、James D. Foley、Steven K. Feiner和Kurt Akeley著(Addison-Wesley,2013年出版):这本书是有关计算机图形学的一本百科全书,它包含了大量有价值的信息,不过在阅读之前,你最好已经对这门学科有了一定的了解。
《OpenGL SuperBible: Comprehensive Tutorial and Reference》第7版,Graham Sellers、Richard S. Wright Jr.、Nicolas Haemel著(Addison-Wesley,2015年出版):这本书采用教程的形式编写,即使是对计算机图形学一无所知的读者也可以从这本循循善诱的指导书中开始学习OpenGL。
《OpenGL Insights》,Patrick Cozzi和Christophe Riccio著(A. K. Peters,2012年出版):这是一本有关OpenGL高级技巧的论文集,包括一些资深开发者、研究者以及一线工作者的感悟。每篇文章都会专注于某一个特定的技术领域,而这本书也会成为从事相关行业的读者的极佳的灵感来源。
另一个可以有组织地进行系统学习的地方就是OpenGL网站。该网站包含软件、示例程序、文档、FAQ、讨论版以及新闻页面。如果想要搜索OpenGL相关问题的答案,那么这里是一个好的开始:
http://www.opengl.org/
此外,OpenGL的官方网站中还包含了OpenGL的最新版本对应的所有函数和着色语言语法的完整文档。这些网页内容完整地涵盖了《OpenGL Reference Manual》的内容,该书由OpenGL Architecture Review Board和Addison-Wesley出版。
OpenGL是一个与硬件密切相关的编程接口标准,我们可能会在某一类特定的硬件上使用一个特定的OpenGL实现。本书将会介绍如何使用任意的OpenGL实现进行开发。但是,因为这些实现之间会存在细微的差异(包括性能上的差异,以及额外的特性支持),你可能需要阅读自己所用的特定设备实现所对应的补充文档。此外,某个特定实现的供应商网站上,也可能也会提供一些OpenGL相关的功能、工具包、编程和调试支持、窗口组件、示例代码以及演示程序。
如何获取示例代码
本书中包含很多示例程序,它们演示了特定OpenGL编程技术的用法。本书的读者群体在计算机图形学和OpenGL方面可能有着巨大的经验差异,有的人是新手,而有的人是多年的老手,因此这些章节里给出的示例都会使用最简单的方法去实现一个特定的渲染形式,并且全部使用OpenGL 4.5版本的接口。这么做主要是为了确保那些刚开始学习OpenGL的读者也能够顺利地阅读相关的内容。对于那些已经有了足够的经验,只是希望了解最新的API特性实现的读者,我们首先感谢你能够耐心阅读本书前面的内容,之后你可以访问我们的网站:
http://www.opengl-redbook.com/
在这里你会找到本书中所有示例的源代码,它们均使用最新的特性进行实现,而后文的讨论中也会涉及从一个OpenGL版本移植到另一个版本所需的修改。
本书中的所有程序都使用了GLFW工具库,它最初的作者是Marcus GeeInard,现在由Camilla Berglund维护。GLFW是一个持续在进行改进的开源项目,你可以在下面的地址里找到GLFW的项目页面:
http://www.glfw.org/
你可以在这个网站中找到相应的代码和二进制程序。
本书第1章和附录A中介绍了更多有关GLFW库的信息。我们可以在OpenGL网站的资源页面找到更多帮助你学习和使用OpenGL与GLFW的资源:
http://www.opengl.org/resources/
OpenGL的很多实现也包含了一些系统相关的代码实例。这些源代码可能是你实现程序时最好的资源,因为它们已经针对系统进行了优化。你可以阅读与自己的系统相关的OpenGL文档来了解如何获取这些代码实例。
勘误
即使在本书的出版期间,OpenGL也是不断更新的:有一些错误被修正,并且标准文档中也做出了澄清,同时还有新的标准被发布。我们将在网站http://www.opengl-redbook.com/上维护一个错误和更新列表,同时我们也会提供一些功能让用户提交自己发现的错误。如果你发现了本书的错误,我们首先向你郑重道歉,并且非常感谢你的报告。我们将尽快对其进行更正。
推荐语
译者序
前 言
致 谢
第1章 OpenGL概述 1
1.1 什么是OpenGL 1
1.2 初识OpenGL程序 2
1.3 OpenGL语法 6
1.4 OpenGL渲染管线 7
1.4.1 准备向OpenGL传输数据 8
1.4.2 将数据传输到OpenGL 8
1.4.3 顶点着色 9
1.4.4 细分着色 9
1.4.5 几何着色 9
1.4.6 图元装配 9
1.4.7 剪切 9
1.4.8 光栅化 9
1.4.9 片元着色 10
1.4.10 逐片元的操作 10
1.5 第一个程序:深入分析 11
1.5.1 进入main()函数 11
1.5.2 OpenGL的初始化过程 12
1.5.3 第一次使用OpenGL进行渲染 21
第2章 着色器基础 24
2.1 着色器与OpenGL 25
2.2 OpenGL的可编程管线 25
2.3 OpenGL着色语言概述 27
2.3.1 使用GLSL构建着色器 27
2.3.2 存储限制符 33
2.3.3 语句 36
2.3.4 计算的不变性 40
2.3.5 着色器的预处理器 42
2.3.6 编译器的控制 44
2.3.7 全局着色器编译选项 44
2.4 数据块接口 45
2.4.1 uniform块 45
2.4.2 指定着色器中的uniform块 46
2.4.3 从应用程序中访问uniform块 47
2.4.4 buffer块 53
2.4.5 in/out块、位置和分量 53
2.5 着色器的编译 54
2.6 着色器子程序 59
2.6.1 GLSL的子程序设置 59
2.6.2 选择着色器子程序 60
2.7 独立的着色器对象 62
2.8 SPIR-V 64
2.8.1 选择SPIR-V的理由 64
2.8.2 SPIR-V与OpenGL 66
2.8.3 使用GLSL在OpenGL中生成SPIR-V 67
2.8.4 Glslang 69
2.8.5 SPIR-V中包含了什么 69
第3章 OpenGL绘制方式 70
3.1 OpenGL图元 70
3.1.1 点 71
3.1.2 线、条带与循环线 72
3.1.3 三角形、条带与扇面 72
3.2 OpenGL缓存数据 75
3.2.1 创建与分配缓存 75
3.2.2 向缓存输入和输出数据 77
3.2.3 访问缓存的内容 81
3.2.4 丢弃缓存数据 86
3.3 顶点规范 86
3.3.1 深入讨论VertexAttribPointer 87
3.3.2  静态顶点属性的规范 90
3.4 OpenGL的绘制命令 92
3.4.1 图元的重启动 99
3.4.2 多实例渲染 102
第4章 颜色、像素和片元 112
4.1 基本颜色理论 113
4.2 缓存及其用途 114
4.2.1 缓存的清除 116
4.2.2 缓存的掩码 117
4.3 颜色与OpenGL 118
4.3.1 颜色的表达与OpenGL 118
4.3.2 平滑数据插值 119
4.4 片元的测试与操作 121
4.4.1 剪切测试 122
4.4.2 多重采样的片元操作 123
4.4.3 模板测试 124
4.4.4 模板的例子 125
4.4.5 深度测试 127
4.4.6 融混 129
4.4.7 逻辑操作 133
4.4.8 遮挡查询 134
4.4.9 条件渲染 138
4.5 多重采样 139
4.6 逐图元的反走样 141
4.6.1 线段的反走样 142
4.6.2 多边形的反走样 143
4.7 像素数据的读取和拷贝 143
4.8 拷贝像素矩形 145
第5章 视口变换、裁减、剪切与反馈 147
5.1 观察视图 148
5.1.1 视图模型 148
5.1.2 相机模型 148
5.1.3 正交视图模型 151
5.2 用户变换 152
5.2.1 矩阵乘法的回顾 153
5.2.2 齐次坐标 155
5.2.3 线性变换与矩阵 157
5.2.4  法线变换 167
5.2.5 OpenGL矩阵 168
5.3 OpenGL变换 170
5.3.1 高级技巧:用户裁减和剪切 172
5.3.2 OpenGL变换的控制 173
5.4 transform feedback 174
5.4.1 transform feedback对象 175
5.4.2 transform feedback缓存 176
5.4.3 配置transform feedback的变量 179
5.4.4 transform feedback的启动和停止 185
5.4.5 transform feedback的示例:粒子系统 187
第6章 纹理与帧缓存 192
6.1 纹理综述 193
6.2 基本纹理类型 194
6.3 创建并初始化纹理 195
6.4 指定纹理数据 200
6.4.1 显式设置纹理数据 200
6.4.2 从缓存中加载纹理 202
6.4.3 从文件加载图像 203
6.4.4 获取纹理数据 206
6.4.5 纹理数据的排列布局 207
6.5 纹理格式 211
6.5.1 内部格式 211
6.5.2 外部格式 214
6.6 压缩纹理 216
6.7 采样器对象 218
6.8 纹理的使用 220
6.8.1 纹理坐标 222
6.8.2 排列纹理数据 225
6.8.3 使用多重纹理 227
6.9 复杂纹理类型 229
6.9.1 3D纹理 229
6.9.2 纹理数组 230
6.9.3 立方体映射纹理 231
6.9.4 阴影采样器 236
6.9.5 深度-模板纹理 237
6.9.6 缓存纹理 238
6.10 纹理视图 240
6.11 滤波方式 243
6.11.1 线性滤波 243
6.11.2 使用和生成mipmap 245
6.11.3 计算mipmap层次 249
6.11.4 mipmap细节层次的控制 250
6.12 高级纹理查询函数 250
6.12.1 显式的细节层次控制 250
6.12.2 显式的梯度设置 251
6.12.3 带有偏移参数的纹理获取函数 251
6.12.4 投影纹理 252
6.12.5 在着色器中执行纹理查询 253
6.12.6 纹素收集 255
6.12.7 组合功能的特殊函数 255
6.13 无绑定纹理 256
6.13.1 纹理句柄 256
6.13.2 纹理驻留 257
6.13.3 采样无绑定纹理 258
6.14 稀疏纹理 259
6.14.1 稀疏纹理的数据提交 259
6.14.2 稀疏纹理的页面 260
6.15 点精灵 261
6.15.1 纹理点精灵 261
6.15.2 控制点的显示 263
6.16 帧缓存对象 264
6.17 渲染到纹理贴图 266
6.17.1 抛弃渲染数据 268
6.17.2 渲染缓存 269
6.17.3 创建渲染缓存的存储空间 270
6.17.4 帧缓存附件 272
6.17.5 帧缓存的完整性 274
6.17.6 帧缓存的无效化 275
6.17.7 多重渲染缓存的同步写入 276
6.17.8 选择颜色缓存来进行读写操作 277
6.17.9 双源融混 279
6.18 本章总结 281
6.18.1 纹理回顾 281
6.18.2 纹理的最佳实践 281
第7章 光照与阴影 283
7.1 光照介绍 284
7.2 经典光照模型 284
7.2.1 不同光源类型的片元着色器 285
7.2.2 将计算移到顶点着色器 294
7.2.3 多个光源和材质 296
7.2.4 光照坐标系统 302
7.2.5 经典光照模型的局限 302
7.3 光照模型进阶 303
7.3.1 半球光照 303
7.3.2 基于图像的光照 306
7.3.3 球面光照 310
7.4 阴影映射 313
7.4.1 创建一张阴影贴图 314
7.4.2 使用阴影贴图 316
第8章 程序式纹理 320
8.1 程序式纹理 321
8.1.1 规则的花纹 322
8.1.2 玩具球 328
8.1.3 晶格 335
8.1.4 程序式着色方法的总结 336
8.2 凹凸贴图映射 336
8.2.1 应用程序设置 338
8.2.2 顶点着色器 340
8.2.3 片元着色器 341
8.2.4 法线贴图 343
8.3 程序式纹理的反走样 343
8.3.1 走样的来源 344
8.3.2 避免走样问题 345
8.3.3 提高分辨率 346
8.3.4 高频率的反走样 347
8.3.5 频率截断 354
8.3.6 程序式反走样的总结 356
8.4 噪声 356
8.4.1 噪声的定义 358
8.4.2 噪声纹理 362
8.4.3 权衡 365
8.4.4 一个简单的噪声着色器 366
8.4.5 湍流 368
8.4.6 大理石 369
8.4.7 花岗岩 370
8.4.8 木纹 370
8.4.9 噪声的总结 373
8.5 更多信息 373
第9章 细分着色器 375
9.1 细分着色器 375
9.2 细分面片 376
9.3 细分控制着色器 377
9.3.1 生成输出面片的顶点 378
9.3.2 细分控制着色器的变量 378
9.3.3 细分的控制 379
9.4 细分计算着色器 383
9.4.1 设置图元生成域 384
9.4.2 设置生成图元的面朝向 384
9.4.3 设置细分坐标的间隔 384
9.4.4 更多的细分计算着色器layout选项 384
9.4.5 设置顶点的位置 385
9.4.6 细分计算着色器的变量 385
9.5 细分实例:茶壶 386
9.5.1 处理面片输入顶点 386
9.5.2 计算茶壶的细分坐标 387
9.6 更多的细分技术 389
9.6.1 视口相关的细分 389
9.6.2 细分的共享边与裂缝 391
9.6.3 置换贴图映射 392
第10章 几何着色器 393
10.1 创建几何着色器 394
10.2 几何着色器的输入和输出 396
10.2.1 几何着色器的输入 396
10.2.2 特殊的几何着色器图元 399
10.2.3 几何着色器的输出 403
10.3 产生图元 405
10.3.1 几何体的裁减 405
10.3.2 几何体的扩充 406
10.4 transform feedback高级篇 410
10.4.1 多重输出流 411
10.4.2 图元查询 414
10.4.3 使用transform feedback的结果 416
10.5 几何着色器的多实例化 423
10.6 多视口与分层渲染 425
10.6.1 视口索引 425
10.6.2 分层渲染 429
10.7 本章总结 432
10.7.1 几何着色器回顾 433
10.7.2 几何着色器的最佳实践 433
第11章 内存 435
11.1 使用纹理存储通用数据 436
11.1.1 将纹理绑定到图像单元 440
11.1.2 图像数据的读取和写入 441
11.2 着色器存储缓存对象 445
11.3 原子操作和同步 446
11.3.1 图像的原子操作 446
11.3.2 缓存的原子操作 454
11.3.3 同步对象 455
11.3.4 图像限定符和屏障 459
11.3.5 高性能的原子计数器 467
11.4 示例:顺序无关的透明 470
11.4.1 工作原理 471
11.4.2 初始化 472
11.4.3 渲染 473
11.4.4 排序和融混 477
11.4.5 结果 480
第12章 计算着色器 481
12.1 概述 481
12.2 工作组及其执行 482
12.3 通信与同步 487
12.3.1 通信 488
12.3.2 同步 489
12.4 示例 490
12.4.1 物理模拟 491
12.4.2 图像处理 496
12.5 本章总结 500
12.5.1 计算着色器回顾 500
12.5.2 计算着色器的最佳实践 500
附录A 第三方支持库 502
附录B OpenGL ES与WebGL 514
附录C 内置GLSL变量与函数 525
附录D 状态变量 576
附录E 齐次坐标与变换矩阵 620
附录F 纹理、帧缓存与渲染缓存的浮点格式 625
附录G OpenGL程序的调试与优化 631
附录H 缓存对象的布局 645
术语表 648
本书是《OpenGL Programming Guide,Eighth Edition》的修订版本,也就是知名的“OpenGL红宝书”的第9版。由于API接口的颠覆性变化,以及第8版写作者的大胆革新和推翻重写,让很多原本自认为经验丰富的从业者(包括笔者在内)对OpenGL这个已经存续了20余年的图形API一下子有了几分陌生感。而第9版的及时发布修正了之前的很多结构问题和概念错误,让全新的OpenGL架构更加明晰地展现在读者面前,不过对于那些早就熟悉了传统兼容模式(compatible prof?ile)的开发者,以及原本对图形学一无所知急需精进的初学者来说,新的OpenGL看起来依然高不可攀,需要太长的时间去消化、实验、理解,直至应用。
随着图形硬件的飞速演进,以及虚拟现实(VR)和增强现实(AR)技术在这几年的火热发展,支持可视化编辑、多种脚本语言以及各种逼真渲染效果和优化算法的商业图形引擎(例如Unity和Unreal)开始逐渐占据主要的市场份额。众多开发者开始更多地着眼于如何实现优质的内容,而不是纠结于底层接口的封装、渲染批次的优化,或者光影效果的叠加与取舍。强大的中间层引擎解放了更多人的头脑,让他们不必把时间消耗在大量的底层逻辑处理、状态切换、数据管理以及跨平台测试上—这显然是一件好事,但是这也带来了一个新的话题,学习和熟悉底层图形接口—OpenGL或者DirectX,包括新的Vulkan,是不是已经不重要了?
笔者以为不然。事实上,大多数Unity和Unreal开发者经常遇到的那些问题,例如Draw Call的优化、纹理的分类和特性、相机参数的管理、着色器的编写等,依然都需要回归到最本质的图形学问题的范畴,回归到OpenGL接口所定义和执行的阶段。对于一名初学者而言,具备完善的可视化界面和快速搭建场景能力的商业引擎是一个入门的不错阶梯。他们可以避开枯燥的接口和数学概念的学习,快乐地做一些自己想要做的内容,例如简易的电脑游戏,或者一个可以用VR头盔观看的全景画面。在那之后,他们有必要带着一些也许是一知半解的理念回归,重新去理解底层接口和定义,这些实现方案与底层硬件密不可分的关系,以及与他们曾经遇到的问题的千丝万缕的联系。这样的学习过程才是事半功倍的,也是一名开发者从爱好和浅显应用开发的阶段迈向资深图形工作者阶段的重要历程。而从繁花乱象中返璞归真,再去理解图形学中各种晦涩术语和复杂公式的时候,想必很多读者也会有一番全新的感受了。希望到那个时候,本书将会再次成为你的良师益友。
本书第9版的翻译和修订工作由王锐完成,并且根据章节需要重新翻译了第6章和附录A的部分。参与过本书前一版(第8版)翻译的还有郭华、苏明南、张静、王凯、陈节、龙海鹰和毕玉玲。感谢他们的辛苦付出,也感谢机械工业出版社华章公司的编辑老师们的信任与帮助!

王锐
2017年4月
计算机\图形图像
读者书评
发表评论



高级搜索
数字图像处理 第3版
数字图像处理原理与实践 第2版
OpenCV实例精解


版权所有© 2017  北京华章图文信息有限公司 京ICP备08102525号 京公网安备110102004606号
通信地址:北京市百万庄南街1号 邮编:100037
电话:(010)68318309, 88378998 传真:(010)68311602, 68995260
高校教师服务
华章教育微信
诚聘英才
诚聘英才