第0章 绪论 1
0.1 谁是本书的读者 1
0.2 从本书获得什么 1
0.3 开发环境 2
0.4 本书的特点 2
0.5 本书的内容 3
0.6 本书是如何组织的 5
0.7 如何列示代码 6
0.9 如何提交结果 10
0.8 如何解释代码 10
0.10 关于本书附带的CD-ROM 11
第1部分 获得技术支持 12
第1章 Java语言:信息时代的精灵 12
1.1 Java语言的特点 12
1.2 Java有别于C++ 13
1.3 Java类 14
1.4 Java接口 16
1.5 Java包 17
2.2 鼠标事件:网站导航 19
第2章 鼠标事件 19
2.1 事件驱动程序 19
2.2.1 制作步骤 20
2.2.2 上网去 20
2.3 鼠标事件:世界是你们的 27
2.3.1 制作步骤 27
2.3.2 按设计思想完成编程 27
3.1.2 窗体管理者TheFrame 36
3.1.1 制作步骤 36
3.1 在小应用程序中添加窗体、菜单和对话框 36
第3章 窗体、菜单和对话框 36
3.1.3 Demo对话框DemoDialog 40
3.1.4 显示窗体和对话框 41
3.2 在应用程序中添加菜单 43
3.2.1 制作步骤 43
3.2.2 响应菜单事件 45
第4章 GUI组件、容器和布局 50
4.1 组合多个布局管理器 50
4.1.1 设计用户界面 50
4.1.3 画布CanvasOne 54
4.1.2 制作步骤 54
4.1.4 画布CanvasTwo 56
4.1.5 错误提示对话框ErrorDlg 60
4.1.6 组织3个卡片 62
4.1.7 附加结果 73
4.2 GridBagLayout:布局管理器的动力室 75
4.2.1 制作步骤 75
4.2.2 卡片管理类DisplayPanel 75
4.2.3 简洁的代码 79
5.1 I/O流 81
第5章 I/O流:获取地图数据 81
5.2 将地图数据发送至文件 82
5.2.1 制作步骤与提交方式 82
5.2.2 非组件组框GroupFrame 82
5.2.3 窗口管理者FrameManager 84
5.2.4 信息输入对话框InfoDialog 84
5.2.5 创建地图并传送数据 86
第2部分 三维图形设计 94
第6章 基本图元 94
6.1 直线 94
6.1.2 基元超类BasicPrimitive 95
6.1.1 制作步骤 95
6.1.3 直线基元LinePrimitive 96
6.1.4 测试直线基元 104
6.2 三角形 105
6.2.1 Gouraud着色方法 106
6.2.2 制作步骤 107
6.2.3 三角形基元TrianglePrimitive 107
6.2.4 测试三角形基元 114
6.3.1 直线段 117
6.3.2 小面 117
6.3 几何构造 117
6.3.3 四边形的细化 119
6.3.4 边的可见性 120
6.4 光盘中的其他实例 120
第7章 三维图形 121
7.1 底层图形系统的绘制原理 121
7.2 从绘制立方体开始 123
7.2.1 制作步骤 123
7.2.2 次物体SubObject 123
7.2.3 几何顶点及其属性Vertex3d 124
7.2.4 边及其属性Edge 126
7.2.5 小面及其属性Facet 127
7.2.6 三角形小面Facet3和四边形小面Facet4 128
7.2.7 三维自由向量Vector3d 129
7.2.8 三维图形的几何变换和观察变换Matrix3d 134
7.2.9 矩阵堆栈MatrixStack 146
7.2.10 取景器及视口变换ViewFinder 148
7.2.11 法线计算器NormalCalculater 151
7.2.12 可见性测试器VisibilityTester 151
7.2.13 浮点颜色ColorFloat 153
7.2.14 着色工具Renderer 156
7.2.15 立方体Cube 163
7.2.16 可调整背景色的带边界框矩形BorderRectangle 171
7.2.17 绘制立方体 172
第8章 光照技术 177
8.1 光照球 177
8.1.1 球的几何拓扑 178
8.1.2 制作步骤 179
8.1.3 球Sphere 180
8.1.4 光源及其属性Light 190
8.1.5 定义一个全向点光源和聚光 196
8.1.6 物体的材质Material 198
8.1.7 光照计算 201
8.1.8 多光源照射系统LightingSystem 202
8.1.9 光照光滑球、刻面球和线框球 213
8.2 光照立方体 219
8.2.1 制作步骤 219
8.2.2 光照光滑立方体、刻面立方体和线框立方体 220
8.3 光盘中的其他实例:圆柱和圆锥的统一模型 225
9.1.1 制作步骤 226
9.1 Bezier曲线 226
第9章 曲线和曲面 226
9.1.2 Bezier曲线和曲面的描述者Bezier 227
9.1.3 齐次坐标HomogeneousCoordinate 229
9.1.4 三次Bezier曲线BezierCurve 230
9.1.5 绘制由7个控制点控制的连续曲线 238
9.2 Bezier曲面 242
9.2.1 制作步骤 242
9.2.2 Bezier曲面BezierSurface 243
9.2.3 绘制Bezier曲面的线框模型、光照线框模型和光照实体模型 259
10.1.1 制作步骤 264
10.1 在地面上绘制立方体的影域 264
第10章 阴影区域 264
10.1.2 空间直线Line 265
10.1.3 空间平面Plane 266
10.1.4 射影几何Projector 268
10.1.5 支持影域计算的Cube 270
10.1.6 绘制立方体所产生的阴影区域 274
第11章 运动动画 278
11.1 动画生成技术 278
11.2 双缓存机制的工作原理 279
11.3.2 具有高光效果的虚拟球VirtualSphere 280
11.3 模拟小球的非弹性碰撞 280
11.3.1 制作步骤 280
11.3.3 具有高光效果的虚拟圆柱VirtualCylinder 282
11.3.4 砖块生成工具Brick 283
11.3.5 实现小球的非弹性碰撞 285
第12章 开发应用程序版本 290
12.1 修改或测试BezierCurve等32个类 290
12.2 测试应用程序版本 296
12.2.1 制作步骤 296
12.2.2 编写用于测试的代码 297
12.3 光盘中的其他内容 300
12.3.1 用于测试基本图元的PrimitiveApplication项目 300
12.3.2 全部转化BezierCurve等13个类的ToApplication项目 300
第3部分 实用图像处理技术 301
第13章 图像切换 301
13.1 常用的切换方式 301
13.2 提交方式 306
13.3 滑入 306
13.3.1 制作步骤 306
13.3.2 实现滑入效果 307
13.4 推进和收缩 313
13.4.1 制作步骤 313
13.4.2 实现推进和收缩切换 314
13.5 方形向外渐铺和方形向里卷走 317
13.5.1 制作步骤 317
13.5.2 实现渐铺和卷走效果 318
13.6 帘窗式下拉与退出 321
13.6.1 制作步骤 321
13.6.2 实现切换效果 321
13.7.2 圆形过滤器CircleInsideFilter和CircleOutsideFilter 325
13.7.1 制作步骤 325
13.7 圆形向外渐铺和圆形向里渐铺 325
13.7.3 实现切换效果 326
13.8 椭圆形向外渐铺和椭圆形向里渐铺 330
13.8.1 制作步骤 330
13.8.2 椭圆形过滤器EllipseInsideFilter和EllipseOutsideFilter 331
13.8.3 实现切换效果 332
13.9 淡入与淡出效果 335
13.9.1 制作步骤 335
13.9.3 淡入和淡出图像 336
13.9.2 淡入与淡出过滤器FadeInOutFilter 336
13.10 光盘中的其他实例 339
13.10.1 八方向渐铺 339
13.10.2 上下和左右对铺 340
13.10.3 垂直淡入与淡出 341
第14章 点处理 342
14.1 提交方式 342
14.2 图像亮度修正 342
14.2.1 制作步骤 342
14.2.2 开放的点处理抽象类PointProcessor 343
14.2.3 亮度修正器BrightnessRetriever 344
14.2.4 三参数对话框ThreeParametersDialog 347
14.2.5 修正图像的亮度 349
14.3 图像灰度修正 354
14.3.1 制作步骤 354
14.3.2 灰度计算 354
14.3.3 灰度修正器GrayRetriever 355
14.3.4 灰度对话框GrayDialog 359
14.3.5 修正图像的灰度 361
14.4 直方图均衡化修正 365
14.4.2 直方图均衡化修正器HistogramRetriever 366
14.4.1 制作步骤 366
14.4.3 修正图像的灰度 368
14.5 直方图规定化修正 371
14.5.1 制作步骤 371
14.5.2 二分查找算法BinarySearcher 372
14.5.3 直方图规定化修正器HistogramMatchRetriever 374
14.5.4 修正图像的灰度 378
14.6 灰度概率修正 381
14.6.1 制作步骤 381
14.6.2 灰度概率修正器GrayProbabilityRetriever 381
14.6.3 修正图像的灰度 385
14.7 着色图像 387
14.7.1 制作步骤 388
14.7.2 颜色通道ColorRetriever 388
14.7.3 着色图像 390
14.8 曝光图像 393
14.8.1 制作步骤 393
14.8.2 图像曝光器SolarizationRetriever 394
14.8.3 曝光图像 395
15.2 低通滤波器 398
15.1 提交方式 398
第15章 空间滤波器 398
15.2.1 制作步骤 399
15.2.2 开放的区域处理抽象类RegionProcessor 399
15.2.3 低通滤波器LowpassFilter 401
15.2.4 三单选按钮对话框ThreeRadiosDialog 406
15.2.5 过滤一幅图像 408
15.3 平移和差分边缘增强、浮雕效果 412
15.3.1 制作步骤 412
15.3.2 平移和差分边缘增强滤波器DEEFilter 412
15.3.3 八选择对话框EightRadiosDialog 416
15.3.4 增强一幅图像 418
15.3.5 生成浮雕效果 421
15.4 Sobel边缘检测 423
15.4.1 制作步骤 423
15.4.2 Sobel边缘检测器SobelFilter 423
15.4.3 检测3ds.gif图像 426
15.5 统一的卷积操作 429
15.5.1 制作步骤 429
15.5.2 统一的卷积过滤器ConvolutionFilter 429
15.5.3 晕化图像 434
15.5.4 模糊图像 437
15.5.5 高通滤波器 438
15.5.6 梯度方向边缘增强 438
15.5.7 拉普拉斯边缘增强 439
15.5.8 模板匹配滤波 439
15.6 中值滤波 440
15.6.1 制作步骤 440
15.6.2 快速分类工具QuickSorter 441
15.6.3 中值过滤器MedianFilter 441
15.6.4 过滤图像 445
15.7.1 制作步骤 448
15.7 扩散图像 448
15.7.2 扩散过滤器DiffuseFilter 449
15.7.3 生成扩散效果 451
15.8 颗粒粗化 453
15.8.1 制作步骤 454
15.8.2 颗粒粗化过滤器GranulateFilter 454
15.8.3 粒化图像 457
15.9.2 梯度方向边缘增强FilterGEE项目 460
15.9.3 拉普拉斯边缘增强FilterLEE项目 460
15.9.1 高通滤波器FilterHighpass项目 460
15.9 光盘中的其他实例 460
15.9.4 Kirsch边缘检测FilterKirsch项目 461
15.9.5 霓红图像FilterNeon项目 461
第16章 图像合成 462
16.1 提交方式 462
16.2 外部数据成像 462
16.2.1 制作步骤 462
16.2.2 图像数据的可视化 463
16.3 透明色匹配合成 465
16.3.2 透明色过滤器TransparentColorFilter 466
16.3.1 制作步骤 466
16.3.3 将小车和背景进行匹配 467
16.4 代数运算 469
16.4.1 制作步骤 469
16.4.2 代数运算器ImageAlgebraOperator 470
16.4.3 代数运算对话框FourRadiosDialog 475
16.4.4 通过代数运算进行合成 477
16.5 逻辑运算 480
16.5.1 制作步骤 480
16.5.2 逻辑运算器ImageLogicOperator 481
16.5.3 逻辑运算对话框ThreeRadiosDialog 484
16.5.4 通过逻辑运算进行合成 486
16.6 图像融合技术 489
16.7 融合图像 491
16.7.1 制作步骤 491
16.7.2 融合处理器PixelBlender 491
16.7.3 alpha信息规定器AlphaCreator 496
16.7.4 融合图像 496
17.1 提交方式 499
17.2 平移图像 499
第17章 图像的几何变换 499
17.2.1 制作步骤 500
17.2.2 图像几何变换超类ImageGeometryTransform 500
17.2.3 封装的图像平移工具ImageTranslation 501
17.2.4 图像填充工具ImageRegionFill 504
17.2.5 平移图像 505
17.3 缩放图像 508
17.3.1 近邻取样法 508
17.3.4 制作步骤 509
17.3.3 三次卷积法 509
17.3.2 双线性内插法 509
17.3.5 封装的图像缩放工具ImageScale 510
17.3.6 算法选择对话框ThreeRadiosDialog 517
17.3.7 缩放图像 518
17.4 旋转图像 520
17.4.1 制作步骤 520
17.4.2 封装的图像旋转工具ImageRotate 521
17.4.3 旋转图像 532
17.5 光盘中的其他实例 534
18.2 反走样一个场景 535
18.1 全局场景反走样的技术路线 535
第18章 全局场景反走样 535
18.2.1 制作步骤 536
18.2.2 场景累积器SceneAccumulator 536
18.2.3 反走样一个场景 537
第19章 基于像素数据的动画 542
19.1 让画面飘起来 542
19.1.1 制作步骤 542
19.1.2 通过移动像素形成动画 543
20.1 用VRML描述一个3D场景 547
第20章 VRML 547
第4部分 如何发展 547
20.2 从3D Studio MAX到VRML 549
20.3 VRML与Java 550
第21章 OpenGL 552
21.1 OpenGL是什么 552
21.2 在ActiveX控件中使用OpenGL 553
21.2.1 用MFC创建一个基本的ActiveX控件 553
21.2.2 用OpenGL命令绘制ActiveX控件 554
21.2.3 将ActiveX控件添加到Java程序中 557
参考文献 559