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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言: & ]  N% s" C! w4 t1 O& K" R

0 x" k: p/ ?6 I这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 / @/ T* V! m1 Y1 d1 ?( u' q
8 d* s4 U8 R% B& e! J, i  m' P2 ]2 Y
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 0 b1 L5 ]: P6 ~$ B- w+ f; Y

7 B  g6 w/ H* t) `# X% D1 ~9 b8 [! g1 开发环境
! n& z4 I8 n% o3 g0 y1 U/ `
* s$ H4 L9 W# p/ P, m2 i本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。
- d; b/ e- X: C6 S& H8 U
; l. L2 N. F/ ^" f: ~" uDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。   N) A$ T; M9 n$ E$ c# t7 g

7 G) ~! j7 d& @8 B$ R9 @2 使用COM组件   ]. W$ k6 W# `3 X" N
) X% |6 C" ?# l" p. b6 C* S
DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。
6 ?+ x* c9 z# I. d2 i. V5 |. Q5 a' v# q# S! r! M- S# n( L. x+ S% a
COM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。   t& L6 w7 D, ]7 G2 J
/ v0 M: B9 |: ^8 D; T  }
在Direct3D编程中,我们要做的工作基本上可以归纳为: 9 i. y4 D. w& u' n6 J& Q
) X$ n* v8 U) S& K3 u
调用适当的函数获取接口指针; 5 k. Q3 H% N$ H7 Q1 Q0 W

3 p7 a1 g$ o! [" p" q  e. g调用接口的方法(成员函数)来完成所需功能;
: S0 q  j9 X1 J+ R' d* {( X9 T2 w7 e" B( H4 h; g/ _' C. F' g" ^
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 / s8 R4 c+ n* L% |% K& J6 l

# T+ f' r! p# O, r% v2 g: O0 z2 t; u5 Q8 }6 s. q, N4 S. F0 W
3 第一个程序-初始化Direct3D
* L# ?' Y; B$ V9 N8 s
! }1 S! c+ n* w9 m6 s8 W3.1 创建程序框架 ! f8 L# G. [7 A8 j- c% F$ r7 X

$ n' U. V" J. L% o2 J3.2 初始化Direct3D - q% j5 U7 B' J' H- f1 ^
; c$ l/ U& F# s, P  `& r8 u
3.3 渲染
! C' q. D' s* Z% A7 _; r( u4 X) Z- v5 ]- J3 d$ L/ k  z
3.4 释放接口
, v! [9 t  i/ x% }! i: I8 }
$ }8 [4 M& k2 S, I4 画一个三角形 " G, w  A" x0 v

  J) x; B  S* Q4.1 一些数学概念 7 |3 S5 |( o; W2 ~8 X- f6 x) q
7 S2 G  O2 b9 F, i8 v! `7 |
4.2 画一个三角形
: @4 t4 H7 J; `9 N/ e9 n' D4 N0 l" c! b: N. F
5 画一个三棱锥-索引缓存和Z缓存
! {/ F. l' y9 }: J# E) I; m" W8 ]6 X0 i( N2 d  q
5.1 什么是索引缓存
* ^) M6 k+ H* K) u' M$ N5 q
4 r% j, D7 T2 E' D0 }& [+ w. r5.2 创建索引缓存 7 ~; n. J6 S' b) T

8 n* B7 d  ]! |7 ~! g! h4 f5.3 渲染索引缓存
. t4 h( I8 P$ ?) ^/ A. o- ?# \9 a& j* s$ p
5.4 打开Z缓存
3 B1 V7 d! n! _$ G9 \! F
8 ?* [+ f' g6 y# p- k) d6 D6 画一个圆锥-灯光和材质 + [# k/ X0 _0 K: ~; e
% E. m. m' J9 ]7 |8 W
6.1基本概念
/ W: d5 Z5 d: t# B  g  I
4 g8 ^6 X' E; q8 m8 u6.2 灯光 # G5 y# [" t" Z: s

3 `% x8 L1 f, c4 Y6 E6.3 材质 3 ^- U+ d  w0 z; R0 d1 i0 N

0 Y* r. z4 f* Q4 S& f0 P6.4 画一个圆锥
2 \9 J/ Y- R  n8 {1 U
/ s: H/ {4 M: O5 L6.5高洛德着色和平面着色
8 |5 g) K- ^; q# o4 z5 K# n* ?/ j/ s
7 为圆锥添加纹理
( X* M/ t3 Q" e6 @# N" B+ w& W1 ?& s  A
7.1 基本概念
+ n$ O4 v, b: }; j6 D4 V9 O2 p
# J) |5 }' {' x2 f: M7.2 创建纹理
- A, }  C' l% s% O
; N5 X! K; t7 ~( m" Q2 G+ |7.3 用纹理渲染
# ~2 c$ r, V. c( p" G. h/ ^7 T  o; Z7 X  G
8 Mesh模型
' K- U/ m$ m) @6 `4 M( |8 M. C* M0 K  f
8.1 什么是Mesh模型 * {: l8 P0 ]/ H4 e
( _- O$ I9 c* r, {. K
8.2 绘制Mesh模型
, i- J9 Z# Y3 p/ i2 [) Q: `  Q- e/ l( i3 K
9 显示文本 ( H9 Q0 C1 {  e. M- i& c/ [" H
; W4 P# q% w- N7 B- B2 Q
10 Direct3D中的2D / A  k- d6 t3 M; A: _5 ^# V0 T
+ r. M! k2 S6 p
11 Direct3D的程序结构 4 B9 L: x. j4 M; d6 p( r* s

3 p8 l7 f4 z7 ^/ J+ z! G1 ~$ r) O) x& H+ y0 {! [' s5 k0 @: Q$ f& d
请注意: 8 ]2 }9 w1 C: v) N3 F- F

5 b0 X: g7 }; k# h2 V' Z因为原文章使用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# u& Y  S" ^
[s:23] 支持下,我们学的是opengl

5 W* k; @  i  A$ J你能找点opengl的游戏文字显示的资料放在这里吗?5 h9 b5 X% z. k1 z
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :
1 `: }* R6 c7 Q: q前言: 9 I) m% ?# D  ~
2 O4 k( G8 r& \. u$ A6 C
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 " m9 F9 \1 K5 d1 {) Z5 Q0 H$ M  h

6 `1 A% O/ J* r9 g; \: y  L3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 0 G' R4 i9 X- r8 w- R/ ~
.......
4 b& Z+ ?9 L, j
$ [' v  Z! @0 [) M% |
学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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