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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言:
* [  t: i1 @! Q
) `% o" Q: A2 S+ a9 }. d# d3 J这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
  l8 D5 x8 l4 q' J# o5 K* I. U2 R
3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
, G( W  S- K2 \0 H  G4 k6 i, z  \* z$ k" e' _% L6 R
1 开发环境 . ?) ^/ r) x6 @7 ?

( l" w7 r0 E4 ~本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。
6 v1 H2 N0 f* \0 T% ?& l2 Q/ m3 [/ B7 r& x4 ], N" A2 u
DirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。
7 {8 @* T9 m7 a4 d( Q6 B+ L+ v) @; w
1 [" }) g( K' p# K2 使用COM组件 6 [3 x- e! a! e* G: W6 M8 M2 |

2 m+ n. @1 x0 p4 ~) d& YDirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。 % M% l6 l( _# c7 k( k( q0 Q* `
# d$ j( |9 P- g7 c8 h
COM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。
; E% p) y) ?$ u' \) n7 D7 L2 H$ ~' y) I% N2 z! m/ {! ?' k
在Direct3D编程中,我们要做的工作基本上可以归纳为:
; x) X2 i8 J) R! J* ^" F4 ~' v+ z3 I; I! l
调用适当的函数获取接口指针; / E" T& W* K2 n. L+ t6 H3 f5 J5 G

) o# X, j; s9 U调用接口的方法(成员函数)来完成所需功能; / o& b7 f8 ~+ t9 \/ R9 c
% Y0 I/ A0 W+ q+ l. Y) p$ ?( I
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 * e: P2 D6 X) f) n6 A% _! J0 I
& V( ^; j* t; |1 Z& q6 j5 G& e
8 s! g* W/ Z& X) b
3 第一个程序-初始化Direct3D
2 v; I. H; ^: w& g' ~2 C3 I& m. {! @4 w# ]4 ~3 U' n
3.1 创建程序框架
7 _/ }/ ?! H" d: G4 n' w( l
' ?* P7 B) O% @* t0 g5 O3.2 初始化Direct3D
; ?* g6 O! v1 K" n  K( Z; J( }5 [" M- m5 p2 a6 u
3.3 渲染
; i! s. {( F! }" n! I- d+ n
) L0 d, _: K# S2 R* j5 P3.4 释放接口 ; g+ ^/ Y$ Q' U2 _  \9 v

. H5 h/ v; D% c; T4 画一个三角形 3 E  |3 _, @. V' B6 o0 p7 S

8 f* m1 ?4 S" b+ W4.1 一些数学概念
8 ~, W" F2 D7 B& y2 B4 b- q: _9 s
- l. q1 ^+ C# x7 h4.2 画一个三角形
1 G- A6 @, |3 G/ k+ n8 l: z* A- K7 j% ^$ ]9 U$ U  m: }* V9 }# A
5 画一个三棱锥-索引缓存和Z缓存 ) a' b, K- _6 m; ]8 ]9 K: N

" E) P( ~! x9 J4 u. j/ u+ ^5.1 什么是索引缓存
" _4 {: @- h0 Y4 R5 j9 d! ^5 z7 n8 n5 r" D& e; N5 i
5.2 创建索引缓存
' A% `/ o$ N; v1 F' u! }8 `' y/ T9 H/ d  w% r$ L9 T5 k" d
5.3 渲染索引缓存 + D8 C4 X/ D/ [& \! b
3 ~( z0 L2 `! j( }! A* L) ?
5.4 打开Z缓存 . G" [) }1 r5 ]* Q0 `

! Z4 z  U* ]: s5 @1 q+ q; W) D& M' n6 画一个圆锥-灯光和材质 5 N9 R- H! u6 S: b2 n- _$ e! v
) |4 a( m8 W" A- s$ l9 B, \: Z9 A
6.1基本概念
- z; k; L' ^( O9 \( B) V1 _! R5 i( _& z& W
6.2 灯光 , g+ L% f% v- U$ a) e7 }) b

* ~$ X# q" D' N6.3 材质 & L) V) Q8 a0 k- m
: X, s+ |, h8 ?/ B. P' x3 z; N
6.4 画一个圆锥
) m1 M# Q; I: o8 y
: }5 |) I* K, ?- ]" _7 p/ Q0 B0 p6.5高洛德着色和平面着色 / k: J& N8 _# Z5 S6 ?1 x
. D% C# L* n9 ^1 s- i: k
7 为圆锥添加纹理
" ^# P5 a, x: ^9 R' q
5 _& j7 h3 f& c3 l* X7.1 基本概念 0 M" q. \4 I! l: N% q0 S
. k5 Q; z; ?8 ]* j6 d
7.2 创建纹理
% ]2 T4 ]8 f) D/ o( m, i3 K4 h; s+ `  u: _% R& \7 w2 W
7.3 用纹理渲染 8 L8 Y$ a# }4 `; s8 I( v! a
; ?1 c6 \/ v/ h9 V
8 Mesh模型
: \) F' K  d2 z/ Z# ]. C9 E- d. s
8.1 什么是Mesh模型
( C8 Y# M5 V# d; W
( d8 K" r; X, {! @3 C1 o4 S8.2 绘制Mesh模型 ! x1 y6 ~& e! P+ D! m* b
* m+ O0 L6 K5 s6 k: D7 b$ `( C
9 显示文本
7 v. ^: \% B0 e
# |( i2 s2 m* y3 c1 f; f# s10 Direct3D中的2D
9 K* @; I# D5 M$ T9 o, K+ q8 {* H' F+ f: Z- j
11 Direct3D的程序结构
; H% h( a. R+ F! m2 P2 b% h" Z8 g% t' @7 j! T( n
" R& H) x$ @% S
请注意: ) ~, }# x1 f' k/ m# o

/ E  L. r, z' _6 L* v$ O. W因为原文章使用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发表的  :6 I" @5 X8 G$ p% v
[s:23] 支持下,我们学的是opengl
4 h+ k6 q2 D6 B* D6 S3 F: m
你能找点opengl的游戏文字显示的资料放在这里吗?6 _, W5 N" U" v3 I  L4 S
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :7 Q4 `, _! p9 b% q, \- Y8 n( U
前言:
5 U5 U" K4 @/ f1 e' D# h1 y
1 }9 r( X# v+ B; A/ C这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
# d9 s6 U) o1 s2 m1 H
, x+ n+ _: ], E# z3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
, S8 j) o3 s$ C3 l.......
' l' @* p+ J7 \, M3 j4 Q( S- e) z
3 V2 u5 H$ h) V. ]8 y2 t$ a2 d
学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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