logo资料库

Direct3D中的2D编程(中文版).pdf

第1页 / 共219页
第2页 / 共219页
第3页 / 共219页
第4页 / 共219页
第5页 / 共219页
第6页 / 共219页
第7页 / 共219页
第8页 / 共219页
资料共219页,剩余部分请下载后查看
书名页
版权页
致谢
丛书编辑寄语
介绍-important
译者序
目录
第1部分 从Di rectDraw7. 0 到Di rect3D8. 0
第1 章 初始化Di rect 3D
1 . 1 初始化步骤
1 . 2 ID i r e c t 3 D 8 对象的用途
1 . 3 创建ID i r e c t 3 D 8 对象
1 . 4 性能检测
1 . 5 显示格式
1 . 6 兼容格式检查
1 . 7 总结
第2 章 创建设备
2 . 1 创建ID i r e c t 3 D D e v ic e 8 对象
2 . 2 设置视区
2 . 3 D ir e c t 3 D 颜色和清除视区
2 . 4 显示场景
2 . 5 重置显示模式
2 . 6 总结
第3 章 顶点格式
3 . 1 D ir e c t 3 D 的用途
3 . 2 表示顶点数据
3 . 3 变换或者未变换
3 . 4 顶点缓冲
3 . 5 索引缓冲
3 . 6 总结
第4 章 渲染图元
4 . 1 渲染状态
4 . 2 开始和结束一个场景
4 . 3 图元类型
4 . 4 不使用顶点缓冲来绘制图元
4 . 5 带有用户内存指针的索引图元
4 . 6 用顶点缓冲绘制图元
4 . 7 用索引缓冲渲染索引图元
4 . 8 总结
第5 章 表面
5 . 1 资源类型
5 . 2 后备缓冲
5 . 3 图像表面
5 . 4 从一个表面拷贝到另外一个表面
5 . 5 加载图像
5 . 6 D ir e c t 3 D 光标
5 . 7 创建额外的渲染目标
5 . 8 总结
第6 章 纹理
6 . 1 创建纹理
6 . 2 加载纹理数据
6 . 3 纹理坐标
6 . 4 应用纹理到图元上
6 . 5 纹理寻址模式
6 . 6 多重纹理
6 . 7 总结
第7 章 Al pha 测试
7 . 1 A lp h a 测试的概述
7 . 2 将图像作为纹理进行加载
7 . 3 一个图像, 多个纹理
7 . 4 总结
第2部分 Di rect3D扩展
第8 章 坐标空间
8 . 1 坐标空间的类型
8 . 2 几何流水线
8 . 3 总结
第9 章 矢量
9 . 1 矢量定义
9 . 2 D 3 D V E C T O R
9 . 3 矢量加法
9 . 4 矢量减法
9 . 5 缩放矢量
9 . 6 绝对值
9 . 7 方向
9 . 8 标准化
9 . 9 旋转
9 . 1 0 点乘
9 . 1 1 叉乘
9 . 1 2 D 3 D X 矢量函数
9 . 1 3 总结
第10 章 矩阵
1 0 . 1 矩阵概述
1 0 . 2 矩阵加法
1 0 . 3 矩阵乘法
1 0 . 4 平移
1 0 . 5 矩阵旋转
1 0 . 6 缩放
1 0 . 7 D 3 D M A T R IX
1 0 . 8 D 3 D XM A T R IX
1 0 . 9 总结
第11 章 几何流水线
1 1 . 1 流水线
1 1 . 2 设置变换
1 1 . 3 乘以变换矩阵
1 1 . 4 总结
第12 章 Z 缓冲
1 2 . 1 Z 缓冲的定义
1 2 . 2 设置Z 缓冲
1 2 . 3 使用Z 缓冲
1 2 . 4 总结
第13 章 光照
1 3 . 1 D i r e c t 3 D 光照
1 3 . 2 D 3 D M A T E R IA L 8
1 3 . 3 D 3 D L IG H T 8
1 3 . 4 点光源
1 3 . 5 直射光
1 3 . 6 聚光灯
1 3 . 7 环境光
1 3 . 8 镜面反射光
1 3 . 9 放射光
1 3 . 1 0 总结
第14 章 Al pha 混合
1 4 . 1 A l p h a 混合的定义
1 4 . 2 设置A l p h a 混合
1 4 . 3 使用A l p h a 混合
1 4 . 4 总结
第3部分 综合运用
第15 章 模型
1 5 . 1 模型的定义?
1 5 . 2 X 文件
1 5 . 3 创建一个简单的X 文件加载程序
1 5 . 4 总结
第16 章 粒子系统
1 6 . 1 粒子系统的定义
1 6 . 2 粒子系统的要素
1 6 . 3 粒子类型
1 6 . 4 存储一个粒子系统
1 6 . 5 粒子的生命周期
1 6 . 6 渲染粒子
1 6 . 7 一个粒子系统例子
1 6 . 8 总结
第17 章 多边形中的点
1 7 . 1 三角形中的点
1 7 . 2 总结
第18 章 总结
1 8 . 1 大型游戏在哪里?
1 8 . 2 你学到了什么
1 8 . 3 何去何从
1 8 . 4 总结
索引
Direct3D 中的2D 编程 [ 美] Ernest Pazera 著 黄际洲 文俊浩 译 重 庆 大 学 出 版 社
Ernest Pazera F ocus on 2D in Dir ect3D ISBN: 1 - 931841 - 10 - 1 Copyright 2002 by Premier Press, a division of Thomson Learning. Original language published by Thomson Learning. All Rights reserved. 本书原版由汤姆森学习出版集团出版。版权所有, 盗印必究。 Chongqing University Press is authorized by Thomson Learning to publish and distribute exclusively this simplified Chinese edition. This edition is authorized for sale in the People’s Republic of China only ( excluding Hong Kong, Macao SAR and Taiwan) . Unauthorized export of this edition is a violation of the Copyright Act. No part of this publication may be re- produced or distributed by any means, or stored in a database or retrieval system, without the prior written permission of the publisher. 本书中文简体字翻译版由汤姆森学习出版集团授权重庆大学出版社独家出 版发行。此版本 仅限在中华 人民共和 国境内( 不包括中国香港、澳门特别行政区及中国台湾) 销售。未经授权的本书出口将被视为违 反版权法的 行为。 未经出版者预先书面许可, 不得以任何方式复制或发行本书的任何部分。 981-265-260-4 版贸核渝字( 2004) 第 37 号 图书在版编目( CIP) 数据 Direct3D 中的 2D 编程 / ( 美) 帕泽拉( Pazera, E. ) 著; 黄际洲, 文俊浩译. —重庆: 重庆大学出版社, 2005. 1 ( Premier 游戏系列丛书) ISBN 7-5624-3294-5 Ⅰ. D. . . Ⅱ. ①帕. . . ②黄. . . ③文. . . Ⅲ. 多媒体—软件工具, Direct Ⅳ. TP311. 56 中国版本图书馆 CIP 数据核字( 2004) 第 129437 号 Direct3D 中的 2D 编程 Direct3D Zhongde 2D Biancheng [ 美] Ernest Pazera( 帕泽拉) 著 黄际洲 文俊浩 译 址: http: / / www. cqup. com. cn 话: ( 023) 65102378 65105781 出 版 者: 重庆大学出版社 网 电 出 版 人: 张鸽盛 责任编辑: 袁 江 权国政 责任校对: 邹 忌 印 刷 者: 重庆升光电力印务有限公司印刷 发 行 者: 全国新华书店经销 开 版 书 印 定 本: 787× 1092 1 /16 印张: 15. 75 次: 2005 年 1 月第 1 版 号: ISBN 7-5624-3294-5 数: 1—3 000 价: 35. 00 元 2005 年 1 月第 1 次印刷 社 邮 传 址: 重庆市沙坪坝正街 174 号重庆大学( A 区) 内 编: 400030 真: ( 023) 65103686 65105565 版式设计: 袁 江 责任印制: 秦 梅 字数: 324 千
致谢 致 Emi 和 Estelle, 谢谢你们的理解和耐心的支持, 谢谢你们没有因书的晚到而不喜欢我。 致 John Hattan, 这是你应得到的一个感谢。 本书是一群人合力协 作 的结 果, 由于 人太 多, 在 此不 能一 一提 及。但 是我 还是 要 指出 那些我记得的人的名字, 对于那些 不小心 被我 遗忘 的人 ( 或 者我 根本 就 不知 道却 在默 默奉 献的人) , 敬请原谅。 首先感谢 AndréLaMothe, 他赞成将 2D 融入 3D 书内, 才使得本书得以出版。 其次, 感 谢 两 位 可 爱 的、聪 明 能 干 的、辛 勤 奉 献 的 女 性: Emi Smith 和 Estelle Manticas———我的编辑。 另外感 谢我 的技 术顾问 Lorenzo D. Phillips, 他 是一个 优秀 的全 能人才, 给 了我 极大的 帮助, 希望我没有使他失望。 还要感谢: Dave Astle、Mason McCuskey、Kevin Hawkins、John Hattan、Ron Penton 以 及所 有那些我经常通过互联网联系的人们。 其他所有的人们, 谢谢你们。确 实是 所有 的人, 地球 上所 有的 同 胞( 活着 的、已经 去世 的以及那些尚未出生的婴儿) , 这样, 我就不会遗漏任何一个人了。
丛书编辑寄语 在 1995 年左右, 我出席了微软总 部的 一个 代号 为“ 宣判 日”的 活动。 这个 活动 主要是告诉开发者, 或者 应 该说 是 奉劝 开 发者, DOS 时代 已 经过 去 了, DirectX 到来 了。一些开发者对它表示 怀疑———许多 人在 使用 WinG 之前 曾经 信任 过微 软, 如果 现在询问微软有关 WinG 的技术, 微软就会矢口否认它的存在。无论如何, 微 软这次 是对的: DOS 时代已经过去 了, DirectX 到 来了。 DirectX 对 游戏 编程、图 形 以及 多媒 体世界产生了巨大的影响。但这个转 变过程 并不 容易, 事 实上, 直到 DirectX 3 . 0 出 现之后, 大多数游戏开发者 才开始 转向 DirectX, 摒 弃了 DOS4 G 和 32 位 平 面模 式的 DOS 游戏编程。 如今, 市面上讲述 DirectX 的书非常多, 上万的 开发人员在为 DirectX 编写代 码, 以 DirectX 为基础, 创建有着千万行代码规模的软件。 最近, 微软决定从 DirectX 8. 0 版 本中 完 全去 除 DirectDraw。 听到 这 个消 息 时, 我几乎快得心脏病了。确实, 我们可以一直使用 7. 0 版本的接 口和 DirectDraw, 那么 微软为什么要这样做呢? 简而 言 之就 是微 软想 整合 大 量的 DirectX 组件, 创建 一个 新的、清晰的 DirectX Graphics 和 DirectX Audio 系 统。这 是 一个 伟 大的 构 想, 但 是, 微软本来可以继续使用 DirectDraw, 为什么却没有呢? 不要因此而哭泣。你或许会 问: 有什 么损 失呢? 你必 须 使用 3D 接 口 来完 成所 有的 2D 图形处理———听起来相当 愚 蠢, 不是 吗? 好 像的 确 是这 样, 但是, 只要 多一 点耐心, 使用很少的代码, 就可以使用 Direct3D 的新接口完成 2D 图形处理, 另外, 还 可以 得到 各种各 样非 常卓越 的效 果, 例如 缩放、旋 转、透明以 及光 照等。基 本上, 可 以像渲染平面多边形一样渲染 2D 图像和精灵, 对多边形进行 的所有操 作, 对 这种新 的“3 D 精灵”也都适应。 为了帮助你渡过这个痛 苦的 过渡阶 段, Mr. Pazera 编写 了这 本 优秀 的作 品。本 书告诉读者如何使用新的 DirectX 8. 0 接口, 来创建 2D 精灵以及 使用这 些精灵 创建 3 D 效果。在本书中, 将会学习 IDirect3D8, 这个新接口是使用 Direct3D 的关键, 还将 Ⅰ
学习如何创建表面和纹 理, 以及 如何 使 用 Direct3D 硬 件加 速操 作和 变 换这 些对 象。 在讲解完必要的 2D 基础知识后, 本书将转向讲述一些 3 D 概念, 帮助你在 2D 游戏作 品中加入 3D 性能。 最后, 本书 后 面有 多 个游 戏 编 程示 例, 说 明 如何 创 建 卷 轴视 角 ( scrolling) 游戏、俯视视角( top down view) 游戏、斜视角( ISOmetric) 游戏等等。 本书不是一本应该收藏 在 图书 室里 的书, 而是 一本 必 须收 藏在 图 书室 里的 书! 对于某些比较难实现的东 西, 读者 不必 再 去费 力尝 试, 因 为它 们已 经被 Pazera 先生 经过痛苦的尝试之后研究 出来 了, 这 本书 是他 辛苦 劳动 的 结晶, 以 一种 读 者容 易吸 收的方式呈现在你面前, 书中的知识可以立即在游戏中得以运用。 诚挚的 AndréLaMothe Series Editor Ⅱ
介绍 欢迎阅读本书。我由衷地希 望你 能 够喜 欢本 书。为 了此 书的 出 版, 我和 许多 人 ( 许多 人我都没有见过面而且我希望能够见到他们) 曾进行了长时间的努力。 如果 你已 经直 接跳到 了第 一章, 可 能就会 发现 我直接 进入 了正 题, 而不是 先用 数百页 的篇幅来讲述基本的 Windows 编程以及基本的 DirectX 信息。 Focus on 系列丛书都是采用直接 讲述主 题的 方法。原 因同 读者的 抱怨 有关, 我的 上本 书 Isometric Game Programming with DirectX 7 . 0, 读者抱怨最多的是: ( a) 书的价钱太高; ( b) WIN32 /DirectX 教程占用了全书整整三分之 一的 篇幅。因 为 WIN32 /DirectX 部 分占 用了整 整 250 页, 这本书的篇幅就膨胀到了 700 多页。 书的 页码越 多, 印刷 所需的 费用 也就 越高, 并且费用也最终会落到消费者的头上( 这就是商业的本质 ) 。基于以 上原因, 本书 就没有包 含基础部分。目前市面上有非常多的书 讲述基 本 WIN32 /DirectX 的 知识 ( 说不 定你 手头上 就有一本) , 因此本书就不再进行这方面的讲述了。 但是, 因为本书没有讲述基础知识, 要想从本 书中学 有所获, 你 应该 对游戏 编程 知识有 一定的了解( 需要什么程度的了解, 请参考下面“ 本书面向的阅读对象”部分) 。 本 书讲述的内 容 本书主要讲述 Direct3D, 它是 DirectX 的一个组件, 主要用于渲染三维场景( 或至少粗略 地逼进三维) 。但是, 和其他的 Direct3D 书不 同, 本 书并 没有 实 际讲 述在 传统 场景 中 的 3D 渲染, 而是讲述 2D 渲染, 对 Direct3 D 的主题而言, 2D 渲染是一种非常 难的方法。本书将竭 力讲述一些 API 的实际 使 用方 法, 而 不 是讲 述 如 何按 照 这些 API 的 原 本设 计 意 图 进 行使 用。虽然二者的差别很细微, 但却至关重要。 在本书中, 绝大部分内容都只起一个桥梁的作用。虽然 2D 游戏还有 生存空间 ( 并且一 直都有, 不是所有的游戏都 需要 3D) , 但空 间却 在不 断缩 减。那 么本 书 提供 的桥 梁通 往何 处? 读完本书, 就 能更 好 地 领 会 Direct3D 的 内 幕, 当 再 次 阅 读 以 前 让 你 如 坠 云 里 雾 中 的 Direct3D 书时, 就会感到更容易了。 Ⅰ
本 书面向的阅 读对象 如果你是一个 2D 程序员, 就应该非常熟悉某些 2D API, 比如 GDI、DirectDraw、SDL 等, 重要的是, 你应该很好地掌握 2D 游戏编程所用到的各种 技巧。当然, 这 只表明你 是一个游 戏程序员, 比所有新手的平均水平要高出一些, 但你不一定通晓全部。 最理想的情况就是, 你是 一 个 2D 游 戏程 序 员, 没 有 找 到 /买 到 / 读 不懂 一 本 或 者 多本 Direct3D 方面的 书, 总是 无法理 解并 掌握 Direct3D, 所有 和 Direct3 D 相关 的书 和 /或 所有互 联网上的教程, 你都无法很好地 理解, 即 使主题 是用 Direct3D 进 行 2 D 编 程, 但是 这些 书都 是从 3D 程序员的角度进行书写的, 而不是从一个 2D 程序员的角度。 本书所使用的程序设计语言是 C ++ , 并且使用了某些 C ++ 的特性, 但本书的绝大部分 要求你对 C 语言的知识有一个好的掌握。 关 于作者 Ernest Pazera 的兴趣非常广泛, 他写书( 这本书是他的第三个作品) 、开发游戏 以及其他 各类软件, 为 GameDev. net 编写网页 脚本, 在 他的 家乡 Wisconsin 的 Kenosha 经营 了一 家商 店; 空闲时, 他喜欢看科幻小说, 玩各种游戏( 不只限于计算机 游戏) , 最近几 个月, 他迷上了 葡萄柚汁。 Ⅱ
译者序 2001 年, 在听到微软决定从 DirectX 的 8. 0 版本中完全去除 DirectDraw 的消息时, 我几 乎不敢相信自己的耳朵, 因为这意味着从此之后必须使用 3D 接口来完成所有的 2D 图形处 理。在由 DirectDraw 向 Direct3D 过渡时, 不少 2D 程序员深感 此过程的 痛苦, 因为市 面上所 有和 Direct3 D 相关的书或互联网上的教程, 都是从 3D 程序员的角度 进行书 写的, 而不是从 一个 2D 程序员的角度, 这也给读者的理解增加了不少困 难。的确, 在和 朋友们进 行交流的 时候, 他们也常谈到由于该类书籍的缺乏带 来许多 学习 上的不 便。因 此, 寻找一 本好 的 2D 编程书籍成了我用心关注的一个问题。 转眼间时至 2004 年夏, 当重庆大学出版社的社长助理陈晓阳询问我是否有兴趣翻译由 Premier 出版社出版的这本有关 2 D 游戏编程的书籍时, 我意识到这本书如若能成功翻译, 将 无疑会成为广大 2D 游戏程序员 的福 音, 于我本 人, 也 达成 了自 己 的心 愿。因 此, 尽管 犹豫 数番, 我还是选择了冒失受命, 兢兢业业、夜以继日地完成了译稿工作。 本书是原著者数本广受读者欢迎的游戏编 程书籍 之一。细 心的 读者可 能会 发现, 本书 略 去 了 WIN32 / DirectX 部 分 的 讲 述 ( 一 来 降 低 了 书 的 价 格, 二 来 在 于 市 面 上 专 门 讲 述 WIN32 /DirectX 知识的书籍已经非常之多) , 开篇即直奔主题, 由浅入深地从 2D 游戏编程知 识逐渐向有关 3D 游戏编程的知 识进 行讲 述, 还不断 对二 者 进行 了穿 插讲 述。本 书的 前半 部分主要讲述如何使用 Direct3 D 来实现使 用 DirectDraw 所 能实 现的 功能, 详细 解释 了诸如 顶点缓冲、纹理等基本概念, 并切实解答了如何 创建多重 纹理、如何 用顶 点缓冲 渲染 图元等 问题; 后半部分开始逐步介绍 3D 相 关的 知识, 从读 者角 度考 虑, 用易 于 理解 的方 式详 细讲 述了诸如 Z 缓冲、alpha 混合、光照、X 文件、粒子 系统 等较高 级的 主题。 这两部 分知 识的结 合为读者从 2D 世 界 跨 越 到 3D 世 界 搭 设 了 一 道 桥 梁, 使 读 者 在 阅 读 完 本 书 后, 能 彻 悟 Direct3D 的知识, 因此也就 能 在阅 读 其他 难 度 更高 的 Direct3D 书时, 感到 更 轻 松一 些。因 此, 在翻译该书的过程中, 我感到, 对 2D 游戏程序员来说, 这是一 本知识 详尽且有 较强实用 性的游戏编程书籍, 并且凭借自身的体验及了解, 我也向大家推荐这本不可多得的好书。 在翻译本书的过程中, 我也历经了必然的喜悦 与忧愁。喜 的是 有幸 如此深 入地 研读域 外大家之作, 拓宽视野, 使自 己在 游 戏编 程方 面更 进了 一 步; 忧的 是翻 译 过程 中, 既要 体味 Ⅰ
分享到:
收藏