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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言: 9 E/ L  K1 s2 i& ^/ d% h  R
! C9 \: n6 _# A% R6 z- c) \* y& ?/ V
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 : Z( }) u$ Y) A" A

4 @$ \( F& x) R6 q) D3 n# c3 K3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 8 [" D+ |$ I3 Z- f
3 V! d+ ~. T* V5 r* J1 ~) P( y  z
1 开发环境
+ t# a; c2 R3 o% t- @/ M: t* E7 p. c% i! p; f( z6 z% I- u
本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。 * r, T: s: \6 @4 \+ e

! N$ {% ~5 ~& o, c8 z# e1 T1 LDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。 7 n8 E. I, A; c* Z4 P6 {' i9 I3 `
* i! D! ~2 s" q4 T. I# a& N
2 使用COM组件
9 [8 Z1 j+ C/ `+ _( H$ z, n4 S1 |
DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。
0 n1 ~* Y7 n. V( u# y
$ ]3 ^) I: l& y9 F0 k3 eCOM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。 3 {# o" S& U" f- v  {
2 I, v5 g4 c* S# g) j! \1 Q) G
在Direct3D编程中,我们要做的工作基本上可以归纳为:
5 N; }" }2 r" c, J/ L' @& W
, B6 h- ?6 n5 f; K$ E( j调用适当的函数获取接口指针; # V$ ~; `! \$ L1 o6 f
- ^* t3 R& M+ I, ^, h
调用接口的方法(成员函数)来完成所需功能;
& Q3 @( a$ |% }2 K: r0 Z& X0 H0 N2 r6 w0 F; k
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 / }7 ^7 f4 \4 O
* m' {( v+ f/ h7 L4 w( y& t( c
# V8 T- t5 J+ t' A* X# a& }
3 第一个程序-初始化Direct3D ( U3 e) I0 m9 [0 q; ?7 }9 f! h; {

/ x; M3 r, }. a" r! E. Z) P" e, `+ H. \3.1 创建程序框架 ' T8 j( t2 Y3 J; ^
  D& w! h3 P% |- F, M, G8 ^
3.2 初始化Direct3D 7 g% W* @$ u: m" W
% T# f, t6 X' C; U8 K) e
3.3 渲染 / G, k( q6 i/ g* ^* f7 p$ z
% a1 c$ s7 {8 S* a3 x. b- q
3.4 释放接口
# c0 ]# L6 V9 H
- o8 R$ k  B$ p/ H0 j! ]4 画一个三角形 4 n5 W+ h3 Z# h" D) C' v2 y
4 b, Z) k2 Q2 G6 H" j- Q2 K1 n
4.1 一些数学概念
* u6 e1 y& B) _& {! W& Q# X. [, M0 o& X; ]# _' n" k
4.2 画一个三角形
, `# I& i( O7 {$ ?0 q. i1 [
& P! y% M- v# o4 s5 P$ `5 画一个三棱锥-索引缓存和Z缓存
# z4 X7 Y3 X; q; ^
3 o0 k$ n6 H, ]# x2 V7 e5.1 什么是索引缓存 $ |3 ~* l) W5 A: u  G9 i

  b1 t7 ]+ O/ w1 W/ _5 K1 ~5.2 创建索引缓存
" B! v) Q& M3 o) j( j  U- J) q8 |5 h7 d0 r, \; U
5.3 渲染索引缓存 . Y9 M: K* M7 o( A" g% O8 G
, }5 V" ?0 U  C/ ~! _  }! s+ m
5.4 打开Z缓存 " M: O( w  v) }9 V: @+ B* E

# c/ a/ [' e/ |  E. o0 x2 a6 画一个圆锥-灯光和材质 ' ^' s1 {4 S( a0 X( V8 U
& \+ a) d0 c' j1 L- Z  R3 s
6.1基本概念
: N- w0 p4 U3 B  ]2 ~' }& I+ ]* M3 @4 U0 R' N! [9 U6 A- @
6.2 灯光 # N% C( _8 I( O# B0 x
& e' A  V+ g7 j+ {
6.3 材质
2 S5 S7 z7 g* E
& r, w! y; N# b$ `4 `6.4 画一个圆锥
. `1 a, j* [3 x7 V1 q
  R8 j4 Q, r; Y+ |; u6.5高洛德着色和平面着色
  k# T( Y+ r' Z0 m9 d: B. P8 L
/ w  Q/ d4 V$ R$ d. O2 ^, f# D7 [7 为圆锥添加纹理
0 d" n: r4 k% ?* ]2 `
6 @6 k* k' d0 d) R7.1 基本概念 ( U% D! J! r- e( a1 e, F

) K( {* a: u  l7 }7.2 创建纹理
* d% B# F6 J  }9 F; I8 T/ I& T; B  p* g' r, ]7 Q4 a. ^9 t
7.3 用纹理渲染
; O4 ~! y! p% c7 m- e! Z( }9 t6 j! @3 l* Y2 r
8 Mesh模型
% r0 Q: P. M% o2 t, J/ y  \* W, {- B
8.1 什么是Mesh模型
; U+ n, F4 N1 Y& N& C: D) ~  a: s/ t% _3 R+ n9 i2 F
8.2 绘制Mesh模型
1 G" r9 {% l; H2 }0 r# Q+ L; w8 q* W
9 显示文本 : q+ O+ m4 e$ ]
" o: u& I, E' z9 l% ], ?
10 Direct3D中的2D
8 ]6 X' I/ Q. p2 _+ \6 A- y" l. k0 n9 I' x7 Y
11 Direct3D的程序结构
8 A$ @* x, H: [5 x4 [$ B1 H/ n7 ^* ~7 V. Q0 V. z2 |  K- m
1 g. N3 b$ N* A% Q
请注意:
" t( n2 h" E3 F& q) c3 u1 Y8 q
% ^, [! n7 E5 B: t因为原文章使用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发表的  :) e: f+ E* B. E8 V# P
[s:23] 支持下,我们学的是opengl
* e  W# ?0 B+ g
你能找点opengl的游戏文字显示的资料放在这里吗?- M+ K3 S: N2 N
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :
) m. r" ~2 \: @. u5 p. B前言:
* J, f1 }4 p6 r) |& ^9 f* Z7 I9 ]( u9 n* M& W- j
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 : s. w5 c2 E. x& ~

  v4 e$ S( O! Q5 P$ m$ L, D4 _3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 % L! R# y0 r" E
.......
1 d4 N3 e7 t* k. c4 e

( [2 L' o( M; N学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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