direct3d9 最简程序

转自:http://blog.csdn.net/sagakiss/article/details/1707608

新建Win32项目

新建文件CreateDeviceMy.cpp代码如下:

//包含Dx9的头文件
#include <d3d9.h>
#pragma warning( disable : 4996 ) //除去警告 
#include <strsafe.h>
#pragma warning( default : 4996 ) 

//-----------------------------------------------------------------------------
// 全局参数
//-----------------------------------------------------------------------------
LPDIRECT3D9             g_pD3D       = NULL; // 创建 D3DDevice
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // 我们使用的渲染设备

//-----------------------------------------------------------------------------
// 名称: InitD3D()
// 描述: 初始化 Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
    // 根据版本创建D3D对象
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;
    
    //设置参数
    D3DPRESENT_PARAMETERS d3dpp;                //参数对象,用于下面的设备创建
    ZeroMemory( &d3dpp, sizeof(d3dpp) );        //用0来填充d3dpp内存区域,也就是初始化内存
    d3dpp.Windowed = TRUE;                        //设置为窗口模式
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    //交换缓冲支持的效果类型,指定表面在交换链中是如何被交换的。这里为后备的缓存加载之后就删除。
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;    //显示模式

    //创建设备驱动Direct3D
    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,                        //默认适配器
                                      D3DDEVTYPE_HAL,                            //硬件驱动 
                                      hWnd,                                        //设备所使用的窗体
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,        //顶点像素渲染方式
                                      &d3dpp,                                    //参数
                                      &g_pd3dDevice                                //驱动设备
                                      ) ) )
    {
        return E_FAIL;
    }

    // 初始化完成

    return S_OK;
}

//-----------------------------------------------------------------------------
// 名称: Cleanup()
// 描述: 释放所有初始化对象
//-----------------------------------------------------------------------------
VOID Cleanup()
{
    if( g_pd3dDevice != NULL) 
        g_pd3dDevice->Release();

    if( g_pD3D != NULL)
        g_pD3D->Release();
}




//-----------------------------------------------------------------------------
// 名称: Render()
// 描述: 绘制场景
//-----------------------------------------------------------------------------
VOID Render()
{
    if( NULL == g_pd3dDevice )
        return;

    //清除背景缓存并重新设置为蓝色
    g_pd3dDevice->Clear( 0,                             // pRects中的矩形数,如果 pRects为NULL着该参数必须为0
                         NULL,                         //一个指向D3DRECT结构体的指针
                         D3DCLEAR_TARGET,             //D3DCLEAR标志,现在为清空当前的渲染器
                         D3DCOLOR_XRGB(0,0,255),     //颜色    
                         1.0f,                         // depth buffer的新z值
                         0                             //模板
                         );
    
    // 开始渲染场景
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        // 可以在这里渲染场景
    
        // 结束渲染
        g_pd3dDevice->EndScene();
    }

    // 清苦当前缓存中的数据
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

//-----------------------------------------------------------------------------
// 名称: MsgProc()
// 描述: Windows窗体句柄
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
            Cleanup();
            PostQuitMessage( 0 );
            return 0;

        case WM_PAINT:
            Render();
            ValidateRect( hWnd, NULL );//效验矩形数据
            return 0;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
}

//WinMain函数入口

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
    
    //直接初始化结构体
    /*
    GetModuleHandle 函数是返回一个模块在当前进程地址空间的HMODULE
    如果函数参数值为NULL则返回一个虚拟当前句柄.
    */
    WNDCLASSEX wc = { sizeof(WNDCLASSEX),            //指定了以字节为单位的结构的大小
                      CS_CLASSDC,                    //所有属于该类的窗口实例共享相同的DC
                      MsgProc,                        //是指向窗口过程的指针
                      0L,                            //…………
                      0L,                            //…………
                      GetModuleHandle(NULL),        //是指向窗口过程实例的句柄
                      NULL,                            //指向窗口图标的句柄
                      NULL,                            //指向窗口光标的句柄
                      NULL,                            //背景刷
                      NULL,                            //菜单
                      "D3D Tutorial",                //类名
                      NULL                            //指向小图标的句柄
                    };
    //注册窗体类
    RegisterClassEx( &wc );
    
    //创建窗体
    HWND hWnd = CreateWindow( "D3D Tutorial",                                //窗体的类名
                              "D3D Tutorial 01: CreateDevice",                //标题
                              WS_OVERLAPPEDWINDOW,                            //窗体风格
                              100,                                            //位置坐标x
                              100,                                            //位置坐标y
                              300,                                            //
                              300,                                            //
                              NULL,                                            //父窗口
                              NULL,                                            //菜单
                              wc.hInstance,                                    //窗体类句柄,2000以上的系统无含义!
                              NULL                                            //窗体结构参数
                              );
    // Initialize Direct3D
    if( SUCCEEDED( InitD3D( hWnd ) ) )
    { 
        // Show the window
        ShowWindow( hWnd, SW_SHOWDEFAULT );
        UpdateWindow( hWnd );

        // Enter the message loop
        MSG msg; 
        while( GetMessage( &msg, NULL, 0, 0 ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }

    UnregisterClass( "D3D Tutorial", wc.hInstance );
    return 0;
}
View Code

将字符集设成未设置

添加库和引用:

1.添加附加依赖项:

d3d9.lib
d3dx9.lib
Winmm.lib

2.添加附加库目录:

库目录指向direct sdk目录,默认安装是:C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86

 3.添加包含目录,指向direct sdk的includ目录(不然不能引用#include <d3dx9.h>)

 

程序运行结果(此为文件图,下载png图片,后缀改为rar可以解压出项目,制作方法):

最简程序2:程序运行结果(此为文件图,下载png图片,后缀改为rar可以解压出项目,制作方法):

原文地址:https://www.cnblogs.com/wangjixianyun/p/3108767.html