• 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可以解压出项目,制作方法):

  • 相关阅读:
    原根
    FFT
    bzoj3991[SDOI2015]寻宝游戏
    bzoj3990[SDOI2015]排序
    序列自动机
    bzoj4032[HEOI2015]最短不公共子串
    2015.8.28 字符串
    bzoj2821作诗
    bzoj2741【FOTILE模拟赛】L
    一个牛人给java初学者的建议
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3108767.html
Copyright © 2020-2023  润新知