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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言: 0 f7 @: q! f- L. |1 p
& a5 W5 q0 x0 f* n% U
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
( l( ]' L2 e2 n5 Q7 @. j# n" k7 L6 |  M2 z' R
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
1 L, ^6 X" Q. v' @, W, {, u8 J$ ]  a/ J% ^- `+ r9 _5 U) C" {
1 开发环境 ( q8 J% K( Q3 B

9 C$ \) E$ L6 h& J0 i) |0 w本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。 3 N/ @$ V4 |6 @5 D

0 W! h! O+ t- x6 [# p1 BDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。
( k8 G2 ~2 [* q! Q5 {& w' j2 q& j+ \) F- K! t* C
2 使用COM组件 : q0 |5 K3 I+ Y" `  n7 b

- c% z9 e& W2 W4 D5 o( `7 WDirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。 : Z+ c6 D4 Q. G5 w' W, D! o
4 _: M) O& _$ n4 ]0 {, h: D8 s
COM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。
/ W9 v: m2 `$ k9 z% @1 g9 ?" T5 D& O" W" c
在Direct3D编程中,我们要做的工作基本上可以归纳为:
9 m, p. }% M- b( `
1 Z0 I+ f  g! }7 Z1 e调用适当的函数获取接口指针;
9 Z6 [3 g0 [2 X9 K- u" v; h9 H* d- W( {. d
调用接口的方法(成员函数)来完成所需功能; 4 I) H/ h  d/ m: n: S* |

2 R' N- V) H1 ~: G$ B+ [. w用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 + e! G& ?9 U5 U* D- [2 p- N% Y
! R5 u/ d* I. j0 {* S2 r) I
! y  _+ |+ Q) u* |1 _6 S
3 第一个程序-初始化Direct3D
% J. z3 E7 E. w5 |" l, B3 Y7 Y% z8 X9 [: `2 i  g
3.1 创建程序框架 # X4 U* ?: E2 n+ @

# O, s, z7 I" @* f$ e# t; X3 o3.2 初始化Direct3D ) Z/ J& T, {1 w7 k: |, Y9 c: p

8 U$ G) o  o0 l0 W) |3.3 渲染 1 B6 N" O4 e' V& |
9 P6 ~' s. t+ Q8 ?/ e( O- f
3.4 释放接口 2 d% }7 D& e) U; I2 v; l
  @, @" Y7 i0 X
4 画一个三角形 0 |! k1 ~. t9 ~  q/ D

2 C) H) ~3 T4 @' T4 \9 }4.1 一些数学概念
7 ~- U8 l7 k9 f' A, p# w9 Z+ s; E# {- C" g3 B- h% g1 f
4.2 画一个三角形 9 v* o& b# P) Q6 k; I( y+ O% h4 E
; G6 S9 I' N9 J) Q
5 画一个三棱锥-索引缓存和Z缓存
+ m, M2 n/ r9 A( s
5 l9 `/ w* x$ [' I$ w; q' V. I+ O4 }5.1 什么是索引缓存 1 \" ]) @- x: A  t

; z4 T3 w7 K* ?5.2 创建索引缓存 * v, g# h+ G' @) A! O; [
! `  g0 t2 ]7 l" f6 o! p
5.3 渲染索引缓存
3 j+ h% _+ p+ Z7 ?8 {8 W5 q
' N% n5 h+ Y0 I9 |5.4 打开Z缓存 : B- ~, [* \; N5 ^, i3 F

& x. ]& L- ~6 s/ E3 U0 z. C( f6 画一个圆锥-灯光和材质
  G* d( {- y$ N" O1 r2 w0 @# B; g- B1 z6 F/ @1 D
6.1基本概念 " a2 \: I) u8 B: @& g% _3 o7 p
6 f2 i; M8 T+ o& Q9 H2 G
6.2 灯光
" J6 {1 S6 I0 l
" ]: N2 o9 i5 e7 w5 o2 ?8 [6.3 材质
& q1 H6 r. W$ S( l! h# ]
$ a# d0 L- K, Z2 v6.4 画一个圆锥 % C% }# V& q2 t8 t

8 f7 q5 ]* v  r. R; F# E6.5高洛德着色和平面着色
  ], |% _1 F, G! l' m* D8 M
" K( o" g, d! V3 P% T! \7 为圆锥添加纹理 ; o- E* u' F; J" t" f

" J2 M8 }( D% f) z$ H$ y, _- E7.1 基本概念 * [3 G+ d( v# T( V

4 i/ D3 H  G! Z9 h7.2 创建纹理
7 ]5 B6 O/ n0 j, O: Z! j
2 o" x/ n1 `4 b; q; `: @. g7.3 用纹理渲染 $ j5 t6 `1 R1 ~( a6 p0 g# f( q7 ~

4 ?5 L' }. \' `' C8 Mesh模型
! R5 p" `; S1 U& T: L! W' u% r% ~4 n
8.1 什么是Mesh模型
+ f2 V' d9 p1 x4 E. ?) x3 Y
- x9 Y8 E# q! h' j8 I, _8.2 绘制Mesh模型
: N' C0 c9 H2 F/ W- k5 s" I, t' Y/ l% M; G* F) k  S0 _, n
9 显示文本 5 w8 `2 C  Q$ C) ~
! v9 M% m( w+ o  w8 j2 j
10 Direct3D中的2D % n" v6 m- d8 P9 H2 r* ^# r8 M' F( X

# ~. Y; I* g, A1 o: O1 [11 Direct3D的程序结构 3 ?" h- _/ k3 ]5 V( ?
: n3 F, I, {! ?2 ~
5 {0 P* B! Z9 [6 z3 R$ a) F
请注意:
! ~0 x1 w+ a( l/ N2 p1 B2 ?
" ~& ?& m+ N' f0 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发表的  :0 G( |9 q. z0 ]8 ?
[s:23] 支持下,我们学的是opengl

9 ]# f+ M) r3 L8 P. ?你能找点opengl的游戏文字显示的资料放在这里吗?
/ N) v' z6 ?: O9 Q) T# J! M也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :
3 L; N, F3 r0 a: L; E% X前言:
4 E( r6 O0 R! f4 V, X) Y- |( f5 f0 a' m5 s- L; X
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 1 q/ t; E' O0 [& k

  w# S6 t2 C7 ~& V: x% K3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
1 ?! j! ]* z; O& f! T* p  E/ o5 r" o.......
" z& w& p- O$ t! l
9 r/ k  H5 A2 B2 I! N$ Z9 h) p
学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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