游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2846|回复: 5

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

[复制链接]

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2005-12-29 13:35:00 | 显示全部楼层 |阅读模式
由于微软DirectX更新速度非常得快,大多在你学完最新的版本的时候,已经有更新的版本出现了。本着不求最好但求学好的原则,本文主要用到的是DirectX 9b SDK。如果比你的使用版本旧,你可以直接到论坛咨询最新的方法。如果你想获取DirectX 9B SDK 可以在论坛上找到下载,也可也发mail给我。我每周给大家发送一次。

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



我的个人信箱m9551@163.com

个人网站 http://www.dingge.com/

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

第二部分SDK例题分析
本部分的学习目标

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

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

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

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

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
 楼主| 发表于 2005-12-29 13:38:00 | 显示全部楼层

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



第一章Tutorial 1: CreateDevice

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

全文下载(2005-8-1更新)
http://www.dingge.com/forum/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

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
 楼主| 发表于 2005-12-29 13:38:00 | 显示全部楼层

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

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

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

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



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

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

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

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

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



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

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
 楼主| 发表于 2005-12-29 13:38:00 | 显示全部楼层

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

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

// 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 }; )            //小图标

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
 楼主| 发表于 2005-12-29 13:39:00 | 显示全部楼层

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

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







// 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-8-1更新)

http://www.dingge.com/forum/viewFile.asp?BoardID=46&ID=1550

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2005-12-30 13:32:00 | 显示全部楼层

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

很好,支持!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 02:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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