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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言: 5 R9 R/ J7 ^/ t/ S6 w* P2 ]8 v' f
& {# ]1 W0 P( O0 X9 s/ f
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 ) h* V, X1 o* K
6 y# r2 L/ q3 c# u) J' T, v
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
8 i7 i0 t( {! m5 i0 _, ^6 T( G' ^; x2 M
6 q; Q( Z8 l$ X* g- y" u$ I' U1 开发环境
+ W/ H/ `3 i1 p* n: P6 ?; r6 m, I3 |% X5 z8 ?+ R* f
本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。
: o' p4 `9 L! Q4 d' L; ?0 m$ X
$ x1 o$ Z) t3 n( w4 J  u) LDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。   _5 v% g" B* m' v: u8 N
; _0 P& X/ {8 D
2 使用COM组件
9 z$ N$ |- V6 d: u- J# W. X  X3 ~
+ [& ~: L7 k; V5 X2 l8 [( |0 m% }DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。 * Z; S, r) \+ O' |& z9 T( a

$ z5 y6 c0 ?4 S+ Q& \& v' KCOM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。
) B9 \2 T. ^2 ]. Y+ w3 L
, x9 i( }& ?; g8 W) {4 K6 N在Direct3D编程中,我们要做的工作基本上可以归纳为: 0 E- Q) ?) n5 a; T" W5 s4 i: S

2 Y& k% ~2 ]/ a9 {: v调用适当的函数获取接口指针; 7 d* [% h6 n0 k* x( t
( x" ~; G$ s1 G' P8 j, J
调用接口的方法(成员函数)来完成所需功能;
: k1 I& w% Q  M; i: w  J1 g) y  K, l0 L8 @  k' B8 J- ^
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。
1 g  x0 H; a  j; Q4 O6 f4 @1 ]6 L7 ~  h
! b5 V* S* }& R5 Z; q4 l# q5 \
3 第一个程序-初始化Direct3D
9 X9 b' _1 M6 n6 m0 H% ]$ \& S& l/ M0 `% q  }
3.1 创建程序框架 . }1 _! u2 [) z) k, g, M$ C

2 b6 P/ R  |- Y5 K% O3 H% o/ b3.2 初始化Direct3D
) ]: ^) G) q# E6 r, _/ A" C. O3 c% {0 b5 H6 k. W1 Q# Y
3.3 渲染
' F7 `+ y% b3 k8 z  s- |0 ]
' J) B7 g0 x4 p3.4 释放接口
) [" ]% S+ M$ u- ^/ e" L" y3 t3 L# l) v! U  P
4 画一个三角形
) w$ i5 K% Y- ?" e( {. l4 ~0 F/ U* ?$ n
4.1 一些数学概念
; ?3 n5 V$ W% R/ n' x* x, @  t8 v- L; G& b' W! n5 {! Y
4.2 画一个三角形
4 a* x9 J. O1 v6 k% U4 n' |: R$ a' P4 W' D8 G2 B
5 画一个三棱锥-索引缓存和Z缓存
- j! K2 v9 e9 T5 v' a3 I' m( J0 r7 Z7 v- P$ t
5.1 什么是索引缓存
% d( p% B( Z9 a/ ^, c. }
# U' ]( t$ n% L* o4 p1 i5.2 创建索引缓存
; P5 Z/ Q) u3 Q3 [/ \. E
+ _' n  q! q7 y5.3 渲染索引缓存
' Q# {1 s! |, d- a" X1 N! ~8 y/ A( |7 |! |1 I3 Y4 D  X
5.4 打开Z缓存 / d2 f, O/ h% h0 ^4 Y! A3 w; ^

5 V7 [8 _, }( P& Y6 画一个圆锥-灯光和材质   N9 m8 t7 W& ^7 h  w7 A$ Q- ~

7 s3 ]1 r- h1 ~' b3 b3 p6.1基本概念
9 w/ }2 m) q* R$ Y" R
5 o# e3 i$ w) j+ T4 O$ d) T6.2 灯光 : }5 Z# F# q6 P* J/ C( m9 }

& g$ p) w+ D, F3 H! h' E6.3 材质
" `% f: d+ N* H8 K5 h1 E3 J$ `0 E" _. w
6.4 画一个圆锥 & j- P3 c; V+ m3 G. m8 w. b
3 Y# k  p" v3 G6 l
6.5高洛德着色和平面着色
0 v7 O* K5 u1 B4 T" j, L' M
% b+ Y: P& I  h# L# [! K7 为圆锥添加纹理 + t  q# y* v3 U  R0 r
: ~6 s- c+ @! ?/ |6 z$ j
7.1 基本概念 " @  x8 V) u9 d
; r9 @$ W) u; @, w, C6 G- @
7.2 创建纹理 6 z8 l( x* z. `% o& m. V# a3 j
  z9 X" X. d% @
7.3 用纹理渲染 2 y* U0 Z. C) w' f8 w: g' L

; Q5 ~, w; V# O# c+ C8 Mesh模型
& r  U$ S* P" y: v& k
+ Y# J5 ^; Y1 z' e  s) r9 ?8.1 什么是Mesh模型
! v3 X5 r$ K. L* P2 z8 c  C1 v) Y# m5 z  o; T6 E% k* Y
8.2 绘制Mesh模型
4 v; c/ y+ K- T7 R/ z3 P* t7 f- }- T( ^
9 显示文本
* |4 |! Z0 M( V) L+ |9 ^5 t( e# |; A( D# U
10 Direct3D中的2D 0 f; w. ~7 k" l, I3 E/ ~

( i  X, z, v3 d/ P7 l- _: o% L2 M11 Direct3D的程序结构 + \4 t/ }1 `  o, W4 F4 `$ W7 F
' A" a6 X3 I5 H+ i% f6 t7 ^

+ Y$ a7 Q3 E4 d3 Q请注意: 9 E2 u/ I% T9 F* L6 d
$ N! ^+ a1 P, a7 \2 i# e
因为原文章使用PDF格式编写,且文章比较长,插图多,不太容易转贴,感兴趣的同志请从下列地址下载全文

本帖子中包含更多资源

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

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

使用道具 举报

6#
发表于 2009-12-1 23:24 | 只看该作者
引用第0楼shane007于2008-12-27 11:14发表的 【教程】Direct3D9初级教程 :3 z. @) ^; o9 W! e' T& Q
前言: 0 d0 L+ q6 a8 P/ l& b- A

$ ]# l, @- b% H  x& v0 ^9 ~) Y' Z这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
4 p% Z% @' Q1 M: q7 [: X" p' Y- B# H6 @& }3 k# E$ \# _
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。   x3 F  ~) L, [, j" k0 t6 {
.......
" U4 F8 e, K5 Z9 b) z
6 K/ k2 ]& s2 E" f3 m6 x
学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

板凳
 楼主| 发表于 2009-4-11 20:14 | 只看该作者
引用第1楼灰色小狼于2009-04-11 15:57发表的  :
0 ^' c7 f0 ]/ c- G, ^$ T[s:23] 支持下,我们学的是opengl
- I  ^" L6 x" C8 x
你能找点opengl的游戏文字显示的资料放在这里吗?1 f& _+ v7 f, R, S$ {4 B0 O- Q0 j
也许对汉化有用。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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