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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言:   y% Y( A9 f' u" X( K( I1 ]

1 t2 V$ V% f: R! r: ~' [, d这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 " P, h* Y# m6 e8 {

# Z+ @# y4 j8 i3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 3 v6 D# P8 s- Q$ w: E8 `
. W* s  p( c9 O2 ?+ o3 c3 V0 [  J" x
1 开发环境
5 O6 Z% J0 {( d' i5 D( R" F6 i5 B
6 U0 s) v) D" P! w# |- d$ [5 W本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。 ) C- P3 D% t7 D/ f# f# |+ i
: m- m  H4 P; t  g0 J- D" d) b% W
DirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。 ( g- F6 M% W; d
8 s7 d7 s5 T, H# |. C' j% j5 b
2 使用COM组件
7 J1 [4 W- v( X1 Z$ u& K
8 ~; L- T4 [3 a. PDirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。
2 E: q; Q  c& G" z" p2 Q8 q0 M/ K; p. n
COM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。 " c$ [8 C$ t8 ^: R4 |: F
+ h7 y' i! [1 ^9 F& V- @( b
在Direct3D编程中,我们要做的工作基本上可以归纳为:
: u& _+ {7 d9 ?$ k
  J- c9 \' J) m; {: Y调用适当的函数获取接口指针;
; W0 _, H8 q) V7 A! U+ @% p$ ?+ K! Y% Y/ P) j
调用接口的方法(成员函数)来完成所需功能;
" L* q) A/ |3 z' O" f- m; M7 G  w0 X8 c$ E
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。
  I4 _+ r3 w0 t# ^
" W. j5 j9 I' U
  o8 ^) i0 p% s5 V* l3 第一个程序-初始化Direct3D
1 C: z1 ^7 f7 ^2 B' Z/ J# E5 n9 _- v( X: A9 ~4 Y2 ^8 W- I: o$ N
3.1 创建程序框架
0 T1 \0 Z* {, [2 C$ }5 \- W, P
# a! l# }# N1 ?4 [3.2 初始化Direct3D
3 E0 }' L7 y2 i
& i0 Z4 c( \" S: v3.3 渲染 5 h( m4 Q2 E# _+ v+ _
# C  D9 r- J( [
3.4 释放接口 2 Z. X% ^% e, o0 y% p' U2 x+ \$ V
; T4 [. {* B- T+ g
4 画一个三角形
  a: R$ i* R/ d* _/ o! K1 B& k' @* k8 g, J
4.1 一些数学概念 / J1 o/ O: i: E8 h" _7 Y

0 I& U' p  r0 }2 O4.2 画一个三角形 5 b8 c- f6 e! O

* S7 r1 y, A- D5 |5 画一个三棱锥-索引缓存和Z缓存
! F: D; [3 m- W. f2 y- Z
7 K7 b7 @9 w5 A: y. B  L9 H! Q5.1 什么是索引缓存
" Z$ t& d- ~2 W5 I( K; T& W, i( A! m$ r6 K: v6 ?
5.2 创建索引缓存 $ g: ]8 a% b2 O( k, ?( k8 c2 d# Q
1 K7 f( s: U! `- z
5.3 渲染索引缓存 / M3 q( V' g+ `* e1 ?, i5 Q6 ^
' X, J1 R7 m, [$ f5 w% z/ K
5.4 打开Z缓存
9 y: w* f, R! P& o
! ]; \: n/ ?# G( t7 E6 画一个圆锥-灯光和材质
7 ^8 e% i! o* U
' j8 ?, _$ m6 Q# N) z; G4 _8 C% U6.1基本概念
7 m. r9 |' ]  e& F
- `2 |* F' T( g- B/ Y6.2 灯光
3 c- o- }8 A3 g/ ?* t
- P; [6 q+ ]( T7 k5 M6.3 材质
% C% b# w9 e) u+ `1 v0 g% P  \, O" ~/ W' {9 Q4 [
6.4 画一个圆锥
, E/ W8 C5 d$ O5 _. w3 a# O( e0 |3 z( D' B. {5 O1 ?8 p' `
6.5高洛德着色和平面着色
: D* p% l1 G* K% h5 P- v$ N: a1 {
2 v# l" i( v! i9 `4 ]- m7 为圆锥添加纹理
( y5 a+ w& Y, A; ]/ m( x3 ]- M& K$ G3 A+ ~. \
7.1 基本概念 9 h. T/ b( M4 L" n2 [  z0 p
- R) `; q; ?' O8 [! q
7.2 创建纹理
8 J4 u5 L$ r, @" U2 ^( H, _
3 V- E$ W/ T& {( p! o7.3 用纹理渲染 8 M+ D3 X1 w) e

+ W, L4 B1 ]% c# q; f! p9 Y8 Mesh模型 5 b% d" P5 v: u. x, S) n/ ^( F0 b

4 @' b* {9 i$ i1 u5 k. W7 }8.1 什么是Mesh模型
7 b# b9 B) ^5 \! s, D6 ?; L/ F+ ?  \8 t7 }
8.2 绘制Mesh模型 . ]; K# p  D/ K" M& P* @

9 x& j; J- {( [5 T( e& O9 显示文本
4 p  a/ H4 n# H/ C& k8 U6 @3 h) T! c7 T8 P1 ]! ~
10 Direct3D中的2D 8 ^& @, O+ s* |* A
- l4 o' }; C: i8 }1 i+ k/ l9 K  }
11 Direct3D的程序结构
, [4 H/ V. z0 W) `8 c' b
1 y' k$ A2 r0 M
, _; q* c; _; r" p2 o- v+ f- C6 _请注意:
$ k8 v9 F4 X) R& M+ {. Y+ H) T9 {3 f
7 [2 G! K4 O" x" Y因为原文章使用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发表的  :
9 Y# C, p( w! ?[s:23] 支持下,我们学的是opengl

# J+ e3 ?2 ^( B+ X2 c7 S& u& e, e: t你能找点opengl的游戏文字显示的资料放在这里吗?( p0 v; O+ |% \/ g
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :4 g, h/ |7 t! W2 ]: a) e
前言: 5 d9 F' V  E; q* z' C. i7 V
! B& ^9 ?8 d# _6 M8 z2 U
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 $ o) \6 a& u8 o) T% U

' J* Q2 Z. d# c* Z; S3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
# a5 ?5 A* {+ F5 j.......
) T" w& |- r  b6 u7 d

) ]( s) r% r6 B6 H7 b' n" v3 T- O, h学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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