李锦俊(mybios)的blog

游戏开发 C++ Cocos2d-x OpenGL DirectX 数学 计算机图形学 SQL Server

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

公告

QQ:30743734
EMain:mybios@qq.com

常用链接

留言簿(16)

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 365057
  • 排名 - 66

最新评论

阅读排行榜

评论排行榜

手写Tutorial 01例子是创建Windows窗口,并创建D3D设备。


97行,PeekMessage(&msg , 0 , 0 , 0 , PM_REMOVE)第二个参数如果改成PeekMessage(&msg , hWnd , 0 , 0 , PM_REMOVE)就会出现无法退出程序的问题!请注意!

44行,g_pd3dDevice->Present(0 , 0 , 0 , 0);这句话千万不要漏掉哦!否则就会显示花瓶!


  1#include <d3dx9.h>
  2
  3#define SAFE_RELEASE(o) {if(o){o->Release();o=0;}}
  4
  5LPDIRECT3D9 g_pD3D = 0;
  6LPDIRECT3DDEVICE9 g_pd3dDevice = 0;
  7
  8// 创建D3D设备
  9HRESULT InitD3D(HWND hWnd)
 10{
 11    // 创建D3D SDK
 12    if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
 13        return E_FAIL;
 14
 15
 16    D3DPRESENT_PARAMETERS d3dpp;
 17    memset(&d3dpp , 0 , sizeof(d3dpp));
 18    d3dpp.Windowed = true;
 19    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
 20    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
 21
 22    RECT rect;
 23    GetClientRect(hWnd , &rect);
 24    d3dpp.BackBufferWidth = rect.right - rect.left;
 25    d3dpp.BackBufferHeight = rect.bottom - rect.top;
 26
 27    if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT
 28        , D3DDEVTYPE_HAL
 29        , hWnd
 30        , D3DCREATE_HARDWARE_VERTEXPROCESSING
 31        , &d3dpp , &g_pd3dDevice
 32        )))
 33        return E_FAIL;
 34    
 35    return S_OK;
 36}

 37
 38// 渲染
 39void Render()
 40{
 41    // 清空成蓝色
 42    g_pd3dDevice->Clear(0 , 0 , D3DCLEAR_TARGET , D3DCOLOR_XRGB(0 , 0 , 255) , 1.0f , 0);
 43    // 显示
 44    g_pd3dDevice->Present(0 , 0 , 0 , 0);
 45}

 46
 47// 清除占有的内存
 48void CleanUp()
 49{
 50    SAFE_RELEASE(g_pD3D);
 51}

 52
 53// 消息处理
 54LRESULT WINAPI MsgProc(HWND hWnd , UINT message , WPARAM wParam , LPARAM lParam)
 55{
 56    switch(message)
 57    {
 58    case WM_DESTROY:
 59        CleanUp();
 60        PostQuitMessage(0);
 61        return 0;
 62        break;
 63    default:
 64        break;
 65    }

 66    return DefWindowProc(hWnd, message , wParam , lParam);
 67}

 68
 69// Windows入口
 70int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd)
 71{
 72    WNDCLASS wndClass;
 73    memset(&wndClass , 0 , sizeof(wndClass));
 74    wndClass.hInstance = hInstance;
 75    wndClass.lpszClassName = "Tutorial01";
 76    wndClass.style = 0;
 77    wndClass.lpfnWndProc = MsgProc;
 78    // 注册窗口类
 79    RegisterClass(&wndClass);
 80
 81    // 创建窗口
 82    HWND hWnd = CreateWindow("Tutorial01" , "Tutorial01 : CreateDevice" , WS_OVERLAPPEDWINDOW 
 83        , 0 , 0 , 512 , 512 , GetDesktopWindow()
 84        , 0 , wndClass.hInstance , 0);
 85
 86    // 显示窗口
 87    ShowWindow(hWnd , SW_SHOWDEFAULT);
 88    UpdateWindow(hWnd);
 89
 90    if(SUCCEEDED(InitD3D(hWnd)))
 91    {
 92        // 消息循环
 93        MSG msg;
 94        memset(&msg , 0 , sizeof(msg));
 95        while(msg.message != WM_QUIT)
 96        {
 97            if(PeekMessage(&msg , 0 , 0 , 0 , PM_REMOVE))
 98            {
 99                DispatchMessage(&msg);
100                TranslateMessage(&msg);
101            }

102            else
103            {
104                Render();
105            }

106        }

107    }

108
109    CleanUp();
110    UnregisterClass("Tutorial01" , wndClass.hInstance);
111    return 0;
112}

113
114
115
posted on 2006-11-16 10:38 李锦俊(mybios) 阅读(832) 评论(2)  编辑 收藏 引用 所属分类: Direct3D

Feedback

# re: 《DirectX 9 3D 图形程序设计》 Tutorial 01 容易犯错的地方 2006-11-16 16:49 LifeAndC
大哥在那搞到的这本书,发我给看看.
f-pt@163.com  回复  更多评论
  

# re: 《DirectX 9 3D 图形程序设计》 Tutorial 01 容易犯错的地方 2006-11-16 19:39 李锦俊
这本书买的啊。在当当网上应该也有得卖啊。你可以去搜索一下啊。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理