zoukankan      html  css  js  c++  java
  • 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可以解压出项目,制作方法):

  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3108767.html
Copyright © 2011-2022 走看看