【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 9246|回复: 17

DirectX 9 进阶手册----SDK例题分析

[复制链接]
发表于 2005-7-30 18:31:09 | 显示全部楼层 |阅读模式

写在最前面fficeffice" />

 

学习游戏专业已经有一段时间了,很早在网上曾经做过学习笔记,可惜都随着网站的不稳定遗失了,这次算是整理在一起了。在这个手册里,有很多的3D模型图片以及一部分文章来自网络,在这里深深的感谢他们提供的支持,也深深的感到,有他们的参与,中国的游戏将是丰富多彩而且无可限量!。

 

   由于微软DirectX更新速度非常得快,大多在你学完最新的版本的时候,已经有更新的版本出现了。本着不求最好但求学好的原则,本文主要用到的是DirectX 9b SDK如果比你的使用版本旧,你可以直接到论坛咨询最新的方法。如果你想获取DirectX 9B SDK 可以在论坛上找到下载,也可也发mail给我。我每周给大家发送一次。

由于时间和个人的原因,这个手册难免会出现错误和不足的地方,希望大家指正批评。

 

我的个人信箱m9551@163.com

个人网站 http://forum.exceedu.com/

游戏制作论坛 (游戏程序设计,人物,场景设计,策划剧本分镜头,游戏音乐)

 

 

 

 

第二部分SDK例题分析

本部分的学习目标

v      完全剖析DirectX 9.0b SDK 自带的6个例题

v      了解基本的SDK程序设计步骤

v      掌握基本的win程序设计能力

v      能够看懂3d3程序,达到可以自学d3d程序的能力

 楼主| 发表于 2005-7-30 18:45:43 | 显示全部楼层

第一章Tutorial 1: CreateDevice

这是我们要开始的第一个例题,这个例题我们要创建一个D3D设备,在这个设备的驱动下,我们才能够显示D3D图形。这虽然是个简单里的例题,但是包含了D3D程序的基本感念,认真学习对你一定是受益匪浅。

全文下载(2005-8-1更新)

viewFile.asp?Boardid=46&ID=1550

 

嗯,怎么开始我就不用多说吧,这可是基础的东西。我们直接到安装目录里面找到我们例题的所在,这个Tutorials 目录里面就包含了我们这个手册所要给大家讲述的6个例题。我们打开下面这两个文件中的一个即可打开这个CreateDevice 项目。(缺少相相应图片请下载全文文档)

1.认识窗口代码

开始的部分是文档的介绍,和初始化,希望在大家认真看一遍整个代码以后,运行一下这个程序,然后我们一起来分析这些代码。(请你们打开代码。本手册不出现完整代码)

最初的几行如下:

//-----------------------------------------------------------------------------

// File: CreateDevice.cpp

// Desc: This is the first tutorial for using Direct3D. In this tutorial, all

//       we are doing is creating a Direct3D device and using it to clear the

//       window.

//

// Copyright (c) Microsoft Corporation. All rights reserved.

//-----------------------------------------------------------------------------

#include <d3d9.h>

//-----------------------------------------------------------------------------

// Global variables

//-----------------------------------------------------------------------------

LPDIRECT3D9             g_pD3D       = NULL; // Used to create the D3DDevice

LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // Our rendering device

[此贴子已经被作者于2005-8-2 21:20:25编辑过]
 楼主| 发表于 2005-7-30 18:54:17 | 显示全部楼层

这行代码中,首先 #include <d3d9.h>  这是我们遇到的第一个D3D的头文件,以后还会遇到很多各式各样的头文件,这里不要求你了解这个头文件,但是需要你知道,这个头文件在什么时候用,不要和以后遇到的头文件混淆就可以了。fficeffice" />

下来,程序初始化了两个全局变量LPDIRECT3D9 g_pD3DLPDIRECT3DDEVICE9 g_pd3dDevice 这是我们首先接触到了两个变量,它在程序中必不可少: g_pD3D这是指向IDirect3D9接口的指针,我们得通过它来创建Direct3D设备接口。而g_pd3dDevice则便 IDirect3DDevice9(D3D 设备) 的接口的指针,它实际上代表了你的硬件3D(显卡)。

接下来大家看到的是程序调用的函数。我们暂时不要关心每个函数。我用下表列出了他们的功能关系。

 

HRESULT InitD3D()----------------------设备初始化

