第一部分 VSL脚本语言程序设计 3
第1章 认识VSL 3
1.1 VSL简介 3
1.1.1 BB与VSL的关系 3
1.1.2 VSL的优势 3
1.1.3 VSL脚本语言与C语言的对比 5
1.1.4 VSL与其他脚本语言的差异 5
1.2 VSL脚本管理器 5
1.2.1 VSL脚本管理器的使用 5
1.2.2创造VSL脚本程序 6
1.2.3带输入输出的VSL脚本程序 7
1.2.4 VSL脚本程序的重命名、定位和删除 10
1.2.5 VSL快捷键使用 10
1.3 VSL语法描述 11
1.3.1 VSL的变量和常量 11
1.3.2 VSL的运算符 12
1.3.3 VSL的表达式与语句 13
1.3.4 VSL的赋值语句、声明语句和注释 15
1.3.5 VSL的条件判断语句 15
1.3.6 VSL的循环和控制语句 20
1.3.7数组和多维数组 25
第2章 VSL的函数 28
2.1函数的定义与调用 28
2.1.1函数的概念 28
2.1.2定义函数 29
2.1.3函数的调用 29
2.1.4函数的重载 30
2.2函数的参数及其返回值 31
2.2.1形参和实参 31
2.2.2函数值的返回 32
2.3变量的作用域和存储类型 33
2.3.1局部变量、全局变量和作用域 33
2.3.2 VSL全局共享变量和全局静态变量 35
2.3.3结构体和枚举类型 36
2.4字符串类的使用 39
2.4.1字符变量、字符串类型变量、字符数组和字符串类的区别 39
2.4.2字符串类的定义与赋值 39
2.4.3字符串的处理函数 40
2.4.4字符串的应用 41
第3章 VSL中的3D数学与变换以及简单几何体 43
3.1向量 43
3.1.1向量的概念 43
3.1.2向量长度和归一化 44
3.1.3向量的加减 44
3.1.4向量和标量的乘法 45
3.1.5向量的点积 45
3.1.6向量的叉积 45
3.1.7位置和位移向量 46
3.2 VSL中的2D向量Vector2D 46
3.2.1 Vector2D的方法 46
3.2.2 Vector2D的应用 48
3.3 VSL中的3D向量Vector 50
3.3.1 Vector的方法 50
3.3.2 Vector的应用 50
3.4矩阵和Matrix 51
3.4.1矩阵的概念 51
3.4.2 Matrix的方法和应用 52
3.5简单几何体 53
3.5.1点、线、面 53
3.5.2正方体 54
3.5.3圆锥体和圆球 55
3.5.4矩形 55
第4章 Virtools中的2D实体 60
4.1 2D帧Entity2D 60
4.1.1 Entity2D与Rect 60
4.1.2 Entity2D的应用 60
4.2 2D精灵Sprite 64
4.2.1 Sprite与Entity2D 64
4.2.2 Sprite的应用 65
第5章 灯光、材质和纹理 68
5.1光 68
5.1.1光的类型 68
5.1.2用VSL设置光照 69
5.1.3光的衰减属性 69
5.1.4高光 70
5.1.5色彩 71
5.2材质的特性 72
5.2.1物体表面材质属性 72
5.2.2 3D物体填充模式 73
5.2.3 Flat渲染和Gouraud渲染 74
5.2.4 Alpha混合 74
5.2.5 Alpha测试 76
5.2.6纹理采样过滤 77
5.2.7纹理寻址 78
5.2.8多重纹理混合 79
5.2.9纹理过滤和纹理寻址的显示例程 80
5.3纹理的特性 81
5.3.1纹理的插槽属性 81
5.3.2天空盒纹理 83
第6章 3D物体 85
6.1 3D Entity 85
6.1.1坐标系和3D物体 85
6.1.2 3D Entity的位置、方向与缩放 86
6.1.3物体的父子关系 89
6.1.4物体的网格 91
6.1.5 3D物体的屏幕坐标位置 92
6.2 Mesh 93
6.2.1 Mesh的应用 93
6.2.2 Mesh与材质、纹理贴图 95
6.2.3纹理坐标:(u,v)坐标 95
6.2.4 Mesh的通道材质特性 96
6.3 3D精灵Sprite 3D 97
6.3.1 3D精灵和公告板 97
6.3.2 3D精灵的应用 97
第7章 角色动画 99
7.1角色 99
7.1.1角色的概念 99
7.1.2播放角色动画 99
7.1.3角色的次级动画播放 102
7.1.4角色的身体 104
7.2角色动画 105
7.2.1如何确定角色动画是否有问题 105
7.2.2角色的动画帧 105
7.2.3角色动画的一些设置 108
7.2.4用VSL设置角色动画 110
7.3角色动画的应用 111
第8章 摄像机 116
8.1相机的基本属性 116
8.1.1相机的投影 116
8.1.2相机的视锥 118
8.1.3目标相机 119
8.2相机的应用 119
8.2.1第一人称相机 119
8.2.2第三人称相机 122
第9章 曲线与网格 126
9.1 3D曲线 126
9.1.1 3D曲线和3D曲线节点的概念 126
9.1.2 3D曲线的应用 128
9.1.3 3D曲线节点的详细设置 129
9.2 2D路径 131
9.3网格 133
9.3.1网格和层 133
9.3.2网格的VSL应用 133
第10章 表、组和场景 137
10.1表 137
10.1.1表的数据存储类型 137
10.1.2使用VSL创建表和存储数据 138
10.1.3通过VSL提取表中数据和删除行列 140
10.1.4通过VSL对表中数据的操作 142
10.2组 143
102.1组的意义 143
102.2组的应用 143
10.3场景 144
10.3.1场景的概念 144
10.3.2场景技术的简单应用 146
10.4数据容器 147
10.4.1数据容器的使用 147
10.4.2 String、StringTokenizer和ArrayString 150
第11章 声音与视频 152
11.1声音的基本运用 152
11.1.1声音的特性 152
11.1.2播放声音的方法 153
11.1.3 2D声音和3D声音 154
11.2声音的高级应用 155
11.2.1锥形的听觉范围 155
11.2.2声音的多重播放 157
11.3视频的播放 158
11.3.1视频的属性 158
11.3.2视频的播放 159
第12章 VSL中的bc 161
12.1工厂的概念 161
12.1.1工厂的作用 161
12.1.2工厂的产品 161
12.1.3工厂如何复制产品 162
12.1.4工厂如何删除产品 164
12.2属性控制 165
12.2.1属性的概念 165
12.2.2属性的操作 165
12.3 be的其他功能 168
12.3.1取得场景物件 168
12.3.2 be的其他一些小功能 172
12.4输入管理器 174
12.4.1鼠标的使用 174
12.4.2键盘的使用 176
12.5渲染设备 179
12.5.1渲染设备的概念 179
12.5.2如何设置雾 179
12.5.3鼠标拾取物件 181
12.5.4 2D屏幕与3D位置 185
12.6 ac 188
12.6.1 ac的概念 188
12.6.2如何创建和使用ac 188
第二部分 高级渲染语言 193
第13章 Virtools中的Shader 193
13.1认识Shader 193
13.1.1 Shader的诞生 193
13.1.2 Virtools中的Shader 193
13.1.3 Virtools中Shader的执行过程 194
13.1.4 Shader编辑器 195
13.2 Shader语言 196
13.2.1创建第一个Shader程序 196
13.2.2顶点着色器和像素着色器 198
第14章 光照 200
14.1参数 200
14.1.1设置自发光参数的Virtools写法 200
14.1.2设置自发光参数的HLSL写法 201
14.2光照 203
14.2.1光照的原理 203
14.2.2光照Shader 204
14.2.3光照的HLSL写法 206
14.3镜面反射 210
14.3.1一盏灯的镜面反射光照 210
14.3.2两盏灯的镜面反射光照 212
第15章 纹理贴图光照 214
15.1简单的纹理渲染 214
15.1.1 Virtools纹理渲染的Shader代码 214
15.1.2 HLSL纹理渲染 215
15.1.3带光照的纹理渲染 216
15.1.4逐像素地纹理渲染 217
15.1.5两层纹理渲染 220
15.2凹凸纹理映射 221
15.2.1凹凸纹理映射的由来 221
15.2.2凹凸纹理映射的原理 222
15.2.3凹凸纹理映射的实现 222
15.2.4改良的凹凸纹理映射 226
15.3环境映射 230
15.3.1环境映射的原理和立方贴图纹理 230
15.3.2 Virtools中如何生成立方体贴图 231
15.3.3反射环境映射 231
15.3.4折射环境映射 234
15.3.5菲涅尔效果和颜色色散 237
15.3.6环境映射和凹凸纹理映射的结合 241
15.4 2D Frame的Shader 244
15.4.1 2D帧的多次渲染 244
15.4.2 2D帧的旋转 246
第16章 Shader的效果 250
16.1 Shader实现动画效果 250
16.1.1脉动的茶壶——顶点动画 250
16.1.2舞动的花朵——纹理UV动画 252
16.1.3波光粼粼的浅水区——序列帧动画 256
16.2简单的修饰效果 258
16.2.1广告墙变换效果 258
16.2.2海底焦散 261
16.2.3画面模糊效果 265
16.2.4景深效果 268
16.2.5地球大气效果 271
16.3简单的几个其他效果 276
16.3.1灼烧 276
16.3.2发光 277
16.3.3绽放 280
16.3.4毛发 284
16.3.5灰度 288
第17章 Shader的应用 290
17.1地形渲染 290
17.1.1 Texture Splatting原理简介 290
17.1.2 Texture Splatting对地形建模的一点要求 291
17.1.3 Shader代码剖析 291
17.2运动模糊 296
17.2.1运动模糊原理简介 296
17.2.2设置需要配合的资源 296
17.2.3运动模糊的Shader代码 297
17.3带倒影的水面渲染 300
17.3.1渲染水面的步骤 300
17.3.2水面的设置 302
17.3.3水的Shader代码 303
第18章 Shader的其他应用 307
18.1渲染车 307
18.1.1渲染车灯 307
18.1.2渲染车轮 311
18.1.3渲染车窗 314
18.2渲染场景 317
18.2.1带法线的地形渲染 317
18.2.2树的渲染 322
18.2.3树叶与草的渲染 323
第三部分 Virtools SDK 329
第19章 认识Virtools SDK 329
19.1 Virtools的体系结构 329
19.1.1 SDK的介绍 329
19.1.2帧循环的介绍 331
19.1.3主要对象之间的关系 332
19.2使用SDK创建BB 333
19.2.1行动前的准备 333
19.2.2通过向导创建BB 335
19.2.3 BB源文件的解释 338
19.2.4编译生成BB 344
第20章 用SDK开发BB 346
20.1 BB的参数 346
20.1.1 BB的3种参数 346
20.1.2 BB参数值的获取和赋值 347
20.1.3改变BB参数的数量和类型 349
20.2 BB的输入输出端口 354
20.3自定义类型的参数 358
20.3.1自定义类型的参数说明 358
20.3.2创建简单的自定义参数 359
20.3.3结构体类型参数的处理函数 361
20.4使用SDK的BB 367
20.4.1修改PushBotton和DragAndDrop 367
20.4.2转向功能 368
20.4.3有层级关系的中文显示 370
第21章 用SDK扩展功能 379
21.1多线程的应用 379
21.1.1进程和线程 379
21.1.2 VxThread、VxMutexl、VxMutexlLock 380
21.1.3多线程的应用 381
21.2管理器的开发使用 391
21.2.1管理器 391
21.2.2 Manager代码解释 394
21.2.3 Virtools与ADO的整合 395
21.2.4创建ADOACCESSManager 397
21.2.5在BB中调用管理器的方法 404
21.2.6管理器功能的整合 406
21.3为VSL绑定新类型 408
21.3.1绑定新类型的规则 408
21.3.2绑定的细则 409
21.3.3绑定的简单范例 414
21.4第三方声音引擎与Virtools的整合 415
21.4.1整合第三方声音引擎的原因 415
21.4.2第三方声音引擎使用介绍 416
21.4.3不同喇叭播放不同声音 417
21.5网络引擎与Virtools的整合 425
21.5.1整合网络引擎的原因 425
21.5.2使用网络引擎创建服务器 425
21.5.3网络模块管理器 430
21.5.4连接到服务器的BB 436
21.5.5发送消息到服务器的BB 438
21.5.6处理服务器消息的BB 439
第22章 用SDK开发新功能 442
22.1读写注册表 442
22.1.1注册表的简单介绍 442
22.1.2读写注册表功能描述 443
22.1.3访问注册表的BB 444
22.2文件目录的操作 446
22.2.1列举所有指定类型文件 446
22.2.2记录日志文件 449
22.2.3设置打印 451
22.2.4复制移动文件 455
22.3 Virtools与串口通信 457
22.3.1串口通信类 457
22.3.2定义串口通信协议 458
22.3.3串口通信管理器 461
22.3.4启用串口BB 462
22.3.5从串口中得到数据 463
22.3.6向串口写数据 464
22.4 Virtools与Flash整合 466
22.4.1和Flash整合的原因 466
22.4.2 Flash的封装 466
22.4.3封装一个播放swf文件的BB 467
第23章 发布应用程序 473
23.1编译生成独立的执行程序 473
23.1.1关于执行程序的介绍 473
23.1.2编译生成Virtools自带的播放器 474
23.1.3 CustomPlayer类分析 474
23.1.4 CustomPlayerApp类分析 475
附录A VSL全局函数 478
附录B Virtools参数类型GUID 481
附录C 枚举CK BEHAVIOR FLAGS的标识 484
附录D CKBehavior::SetCallbackFunction回调标准 486
附录E Virtools消息使用须知 487
E.1消息的接收 487
E.2消息的参数 488
附录F 常用类的标识符类CK_CLASSID 491
参考文献 493