设为首页收藏本站官方微博

【教程】Direct3D9初级教程

[复制链接]
查看: 5092|回复: 5
打印 上一主题 下一主题

【教程】Direct3D9初级教程

跳转到指定楼层
楼主
发表于 2008-12-27 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【教程】Direct3D9初级教程

前言:
% C0 w  c8 f+ Z/ L" D' f
: ?, ^- P1 I( r这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
- e: Z5 k8 m8 a7 k! q+ W; v
) ^/ ~; Y! Z) w# ?4 W. _( ^1 p: [3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
* N  w5 F! [( f. v2 Y
7 o9 R4 j, m4 W) h( B. G/ L2 o/ c1 开发环境 5 W: F  b6 d% D# E" B! U' {& g5 O

) a: y5 W* b2 w9 |" I3 X* v) ~本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。
% n4 q/ l! w; ~6 l* B
7 O+ [: t! b2 f' h* V9 \* [, IDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。
9 X7 z3 p+ ]* A5 m9 h( F
5 o# c& m" |1 l2 使用COM组件
7 m6 |7 C4 ?+ F
+ {/ j- i# E' n3 x6 kDirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。
, R2 H, J0 J, C3 J& i
6 q$ D- R2 K5 s6 ^3 ACOM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。 3 D- T' ~. S5 m& P/ h' d9 F

- @  S, f' Z! i) X在Direct3D编程中,我们要做的工作基本上可以归纳为: ! K: e# ]. v. [( b0 A& V; g
: ^! n8 J% A1 Z* B3 k. d
调用适当的函数获取接口指针;
1 D+ L6 `, O- e& i5 Q5 R- n
. A1 M) E" n/ d, i0 a* M- s0 |& [调用接口的方法(成员函数)来完成所需功能; $ h' N0 K1 }- Y3 V( ^" ?
9 F, H8 b" c8 r# d# u
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 3 m  t) y" \0 Q1 \6 o1 l* X# B

/ F, x* Q2 ^  c# u7 K
% \% d3 I* w2 k3 第一个程序-初始化Direct3D ) i+ |0 [6 \: V/ d( Z

. O4 T/ @+ x8 O" x3.1 创建程序框架
% ]7 Z* T% S" K6 L0 {
; s$ M% N1 x2 t  V/ U- e3 }4 y3.2 初始化Direct3D
8 K: E# z8 b; {
& L; o+ K9 a; y4 ]3.3 渲染 6 L4 D. @% {: b  S

7 x/ k, M) k5 |& |6 Z3.4 释放接口 9 j6 q" E' t' h5 X6 Q

5 g& P0 y; N4 D4 画一个三角形 2 w. C1 {" I3 h  S
8 B7 f6 c- _( P- e* L
4.1 一些数学概念
2 \, [! R3 P! c6 a5 Y& o# B
& C9 w8 _9 i) v- S' f$ }: c) N4.2 画一个三角形
6 L6 ]3 z. W! w3 e* e* t7 ?6 K( l: P/ }
5 画一个三棱锥-索引缓存和Z缓存 , c% e) K+ b! j1 M  i9 g. P
7 ~+ g9 v( a- T6 l1 F
5.1 什么是索引缓存
7 _' C" K/ o* t$ B: z% B" p4 x2 E& P
6 C0 H, S% t/ K  \7 r2 r5.2 创建索引缓存
* k9 S$ k8 ]% _
! r1 h8 @- s# }: E5 W) I4 W, J5.3 渲染索引缓存 5 }# J7 Z" g7 s: n

" X6 e# N/ l+ I/ V& s: i  B5.4 打开Z缓存 ' X& ~7 Q6 Y% E' j. z! P6 J
3 O, f/ v% W+ p/ l$ }) H7 l( p
6 画一个圆锥-灯光和材质
- x9 C* T' b0 n" v% t! O4 L7 H/ ]7 z; p1 w0 v
6.1基本概念
. r* A4 k: Y8 \' a0 w, z% R1 a8 Z
( r/ x$ z0 t* f6.2 灯光
, [, S* C1 Q: D# y9 L, A2 T! _4 f+ A5 E: j5 u. n
6.3 材质 5 l( c6 ]( M6 W7 H3 S) G

: y, }* Z4 Y8 W  G6.4 画一个圆锥
) a/ p0 b; @- c+ P  K' B7 ^2 n( e3 W6 Y* D
6.5高洛德着色和平面着色
, \7 u6 u) H+ u% f1 O( z* \( n' ^/ O& [
7 为圆锥添加纹理
" J8 D* @1 D! z( K; D
5 p3 s! |4 ~' C$ e# T' M& @% m7.1 基本概念 9 i( g3 D8 d6 x( B! ]
5 V6 H  g" H- o! b' S) S9 N; U
7.2 创建纹理 ) a. u4 V1 o+ p+ L8 x/ c

# `2 q6 a8 i5 h* k% P& t3 G7.3 用纹理渲染
5 h7 @* a5 f; n: }- ]6 ]# B2 K
8 Mesh模型 : i- n( Z/ @4 d! M0 o. P# t

/ C3 `1 M* l6 \. d: m% p! t# }8.1 什么是Mesh模型 " R8 S5 x: `6 l' c+ r3 H1 c
( p: y9 x7 a$ b: X! x, X/ ~
8.2 绘制Mesh模型 + V8 N2 P/ {) f' \. e
6 W) u2 u5 Z: [
9 显示文本
7 B3 ]9 [! K% q; u# n; m1 b) J2 Y  o2 c/ ~7 }/ j9 B- z( o
10 Direct3D中的2D
4 P  ]5 Q' x" J% D2 V  _$ E  H" N7 p" s
11 Direct3D的程序结构
# m( g$ c' \& ~6 v$ s6 R* t5 {) g5 L  x. }8 x2 [1 F
- F; B& `, o1 w
请注意:
- z% ^/ @0 J) z4 x3 J/ S/ ~0 n+ K7 _1 F% Y  `; R
因为原文章使用PDF格式编写,且文章比较长,插图多,不太容易转贴,感兴趣的同志请从下列地址下载全文

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-4-11 15:57 | 只看该作者
[s:23] 支持下,我们学的是opengl
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-4-11 20:14 | 只看该作者
引用第1楼灰色小狼于2009-04-11 15:57发表的  :
& U; r4 W8 G: ]) r% n4 U! \0 }[s:23] 支持下,我们学的是opengl
5 h* u7 i" o+ `/ E; G3 Q) k  `
你能找点opengl的游戏文字显示的资料放在这里吗?7 @9 B6 @5 _* w3 t+ O) P
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 2009-4-12 11:17 | 只看该作者
ok,我找找看
回复 支持 反对

使用道具 举报

5#
发表于 2009-12-1 11:12 | 只看该作者
正在学习,谢谢
回复 支持 反对

使用道具 举报

6#
发表于 2009-12-1 23:24 | 只看该作者
引用第0楼shane007于2008-12-27 11:14发表的 【教程】Direct3D9初级教程 :
; V/ x  i4 D: y* e; r9 R0 X# q/ ^前言:
/ O" f0 C1 m% i0 f/ `
# f2 x  C9 W7 o这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 0 V3 e* r7 n  g% _
6 Q+ M' _! f$ N* |6 o
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
( D) h) y$ Y; q$ ~.......
# E' _0 f% l0 U: C4 O& ?! [6 _
  t7 _: G. `8 Q( i
学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表