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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言:
( C6 a6 K& T' U: c0 k" u/ ]4 o9 B2 r, }- V$ \' o
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
: P; w; u$ y- H, M+ V$ E" y% ?/ y: S! [/ y. y
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 4 _8 s: g& O2 O- r( H/ h! a  r
* T0 N" ?* _* j2 n$ h! M
1 开发环境
- c- _- ~( P" X! y, a1 A7 w6 F7 B* I6 i1 j, K- l8 {
本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。 ; A4 l  P1 h9 H7 U. [4 Q5 h% K
# c4 {. Z2 [! r0 w& s' l
DirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。 4 ^1 @7 |7 ~1 k8 ~6 Q( G6 W

- `0 e" E) {0 ?; ]  S, X$ S2 使用COM组件
' }7 t9 H, N- k- @8 `6 v# k) ~1 I& M. r
DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。 # Y( x7 L; h3 P/ w' k, a; M

1 x6 r* G8 K3 n2 wCOM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。
, y; e. [3 [* P0 i- A% D( i' ~7 ^1 G; J' B# z' U
在Direct3D编程中,我们要做的工作基本上可以归纳为: 4 f: @! N8 @  C8 ?# r
) W+ D+ h/ M4 c$ w; j1 a1 p: V
调用适当的函数获取接口指针;   x6 c7 r. g" r+ V; `6 H
0 X& J9 Q9 w2 h# b$ Q( b- g7 F
调用接口的方法(成员函数)来完成所需功能;
* k3 Y7 ^4 Y) r& D0 e2 u% j* t8 Y" {& O
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 9 S4 g0 N  F* t! i

6 U8 L' B# E& _5 D7 v
; b1 J, d" B8 q# ~" j3 第一个程序-初始化Direct3D 9 X) R3 n  {0 N6 v9 K8 p
5 `8 j2 V& g5 C0 e9 D
3.1 创建程序框架
7 w/ }. i: A# x, ^" [
2 `+ p9 P" v+ g9 |3 U3.2 初始化Direct3D
: r: A) r! e5 i1 d& I- X, ?( N- i7 R8 @/ H0 g
3.3 渲染 & ~' Y  T" o* T/ q; S' C- F

" G% g" H) Z# o3.4 释放接口 * {* M; F. V' s) B. u" I
' h0 Q1 T6 }, @/ y, e, N
4 画一个三角形 : H5 L; w. {. l7 W, |: V+ S
" X. |( c6 w7 N$ a! i- m
4.1 一些数学概念 9 H0 t) }7 u0 g" n. @5 V+ H
7 s2 L0 u* {3 _+ k: }
4.2 画一个三角形 0 c# k$ K6 p, F6 v, ]: P8 g7 y

" y9 Y0 D5 y1 t) H1 K7 B! n1 g5 画一个三棱锥-索引缓存和Z缓存 2 S# W8 h% M0 `5 @1 q

% I7 Y! |+ H/ H7 |) }6 m! E, r5.1 什么是索引缓存 : _& t, m8 c' M  n
" t9 z( |* g% k6 C' s
5.2 创建索引缓存 - e$ O$ p$ n6 u

4 I/ S$ Q6 W1 J4 k7 n9 a$ x5.3 渲染索引缓存 0 N# L, n' ~" `

1 F/ T5 c9 |( Z, ]1 i. n& J5.4 打开Z缓存 % ?4 S% Y7 ~  \1 d: ^2 ^: r. A
7 D4 V: y- e4 w, Y3 H& a- l  ]
6 画一个圆锥-灯光和材质
2 m% H3 G/ u( o$ K& C% q& q4 b
6 V. M/ E/ D9 r  B0 z8 h% m6.1基本概念
# F$ o# S9 M+ B
3 g0 S- r2 Z) m4 l6.2 灯光
& a! z. q, n" A5 r* J) |6 h9 \9 i  X7 y( H' g" j
6.3 材质
. k" `/ m) O& i/ W" h1 f2 k$ ^! d; S; w, y: y' A7 t
6.4 画一个圆锥 0 z0 m( f1 J6 X" `- ]9 |: W8 i9 n9 c7 l, P

! F6 G: u; t! S; g( a6.5高洛德着色和平面着色
8 e. }6 L4 K* i8 ]  a, y3 I, ~4 c& F" {( ~9 F1 p* `: X( C
7 为圆锥添加纹理 . P* W- Y8 |2 K# G5 @/ [8 g

& x2 ?/ i' V0 l. ]: ^& J7.1 基本概念
$ c# G+ t, N, i/ A+ n& ]( y( T6 ]
7.2 创建纹理 * l8 H/ Z# Q* U% Y+ d# x- q
& v. s) `& `, L# J$ `
7.3 用纹理渲染
9 I% {! `- |8 Q. m- o' F' F) ]6 V. t' E* ~( ^8 h
8 Mesh模型 ) o5 x" V  ?2 b8 t) T+ }1 l" d& P

5 K" ]# D5 u3 N" H7 E8.1 什么是Mesh模型
$ Z. h5 _/ r% r" d) R
8 W0 w4 P0 {9 @; |3 ~. E3 ?$ ?8.2 绘制Mesh模型   X8 z. j& s7 P6 ~5 i

; k" l" U4 }0 q( v+ z* ]9 显示文本 0 |* n1 \  Z2 e; B3 `, [

+ K- H, U! ^) X3 d  o10 Direct3D中的2D
/ y+ ~' `; E/ y6 j6 {: P7 \3 y
3 [2 w$ ?/ T, G9 u4 p& N3 }8 Z8 W11 Direct3D的程序结构 - o+ f9 W, }; m- y' l* ^8 f

% R5 \# ?3 w$ {# c" ^6 g: l# H2 P  r0 D5 B# u
请注意: / i* k- m! M7 P- M: V6 D. z

2 ^+ c/ m; j( H, e$ i2 D3 ?4 b因为原文章使用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发表的  :' o$ s2 a; @3 u1 o7 e! R7 ]6 N4 R
[s:23] 支持下,我们学的是opengl
1 s5 G5 ]) h8 e+ S' a
你能找点opengl的游戏文字显示的资料放在这里吗?& }4 @2 N2 n3 n- Q  A
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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; [* F7 g  S1 \6 K& `$ v8 _
前言: 9 f4 e5 ]  Q- ~) Y  C' h) t+ `

$ k; ]1 E, R. s# G' O* C% s这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 + R* d) A& z" k+ P) p, U' s

3 E$ E* I" D8 L- Y( ~3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 # Z, c0 P8 q9 V
.......

+ R8 j/ M/ i2 [: ~" Z, X
9 P* j8 K" c4 ^3 A$ Y. s6 a+ ?. k8 Y学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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