一、环境

Visual Studio 2012,DirectX SDK (June 2010)

二、准备

1.环境变量(如没有配置请添加)

变量名:DXSDK_DIR

变量值:D:\Software\Program\Microsoft DirectX SDK (June 2010)

这里D:\Software\Program\Microsoft DirectX SDK (June 2010)是我的DirectX安装目录,视情况修改即可

三、步骤

1.打开VS2012,创建一个空的Win32 Project

这里的项目名称(Name)可以自定义,项目位置(Location)可能不同,不过没关系,可以不用修改

点击OK,然后点击Next,勾选Empty Project

点击Finish,完成项目创建。

2.打开项目属性(Properites),配置项目的DirectX环境

主要需修改的项:Configuration Properites->VC++ Directories,Configuration Properites->Linker->General,Configuration Properites->Linker->Input

VC++ Directories:(注意后面的分号)

Include Directories项中添加$(DXSDK_DIR)\Include;

Library Directories项中添加$(DXSDK_DIR)\Lib\x86;

Linker->Input:添加以下三个lib文件d3d9.lib  d3dx9.lib Winmm.lib,添加时注意用分号隔开,如下:

d3d9.lib;d3dx9.lib;Winmm.lib;

Linker->General:AdditionalLibrary Directories项中添加$(DXSDK_DIR)\Lib\x86 (可以不加分号)

点击确定应用以上更改。

3.打开Source.cpp,复制以下代码:

 #include <d3dx9.h>
