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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

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

【教程】Direct3D9初级教程

前言: * Y1 Z9 [: s2 J( |+ p% N- i
3 J) ~9 I1 l  }8 G' n( D+ N
这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。 5 m3 {5 n: L+ U2 h7 x0 \8 t/ {) c2 X

4 O  c; }2 y8 g' D3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 & ?6 h4 D0 g. u' `

9 ^5 s. N; n$ d; J  {* ]$ W5 A' e1 开发环境 ! o3 m9 O- e0 S2 Y: f0 E
9 g' C9 a' z8 q! F8 ?8 ?
本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从微软网站下载安装DirectX SDK,我用的是最新的9.0版,大概200多兆,网址 http://www.microsoft.com/downloads/ 。安装完SDK后,开发环境就搭建好了。当然,要运行编译好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。 : H" ^/ o. ^4 Y4 p

  P# b2 E- Z& N% T5 |* q$ oDirectX9 SDK为VC用户提供了一个程序向导,可以很方便地生成“空”的Direct3D程序。不过为了便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加Direct3D绘图功能。 / X$ F" n- U8 i) }, Q, |- L7 x
4 Z2 T- e  D& |# a* I0 E1 f& v
2 使用COM组件 2 k# D# _2 ]: y+ Q

: r: H) r" t  @DirectX的功能都是以COM组件的形式提供的。COM是组件对象模型(Component Object Model)的简写,它是一种协议,用来实现软件模块间的二进制连接。当这种连接建立后,两个模块之间就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。 ) h. K5 J1 t; `! I* k8 ]

) W8 g* |8 N' WCOM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开发人员,只要了解接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的成员函数,来访问COM组件,实现组件的功能。在COM术语中,这些成员函数被称作方法(Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在于它的生成和销毁都由系统完成,无须用户干预。 " {+ i! S- G1 E
* n( t' s$ R* G
在Direct3D编程中,我们要做的工作基本上可以归纳为: : Z2 \$ L" ~  p: ~  b

7 ]/ H. {/ v4 Q调用适当的函数获取接口指针;
0 I' g, t  O. N7 E9 l3 s
7 A4 _, H' [. R: L" q3 j调用接口的方法(成员函数)来完成所需功能;
7 y* p1 x# D8 r% a2 J9 J* C( E2 i  ]& y* |$ }1 o
用完接口后,调用Release方法进行“释放”,注意释放顺序应该和获取它们的顺序相反。 . q* _2 z% N+ V$ G' L% ?
  K8 p; \, B6 |% l, ?

* L! Z( g. Z7 I* o3 第一个程序-初始化Direct3D
- s: R% A' v2 v" I+ f# W  ^
2 }. A0 o. F! _  c4 C4 C; z; k) l: [3.1 创建程序框架
3 s8 q: K) W: b1 Z7 f: E9 x
, Q+ j2 x( |, Y# P' z: s# Q$ f3.2 初始化Direct3D
, H) o* h8 a8 B% z; N3 I. q6 |; V* Z* v/ o0 h; Z+ u
3.3 渲染 / s/ z4 G$ U& g" y+ M7 R
$ n* U  `8 @' A
3.4 释放接口 / z1 |  t, x4 p2 ]1 F

$ O6 Z7 N4 T: P( _- O: N4 画一个三角形
- j! O9 V2 H% n# F- L- C; u. Z6 D; Q& @" @3 K
4.1 一些数学概念
; P; z5 A5 q+ s# M. p/ C( c6 }% W. g- O4 R" I
4.2 画一个三角形
5 x; ^8 A8 N8 g! L. y
0 q/ d0 I  h, T5 j8 I' ?* _$ d5 画一个三棱锥-索引缓存和Z缓存 8 T: n) e/ u& H, F4 h+ Z
  v% Q1 y- m6 F/ x' F9 o- C
5.1 什么是索引缓存 / M' S# n4 U, A& Z  O% Y

& ~* O) z$ |5 J" v( g0 F5.2 创建索引缓存 7 g3 w+ |% z$ F  {% S5 P/ T6 E

7 _, V. Z' t- }4 q8 @! ^( q' Q5.3 渲染索引缓存   d! o) n$ g# p

. w- t% ~9 j5 x. ~6 n2 l) G  s7 s5.4 打开Z缓存 ( o: u- ]8 n$ O) X5 v5 E  H6 U& Q
. f& O) D( Z1 K) L
6 画一个圆锥-灯光和材质
8 `( X8 K5 }& h8 z
4 c- G7 f+ V! Z! w! t% z+ _6.1基本概念
: V' ]1 [7 I3 m, ^! P# ?8 L
6 _6 K( _2 m9 u3 e% G0 h9 H, n6.2 灯光
* N6 C; N! C. {/ O7 c1 ~1 @. u6 d) `' L; B+ H* R+ I2 y1 g8 P6 {
6.3 材质
! p8 Q& ]. `( _: p3 p# z
8 N- |) V/ T; Z; }# Y& H6.4 画一个圆锥
; e- w0 d" [4 c7 ~( O: o; l  ?/ a6 M: S
6.5高洛德着色和平面着色 : B3 s4 h! j4 {# M
$ X5 u' G3 K5 Z# _
7 为圆锥添加纹理
1 f$ j9 s- x* O! `6 z! _4 j& |; Z9 G" ?6 [6 a0 ]
7.1 基本概念 / T  Q2 [" }9 a6 t3 B0 H2 v  F

# E, S# U5 W" [. y/ u# m  d7.2 创建纹理
: h# R' M7 k9 g% @
) z, S0 Q8 M9 A$ }0 u7.3 用纹理渲染 * {' J+ m* K7 M' N/ R

7 Y$ _, U+ u, L  r" E0 O" ]* ~5 q8 Mesh模型
$ E, i% X5 f& d" b
% P* X2 L9 m/ W1 b, U3 Y1 Y8.1 什么是Mesh模型
9 w1 a' p, |1 K9 _: f/ i3 h
4 [8 j3 ?( R$ ?8.2 绘制Mesh模型
; x( M( c( B# v. Q. c" p  `2 p5 ?" I3 C4 |+ @9 t8 ?
9 显示文本 % H' X% R9 |0 h7 V" W% a) w

6 N" j% I' [( F/ ~5 a10 Direct3D中的2D
$ k2 y3 A- l  A# h* ^! q( ^* Q+ O# R$ H1 a
11 Direct3D的程序结构
" t# a! |  C, r. u) H. [4 ^# ]: ^4 H: v3 r! E/ r6 l

# n$ m. v6 j* j2 I% n3 t! S2 f/ b. H请注意:
. m, A9 n% L0 H/ o; H0 P* i+ ?0 E) l8 d  e
因为原文章使用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发表的  :
/ a- d, F8 r( U5 }' \0 T7 k* j[s:23] 支持下,我们学的是opengl
) e  [. h& d3 G  a  }5 [  R
你能找点opengl的游戏文字显示的资料放在这里吗?- Q8 W6 \9 I& ?2 J
也许对汉化有用。
回复 支持 反对

使用道具 举报

地板
发表于 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初级教程 :8 Y8 j' n; i6 N* R+ ~# K' c
前言: " j) |0 R. Q3 C2 m8 b

) u  A. t1 l" c8 `! ?1 J' N这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基本用法。
' t! N# B% R7 l/ k8 `' p* d5 t
9 H5 k4 d0 j" W$ Q5 D# h" u" @3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。
, R; @& b" p; C* ?+ X: O8 b.......
2 y/ ~2 b! F" M/ {4 ^

+ G' Y0 v0 d/ w7 Z3 }8 A学习学习,最后问一个菜鸟级问题,我是不是要装visual basic?怎么装?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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