冒险解谜游戏中文网 ChinaAVG

标题: 【教程】Direct3D9初级教程 [打印本页]

作者: shane007    时间: 2008-12-27 11:14
标题: 【教程】Direct3D9初级教程
前言: + q, n, l1 d9 W2 C: b& ~
$ _3 m; \; V: T
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
2 K, U. H" y4 {+ L, G
/ ^5 s, F, y0 p6 q7 C3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
6 q% z& m! \* I6 E$ u- `+ P. o) {9 S- i( I: Z2 e. {- m
1 开发环境 ' w/ ~3 ]. p! D- z
) ?3 U) h: v* w  X7 G7 I. K
本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。
: O2 n5 o. v$ R6 l1 y" l
9 k4 S( `  m8 O  V2 bDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。 ! \  K5 ]" y' b
  g  _3 N! I+ S4 z' X9 {  M4 g: L+ F
2 使用COM组件 $ q. D  |/ _9 J1 _. i
3 A+ g# y+ ?3 {" O# w6 p, |+ u
DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。
9 @+ B' @% M* J' Q6 D
' [& ^) N/ `' d) yCOM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。
" v! H) v; b4 Y6 G  u; k+ i  p: F2 z) a: |/ X, a- ~  i
在Direct3D编程中,我们要做的工作基本上可以归纳为: 3 I0 i3 G3 G0 N5 c- l& v( @7 z  f
+ r! K" L& n! x* C
调用适当的函数获取接口指针;
" J2 Q; A: m( w3 c3 O  W9 u7 d( Y: a$ w1 i
调用接口的方法(成员函数)来完成所需功能; $ s! H: _1 I( J1 X* Y9 m
% S! l$ Y$ Q. T/ G/ C. ?
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 1 [3 q' f$ A# k

: G. H0 j" n9 P4 C
0 l5 }5 p9 `$ S) N; u3 第一个程序-初始化Direct3D & J! A8 x/ }% D2 ]9 J7 p) M
% b7 k+ a0 I2 y9 R6 v5 H
3.1 创建程序框架
' y: F  d9 |; _/ k: u/ T4 y1 o& `& E! u( U8 `$ e
3.2 初始化Direct3D
- ], e3 c% ^) o( s( e: b7 O( W  L
3.3 渲染
- G- X4 }! v) g1 {& B* @, _6 @" P8 m7 l* t7 G- K; b- Z7 U! q
3.4 释放接口 7 g* y9 e0 `& d
. Q/ d! y& q& `. h" [$ ^/ O, m
4 画一个三角形 2 e1 i- w2 Y( h( E2 n
5 d: ^# j+ h! }) d% R! |% S; ~
4.1 一些数学概念 " e* b. q2 ?' U' f2 }
6 f! I" G  I2 F& S* Z  q' S3 V4 ?
4.2 画一个三角形 ( a! ]% ]1 H: G- _$ I0 g
4 I  g1 M( J, l, g! ?% C
5 画一个三棱锥-索引缓存和Z缓存
5 p" R1 C$ z- N8 t; Z5 ?4 I% W7 s/ I
5.1 什么是索引缓存
2 b% S+ Z4 Z; O
- z2 \1 [7 a2 W5.2 创建索引缓存
. s5 p: S; K' H! H
, e  }% Y0 M( Y' @) q$ a5.3 渲染索引缓存
8 U' _! T. Y+ L1 F" S7 X( S: Q0 b, Y5 N# ?: x/ v: a
5.4 打开Z缓存 5 a8 o% h# {4 w

6 b) f9 }% ^, i' R( b* O; P6 画一个圆锥-灯光和材质 2 k  p3 C# s2 ]0 @, ]) z7 z

- m/ d4 y! A; I0 [7 D/ U/ K9 b' e# V6.1基本概念 ; t2 c/ H0 V* I! ~8 V
2 E$ m3 V% Q0 H- M+ c6 M
6.2 灯光
% e  O9 \! C  B4 z  F
$ d. G9 G  |3 c2 {( S6.3 材质
: L% m" c6 \/ X. H
+ Y2 ~( Y( X6 E4 ]  c6.4 画一个圆锥
3 A9 _; _; Q! F0 W: \" {+ ]$ c7 G2 d5 ?
6.5高洛德着色和平面着色 8 P1 g1 W, x+ o- Z
& [, D( X# j3 r8 \9 m# ?
7 为圆锥添加纹理
) P- u0 N$ X5 m" ?! V' P- z- N+ g: l7 @3 H! n  B
7.1 基本概念
7 W: O0 V3 q6 S9 b0 R8 C! ~' H+ s& p( P; {1 q- r' M
7.2 创建纹理 * i6 L" u  j# C! Z

) W; k6 l1 u# N4 e9 |  h$ |# A7.3 用纹理渲染 % N3 e& G9 a, m6 X5 T

7 C- S8 D8 {) @# g0 z/ t  _8 Mesh模型
' Y4 V8 c) Y. H) X' [  T, |5 }6 I1 t3 \" o9 Z! E
8.1 什么是Mesh模型
! S7 {$ [8 U- d& S2 a! s8 F- C2 N  G$ [% `- n+ ]: u0 c* p
8.2 绘制Mesh模型 8 |6 X; s: h- y: ?3 C7 S, \
% P: q8 z6 K3 f- P# k
9 显示文本
! E0 r& y  J. ]2 c& l+ N9 Q4 Q1 l* C, y! T# N4 t% i
10 Direct3D中的2D
5 S! {% g- s/ v. Y( J( ]7 d& B' |$ Z! N  n& k$ L" |) n3 u8 f/ s, ^
11 Direct3D的程序结构 4 S" V; Z6 I2 {' o$ i1 K

0 E% s/ |* f# M, T6 F3 ^! t: M& h$ m3 s8 Z9 Z* o' q
请注意: 1 N7 q0 Q- P- G& ^3 z
) m. U& `$ h) |  q* Y2 S( U" b
因为原文章使用PDF格式编写,且文章比较长,插图多,不太容易转贴,感兴趣的同志请从下列地址下载全文

作者: 灰色小狼    时间: 2009-4-11 15:57
[s:23] 支持下,我们学的是opengl
作者: shane007    时间: 2009-4-11 20:14
引用第1楼灰色小狼于2009-04-11 15:57发表的  :
0 t6 R% ^2 a0 X. _; _[s:23] 支持下,我们学的是opengl

: v7 C: r, ~/ w+ N% _+ ]你能找点opengl的游戏文字显示的资料放在这里吗?0 i( ^9 i0 K- f" e( ^& Z
也许对汉化有用。
作者: 灰色小狼    时间: 2009-4-12 11:17
ok,我找找看
作者: xidaduo    时间: 2009-12-1 11:12
正在学习,谢谢
作者: ssfve    时间: 2009-12-1 23:24
引用第0楼shane007于2008-12-27 11:14发表的 【教程】Direct3D9初级教程 :
+ @+ M) a. }) c: B7 r! N前言:
' R! [% X; Y$ ?4 X* ?1 \, g- K  N$ U2 G# M# e* H0 H! F. t
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。   k2 w: `* R7 p' J, t' ^1 T
; R) h& h7 v- m; p7 W
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
& t9 X( X- w5 |( m.......

- d4 I" B4 {* J; H1 b
+ c3 ~( S6 P2 j* I学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2