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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言:
- D% q4 T% _% m. d" G& k/ Y1 l! X8 V5 Q
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
# w9 W  {' ~/ u5 f! A/ z' {: f6 P1 p( x: x. H
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 . p( k9 t  g1 K% O- ^& J' X5 C8 H
% K: L8 w- G* y3 E
1 开发环境
. V" X7 p; P2 x  L! U7 z) |1 A, i9 N6 h  `2 {& U+ a; Q6 H
本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。
2 y1 L) s2 [! R6 H& N) G: f
6 J7 s3 j% T* A8 IDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。 9 N* I# T/ ]1 |; u) k! ]/ h6 K
+ L3 B" W' D! [& E( \: ], l
2 使用COM组件
6 \) V' R+ ]( U6 i6 e% X3 z+ X" Q0 Q, A6 d0 d% M. k8 _6 H
DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。
+ H8 P3 j! J0 o9 B) j. h" u* M* q3 }* q+ r/ X& N. a
COM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。
( G! d6 D* W" N. x, U) B  ?5 q# \7 r6 O( U4 o* g) |
在Direct3D编程中,我们要做的工作基本上可以归纳为: 5 T/ P1 a$ x- q  F( C. O6 t
7 G7 P6 V0 T+ |9 q( N) `
调用适当的函数获取接口指针; ( e/ n) Y) Q* P5 ]$ m3 c0 E

6 P* P1 g' l0 q( P2 J) B调用接口的方法(成员函数)来完成所需功能; , o8 m; l/ B' ~& v5 f; X
! ^3 G( ?7 w* c  G" `1 D, h
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 " ^$ V& q6 W* h7 M4 E( e
: X" C( b& L6 R; M# U

/ i1 f4 y* [( V5 N  p4 }0 {3 第一个程序-初始化Direct3D % q" @. S9 H$ @% D

, p, v0 k. L* t# Z7 R% M3.1 创建程序框架
7 ~* g: k, f- f/ ^. A9 a
0 I9 A$ {/ ~/ l7 ^6 k3.2 初始化Direct3D
( e9 C/ V/ A) ~4 |# r* t, x8 I5 E7 P& S5 a
3.3 渲染 - L$ V4 |4 u+ q# l1 l* G

  K- @# o) o4 r+ b3.4 释放接口 5 D0 t0 n9 o6 [% h- b2 p

& E+ Z% z6 b+ ]1 R% W4 画一个三角形
; r; x0 k8 g( H! ^5 v
( h% K1 r8 M/ z! {5 f+ u0 o4.1 一些数学概念 / c3 q$ k7 M1 q
4 M# |% G  Y" a7 r; R) D; H
4.2 画一个三角形
/ h% d& E3 a8 v: z* O
' S# m8 F9 x; L6 X' }3 o5 画一个三棱锥-索引缓存和Z缓存 ' P% e6 i! W6 C/ e8 R2 ?0 f
' ~: c/ c7 b! P- v5 `; p  J. U7 \4 x
5.1 什么是索引缓存
( p9 u' f4 l6 F: h* }' g$ ^4 ^" r+ j- m
5.2 创建索引缓存
  U+ }: K5 b8 f2 e0 F" r$ R/ z. u/ b' V7 e/ ~+ S
5.3 渲染索引缓存
/ [4 _0 i, a) }2 ~, v6 k1 ?- A4 o6 w1 ^) e& c* y
5.4 打开Z缓存
) P+ ]' B; F- w; ~9 H$ E8 y# R
1 M2 \; X- V5 T6 画一个圆锥-灯光和材质 ' o6 @2 z3 J0 G/ `; Y1 O1 H

- q2 O  @) @# C& ~* t6.1基本概念
' Q7 @- e% U. k: M3 s  |' m# R
' k: p' ^8 b6 p# y! T6.2 灯光 , f0 @, c" ^1 c- v& F: J6 G) I

9 Z# F3 U' E/ |8 S6.3 材质   E4 ?' Y# n7 J! |1 ^) `4 M$ i8 o

  N9 c6 Q0 n0 z5 i# P3 V7 j0 }9 N6.4 画一个圆锥 * k; U  W/ N. v" L
7 j& `2 d# A- ^, |' O6 G
6.5高洛德着色和平面着色 2 q0 [2 y1 [1 U2 n

8 e5 K2 e' t$ o' O6 B9 X7 ?! t7 为圆锥添加纹理
  M# U0 v5 a& l, D
% c/ @5 z( N+ ^6 z* {2 M/ O7.1 基本概念 ; Y* y" B+ {0 @8 @# R

+ M8 N5 m* O# o5 ~) b( ~( B1 ]  B7.2 创建纹理
4 l- Y+ @: d' K( Y; d: A, J+ _+ b( ]8 o: p5 F5 X
7.3 用纹理渲染 % I- D) F; Y# e0 h, l$ S
1 \( q9 U0 {* }2 W' J" C
8 Mesh模型 1 G! C" R7 `$ f" K. x3 A3 ]
0 C6 q9 ~* `! k
8.1 什么是Mesh模型
/ @; H0 g6 ?7 a/ v: R$ P
5 {+ K+ \7 Z1 Q( {1 N- b0 _5 x" N) F8.2 绘制Mesh模型
- u$ _! ~; E9 l. F4 F; b: j( D! A( S& K/ z! g5 `: T8 G' l
9 显示文本
; g) b" T) ], e+ |' U8 f
4 R1 D8 }* i* l+ m+ J10 Direct3D中的2D
6 t; s; _: [& ?0 J$ f, D, h
, o6 h3 {- A$ e11 Direct3D的程序结构
: t7 w$ O, L; k6 ^4 i) h3 ^
0 e. g# o! D1 V& c. x! y, v% Y( d+ O7 v7 M1 s
请注意: 1 s3 G& j" [/ B% K
* S; \1 Z0 J; ^# }
因为原文章使用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发表的  :
4 s2 b1 p, {  C3 u1 J. ~1 W[s:23] 支持下,我们学的是opengl

4 {+ ^' r4 O* p/ N你能找点opengl的游戏文字显示的资料放在这里吗?6 B  U4 p0 W( j0 c. i
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :# C) }- ^8 P+ I6 D
前言: : \" }. L+ n2 G9 ]0 a( o

5 ^* w% y1 X4 P7 }5 ~' M7 P( x这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
5 W+ U4 J; Z2 S% O8 O
/ v# k2 T- V7 d3 I- t, s% V$ H3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
8 N( K6 }# M1 s0 ]: e6 _.......

" u/ l* b" L- `( S; r% R% s" [
$ K( b9 @; v" z; C# P! Z' B学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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