VOID Cleanup()-------------------------资源的释放

VOID Render()--------------------------渲染,程序的核心

LRESULT WINAPI MsgProc()---------------回调函数,处理windows事件

INT WINAPI WinMain()-------------------主函数,程序从这里开始运行

 

我们暂且不去理会接下来的内容,我们直接去看整个程序的主函数,通过对主函数流程的分析我们来逐个解释每一个函数的作用,以及其中是怎么实现的。

 楼主| 发表于 2005-7-30 18:54:45 | 显示全部楼层

//------------------------------------------------------------------------------fficeffice" />

// Register the window class

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,

                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,

                      "D3D Tutorial", NULL };

RegisterClassEx( &wc );

 

WNDCLASSEX wc  声明窗口类 :通过声明一个窗口类来确定未来程序的窗口类型样式,后面的参数则是这个类的相关属性

 

 

WNDCLASSEX wc ={

 sizeof(WNDCLASSEX), //指定以字节为单位的结构大小(始终都是用 sizeof(WNDCLASSEX))

CS_CLASSDC,      //窗口风格

MsgProc,          //指向CALLBACK的指针变量

0L,               //类的额外保留消息(通常为0)

0L,               //类的额外保留消息(通常为0)

       GetModuleHandle(NULL),;//指向窗口过程实例句柄(句柄是窗口的标识符)

NULL,                             //软件的图标

NULL,                             //软件光标

NULL,                             //背景色

NULL,             //菜单名称句柄

       "D3D Tutorial", "     //该窗口类的名字

NULL }; )            //小图标

 楼主| 发表于 2005-7-30 19:01:46 | 显示全部楼层

RegisterClassEx( &wc );  注册刚才的窗口类,只有系统注册过的窗口类才能被使用。fficeffice" />

 

 

 

// Create the application's window

  HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice",

                              WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,

                              GetDesktopWindow(), NULL, wc.hInstance, NULL );

 

 

 

CreateWindow(     
        "
D3D Tutorial ",                                         //窗口类的名字
        "
D3D Tutorial 01: CreateDevice ",          //窗口标题
        WS_OVERLAPPEDWINDOW,                       
//窗口风格
       100,100,                                                              
//设置x,y(此处是距显示器左上角100象素)
       300,300,                                                              //
设置w,h(此处是窗体的宽高都是300)
        GetDesktopWindow(),                                      
//指向父系窗口,这里指向桌面
        NULL,                                                               
//窗口上的菜单句柄(该窗口无菜单)
        wc.hInstance,                                                     
//winmain()的实例
        NULL)                                                               
//暂时没什么用

 楼主| 发表于 2005-7-30 19:03:22 | 显示全部楼层

很不错,再配合上ShowWindow( hWnd, SW_SHOWDEFAULT );和UpdateWindow( hWnd );,这个窗口我们就可以看到了。fficeffice" />

 

 

 

 

OK!窗口部分我们已经看完了,不要着急,我们来总结一下,创建一个windows运行窗口都要干什么?他们是

 

v      自定义一个窗口类

v      注册窗口类

v      创建窗口

v      显示窗口

 

 

 

 

很好,我们先休息一下。出去看场电影吧,《星球大战》正在放映。

 楼主| 发表于 2005-7-30 19:24:49 | 显示全部楼层

全文下载(2005-8-1更新)

qVF02n6L.rar (609.93 KB, 下载次数: 7)

发表于 2005-8-2 00:03:16 | 显示全部楼层
################
 楼主| 发表于 2005-8-2 21:13:58 | 显示全部楼层
谢谢你的支持啊,好东西当然要大家分享拉~
发表于 2005-11-3 00:38:30 | 显示全部楼层

老大后文呢,给个大概更新时间也好啊

发表于 2006-1-23 09:44:44 | 显示全部楼层

不能下载呀

能不能提供下载

发表于 2006-1-23 10:45:11 | 显示全部楼层
以下是引用zhongyuanlee在2006-1-23 9:44:44的发言:

不能下载呀

能不能提供下载

可以下载啊!你再试试

发表于 2006-1-26 20:04:58 | 显示全部楼层

现在可以下了

发表于 2006-1-26 20:16:22 | 显示全部楼层
不错
发表于 2006-2-6 23:48:13 | 显示全部楼层

还在连载吗?

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

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-22 04:11

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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