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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言:
! G, S6 F  A8 o& \: a- y4 Q: e$ ?6 C5 H6 J( g
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
- f8 ~1 Z& b* J9 j: ?
$ R" {2 r% d. ]8 x) o6 o) G3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
% }: \6 L. i1 E0 n* `
: M, n. }9 L1 J% J# p2 [! _7 u1 开发环境
- h- P2 ?$ `& m6 a+ c# y
$ p/ p2 |6 q9 I' X本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。 - m. \+ `3 p" Y! `

6 X+ O1 O$ r5 O& M: |5 l& S+ jDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。 $ [! _" [$ H+ h% `% @1 t

* X/ A. K- k/ \2 使用COM组件 : i5 G7 b- R1 F1 I+ w7 A  Q* g1 N
' T' P' G& Z$ B8 u$ L& }& s
DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。 2 e9 h, ~& [+ E/ Q  S- ?- L" ~
. k4 A0 r& x5 S' J4 {5 N
COM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。
% [0 _" P' x2 @- q# N' f% b
4 z7 n+ j; A/ t  o! i" a) X在Direct3D编程中,我们要做的工作基本上可以归纳为: & i' k6 n: [0 z* Z* H
  G9 h) n( C$ p1 `* h6 x0 v) b
调用适当的函数获取接口指针;   C. s7 W0 `, p, j

4 F- _: F( N6 g- M4 g调用接口的方法(成员函数)来完成所需功能; 1 }/ I1 f( R9 _( N
' R* j- f! d. [! W5 Z5 C  s
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 - `% r$ _" ^9 o( @9 R  V# M6 p, A# n' J

9 z* X3 a/ K, L' U% l
% O- z9 h0 ?0 C7 K' v- a7 H3 第一个程序-初始化Direct3D
! r! h: W9 d( `# V% T; N; j- W$ v- |! h
3.1 创建程序框架 ; i6 }: G/ q. I% a1 w, {

: r4 O" V; E+ K! z2 i3 f5 F3.2 初始化Direct3D
4 B# K2 o; m/ {2 N+ ~+ _8 w2 c' v, ?: U3 p+ Q% W
3.3 渲染
3 v) U9 z" W0 [- h8 j4 {' c; f0 d* p; t0 W  T
3.4 释放接口 9 a7 Q" W9 d; |$ [7 ]# U

. R' X5 Y- A7 C! r' S4 ?% |9 J! c4 画一个三角形
* `, c, x2 d1 Q; x. @+ v, H0 P
" {- d2 G$ R2 G0 `3 M4.1 一些数学概念 ! w: p( h. s5 [' {& Y

; N8 J# x4 ^8 B7 {7 s. |$ G4.2 画一个三角形 4 x; W# [6 j& R1 F5 z
6 J) |9 N% X: P
5 画一个三棱锥-索引缓存和Z缓存
+ n& F! |9 X4 a5 q3 Q1 B0 C/ T5 D; U# r5 d9 N" j3 u9 g" s
5.1 什么是索引缓存
( h' E( ~$ [, H& ^$ i4 N/ M0 v- b0 E/ i& Q! m( g# ]
5.2 创建索引缓存
+ _- ^5 I; c3 t& m3 n9 v- x: M2 \8 \6 G1 u: T- O
5.3 渲染索引缓存 / m2 ?, I. r$ N9 p! h9 ]7 n
0 t" Z& `4 a% T# y
5.4 打开Z缓存 3 h( Y' R# q3 f# K0 \2 l* \8 w
- K) Q- s9 j+ n) H7 i
6 画一个圆锥-灯光和材质
+ u0 s$ M* j) c
% R+ T, n# K$ a4 e- `4 s6.1基本概念
3 i, {! Z8 A2 |0 x* ?
$ G3 I" I: Z2 K5 m& S, |6.2 灯光
/ j- H4 g9 X3 S  R  q9 h8 m! Y
- H) w! x2 s9 n4 Y* I" }* }+ ~+ H6.3 材质
2 w! c# Y; u* _8 S$ V" p; s1 c8 G+ ?
! P& O  [: h/ v/ H. ~5 V$ }! S) ?6.4 画一个圆锥
: E: n. i1 j* d* W& o/ ?
$ p! [. `& `1 c( N: e+ j& R6.5高洛德着色和平面着色
* o. F" M; P& `9 v7 `8 j3 ?! a% T
7 为圆锥添加纹理 . \6 C7 M+ L7 s& `) s+ m
9 a9 N7 R' V4 W- J" {/ o0 ~
7.1 基本概念
; r- Z; ]' y$ y" |: n8 Q
: G  y+ T$ o2 T7.2 创建纹理 4 H0 y4 U7 {$ V3 `" M0 r
# U: \3 h4 K% X& _. U
7.3 用纹理渲染 * G0 ]; U- \- ?2 F+ Y
" F" J0 d6 y3 t% x0 X
8 Mesh模型
8 ~; I2 \+ Z8 s& T+ D* S
) U' C' G! z+ u1 u4 H# ~; P1 Y8.1 什么是Mesh模型 + A6 z+ S. h  S2 j- G& g2 l
2 w- V- x+ T) C* Q- k$ F+ R/ H
8.2 绘制Mesh模型 7 Z& _: \0 w2 b) C

, D* D" z! M, E9 显示文本 1 W, g4 h5 b2 F9 A( ^

3 E9 N5 |3 N& x, M$ N! H% @10 Direct3D中的2D
9 l# \. v4 `9 M! g3 K4 P) ~" K  {! z. T( W
11 Direct3D的程序结构
* B# v% M0 c$ ^9 `6 r" v7 G9 }: l6 g2 h4 T$ n) T$ @, K- r. B

1 C9 }; ^1 c3 C9 [: R' {请注意: $ M3 _7 b: b6 H6 p2 n

- g( c  V0 |5 `. ]4 u因为原文章使用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 O3 U( P$ r( n* ^
[s:23] 支持下,我们学的是opengl
+ @6 l. c' ]' U8 i6 ^' K" {  Q4 S
你能找点opengl的游戏文字显示的资料放在这里吗?
3 d  z, P  `+ K也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :
( u# p8 ~7 V% P# p% T% w前言:
7 ?6 g- |" w3 m9 z. d! a0 L6 Y: f, n5 ~6 Z4 k
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 & O9 X/ ^3 S% s$ k" k

. z! w* A* ]3 c# |. Q$ |* k3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
2 _# W7 C1 V$ C6 K4 o- v.......
, P( \$ ~: v9 \) t

& @! l) B) `7 A9 K& m学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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