IDirect3DDevice9* Device=;
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:PostQuitMessage();break;
case WM_KEYDOWN:
if(wParam==VK_ESCAPE)DestroyWindow(hwnd);break;
}
return DefWindowProcW(hwnd,msg,wParam,lParam);
}
bool Init(HINSTANCE hInstance,int width,int height,bool windowed,D3DDEVTYPE devType,IDirect3DDevice9** device)
{
WNDCLASSW wc;
wc.cbClsExtra=;
wc.cbWndExtra=;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=LoadCursorW(,IDC_ARROW);
wc.hIcon=LoadIconW(,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=(WNDPROC)WndProc;
wc.lpszClassName=L"Direct3D";
wc.lpszMenuName=;
wc.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClassW(&wc))
{
MessageBoxW(,L"Register Failed",,);
return false;
} HWND hwnd=;
hwnd=CreateWindowW(L"Direct3D",L"Direct3D",WS_OVERLAPPEDWINDOW,,,width,height,,,hInstance,);
if(!hwnd)
{
MessageBoxW(,L"CreateWindow Failed",,);
return false;
}
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd); HRESULT hr;
IDirect3D9* d3d9;
d3d9=Direct3DCreate9(D3D_SDK_VERSION); int vp=;
D3DCAPS9 caps;
d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT,devType,&caps);
if(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
else vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING; D3DPRESENT_PARAMETERS d3dapp;
d3dapp.AutoDepthStencilFormat=D3DFMT_D24S8;
d3dapp.BackBufferCount=;
d3dapp.BackBufferFormat=D3DFMT_A8R8G8B8;
d3dapp.BackBufferHeight=height;
d3dapp.BackBufferWidth=width;
d3dapp.EnableAutoDepthStencil=true;
d3dapp.Flags=;
d3dapp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
d3dapp.hDeviceWindow=hwnd;
d3dapp.MultiSampleQuality=;
d3dapp.MultiSampleType=D3DMULTISAMPLE_NONE;
d3dapp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
d3dapp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dapp.Windowed=windowed;
hr=d3d9->CreateDevice(D3DADAPTER_DEFAULT,devType,hwnd,vp,&d3dapp,device);
if(FAILED(hr))
{
MessageBoxW(,L"CreateDevice Failed",,);
d3d9->Release();
return false;
}
d3d9->Release();
return true;
}
int EnterMsgLoop(bool (*ptr_display)(float TimeDelta))
{
MSG msg;
ZeroMemory(&msg,sizeof(MSG));
float LastTime=(float)GetCurrentTime();
while(msg.message!=WM_QUIT)
{
if(PeekMessageW(&msg,,,,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
else
{
float CurTime=(float)GetCurrentTime();
float TimeDelta=(float)(CurTime-LastTime)*0.001f;
ptr_display(TimeDelta);
LastTime=CurTime;
}
}
return msg.wParam;
}
bool Setup()
{
return true;
}
void Cleanup()
{ }
bool Display(float TimeDelta)
{
if(Device)
{
Device->Clear(,,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,0x00000000,1.0f,);
Device->Present(,,,);
}
return true;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE prevInstance,PSTR cmdLine,int showCmd)
{
if(!Init(hInstance,,,true,D3DDEVTYPE_HAL,&Device))
MessageBoxW(,L"Init Failed",,);
if(!Setup())MessageBoxW(,L"Setup Failed",,);
EnterMsgLoop(Display);
Cleanup();
Device->Release();
return ;
}

点击Local Windows Debugger编译项目,运行结果如下:

至此,第一个Direct3D程序已经完工。

CSDN博客地址:http://blog.csdn.net/lfeng1420

DirectX游戏编程(一):创建一个Direct3D程序的更多相关文章

  1. (4opencv)如何基于GOCW,创建一个实时视频程序

    直接使用提供的代码框架进行修改,是最快得到效果的方法:但是这样的灵活性较差,而且真正的程序员从来都不会停滞在这一步:我们需要的是"将框架解析到最小化.理清楚每个构建之间的关系",只 ...

  2. SpringMVC基础入门,创建一个HelloWorld程序

    ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要 ...

  3. Django 创建一个应用程序

    1. 认识Django Django是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计. 由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而无需 ...

  4. Win32 程序开发:创建一个应用程序窗口

    一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSN ...

  5. Dart编程实例 - 第一个Dart程序

    Dart编程实例 - 第一个Dart程序 main() { print("Hello World!"); } 本文转自:http://codingdict.com/article/ ...

  6. DirectX游戏编程入门

    刚开始学习D3D,安装完DirectX9后,在VS2008中新建Win32项目· ----------------------------------------------------------- ...

  7. java游戏开发杂谈 - 创建一个窗体

    package game1; import javax.swing.JFrame; /** * java游戏开发杂谈 * ---demo1:创建一个窗体 * * @author 台哥 * @date ...

  8. ROS Learning-015 learning_tf(编程) 编写一个监听器程序 (Python版)

    ROS Indigo learning_tf-02 编写一个 监听器 程序 (Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 1 ...

  9. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

随机推荐

  1. c#延迟加载

    public class BlogUser { public int Id { get; private set; } public Lazy<List<Article>> A ...

  2. [Sass]局部变量和全局变量

    [Sass]局部变量和全局变量 Sass 中变量的作用域在过去几年已经发生了一些改变.直到最近,规则集和其他范围内声明变量的作用域才默认为本地.如果已经存在同名的全局变量,从 3.4 版本开始,Sas ...

  3. iOS企业分发证书制作

    自签名证书制作流程 打开终端,输入 openssl genrsa - ,生成名称为ca的秘钥 注:openssl生成的文件皆放在用户文档下(finder菜单栏'前往' - 电脑 -Macintosh ...

  4. lnmp安装

    一.准备工作 需要的安装包都是从官网下载的,系统centos6.6 nginx-1.10.1.tar.gz php-5.6.24.tar.gz mysql-5.5.32.tar.gz 所有的包都一传入 ...

  5. kettle系列-6.kettle实现多字段字典快速翻译

    在数据清洗转换中,常见的字典翻译,如性别在原表中是1(男).2(女)等,类似还有很多较大的字典需要翻译,若同一个表中有很多个字典需要翻译,采用[数据库查询]方式翻译的话效率就会相当低下. 这里采用ja ...

  6. FragmentPagerAdapter加载fragment并使用setUserVisibleHint()处理预加载时遇到的坑,给textview赋值时出现的空指针异常

    FragmentPagerAdapter加载fragment并使用setUserVisibleHint()处理预加载时,给textview赋值时出现的空指针异常 public class BaseFr ...

  7. C#调用win32 api 操作其它窗口

    实现以下功能: 找到窗体 找到控件(也叫子窗体) 获取内容 获取位置 设置 位置 内容 鼠标点击 示范 1. 找窗体 以操作系统自带的计算器为例 string clWindow = "Cal ...

  8. 【DWR系列03】- DWR主要类详解

    img { border: 1px solid black } 一.简介 首先应该了解这个jar包主要的类,了解了类,就了解了DWR.DWR的在线javadoc:http://directwebrem ...

  9. 14.linux按键驱动程序(一)

    按键驱动程序 本文学习主要包含按键硬件的实现.中断分层管理.按键定时器去抖.阻塞性驱动程序设计.这里面需要使用到混杂设备驱动和中断处理程序的内容. 一.创建按键混杂设备驱动模型 int key_ope ...

  10. CozyRSS开发记录10-RSS源管理

    CozyRSS开发记录10-RSS源管理 1.RSS源树结构 做解析体力活很多,把RSS解析的优化先放放,先玩一玩RSS源的管理. 虽然在初步的设计中,RSS源是以一个列表的方式来展示,但是,我觉得如 ...