• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當自強而不息

            坐標系與基本圖元(8)

            全屏幕顯示

            游戲程序通常都是運行在全屏幕模式下,進行全屏顯示的關鍵是使用全屏顯示的渲染設備。創建全屏顯示模式渲染設備同窗口模式渲染設備基本相同,區別是將d3dpp.Windowed設置為FALSE,告訴Direct3D系統,將要創建的是全屏模式渲染設備。此外,還需要明確指定后臺緩沖區的大小和格式,這和創建窗口模式渲染設備是不相同的,在創建窗口模式渲染設備時可將后臺緩沖區格式設置為D3DFMT_UNKNOWN,后臺緩沖區大小也可取默認值,而在創建全屏模式渲染設備時這些都需要明確指定。

            首先調用函數GetAdapterDisplayMode()獲得顯示器當前的顯示模式:

            Retrieves the current display mode of the adapter.

            HRESULT GetAdapterDisplayMode(
            UINT Adapter,
            D3DDISPLAYMODE * pMode
            );

            Parameters

            Adapter
            [in] Ordinal number that denotes the display adapter to query. D3DADAPTER_DEFAULT is always the primary display adapter.
            pMode
            [in, out] Pointer to a D3DDISPLAYMODE structure, to be filled with information describing the current adapter's mode.

            Return Values

            If the method succeeds, the return value is D3D_OK.

            If Adapter is out of range or pMode is invalid, this method returns D3DERR_INVALIDCALL.

            Remarks

            IDirect3D9::GetAdapterDisplayMode will not return the correct format when the display is in an extended format, such as 2:10:10:10. Instead, it returns the format X8R8G8B8.

            Describes the display mode.

            typedef struct D3DDISPLAYMODE {
            UINT Width;
            UINT Height;
            UINT RefreshRate;
            D3DFORMAT Format;
            } D3DDISPLAYMODE, *LPD3DDISPLAYMODE;

            Members

            Width
            Screen width, in pixels.
            Height
            Screen height, in pixels.
            RefreshRate
            Refresh rate. The value of 0 indicates an adapter default.
            Format
            Member of the D3DFORMAT enumerated type, describing the surface format of the display mode.

             

            運行截圖:

             

            完整源代碼:

            #include <d3d9.h>

            #define CLASS_NAME    "GameApp"

            #define release_com(p)    do { if(p) { (p)->Release(); (p) = NULL; } } while(0)

            IDirect3D9
            *                g_d3d;
            IDirect3DDevice9
            *        g_device;
            IDirect3DVertexBuffer9
            * g_vertex_buffer;

            struct sCustomVertex
            {
                
            float x, y, z, rhw;
                DWORD color;
            };

            #define D3DFVF_CUSTOM_VERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) 

            void init_vertices()
            {
                sCustomVertex vertices[] 
            =
                {
                    { 
            100.0f,  650.0f0.5f1.0f0xffff0000, },
                    { 
            500.0f,  100.0f0.5f1.0f0xff00ff00, }, 
                    { 
            900.0f,  650.0f0.5f1.0f0xff0000ff, },
                };

                
            // push vertex data into vertex buffer

                g_device
            ->CreateVertexBuffer(sizeof(vertices), 0, D3DFVF_CUSTOM_VERTEX, D3DPOOL_DEFAULT, &g_vertex_buffer, NULL);

                
            void* ptr;

                g_vertex_buffer
            ->Lock(0sizeof(vertices), (void**)&ptr, 0);
                memcpy(ptr, vertices, 
            sizeof(vertices));
                g_vertex_buffer
            ->Unlock();
            }

            bool init_d3d(HWND hwnd)
            {
                g_d3d 
            = Direct3DCreate9(D3D_SDK_VERSION);

                
            if(g_d3d == NULL)
                    
            return false;

                D3DPRESENT_PARAMETERS d3dpp;
                ZeroMemory(
            &d3dpp, sizeof(d3dpp));

                D3DDISPLAYMODE display_mode;
                g_d3d
            ->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &display_mode);

                d3dpp.Windowed            
            = FALSE;
                d3dpp.SwapEffect        
            = D3DSWAPEFFECT_DISCARD;
                d3dpp.BackBufferWidth    
            = display_mode.Width;
                d3dpp.BackBufferHeight    
            = display_mode.Height;
                d3dpp.BackBufferFormat    
            = display_mode.Format;
                
                
            if(FAILED(g_d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                              
            &d3dpp, &g_device)))
                {
                    
            return false;
                }

                init_vertices();

                
            return true;
            }

            void cleanup()
            {    
                release_com(g_vertex_buffer);
                release_com(g_device);
                release_com(g_d3d);
            }

            void render()
            {    
                g_device
            ->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(555), 1.0f0);    

                g_device
            ->BeginScene();

                g_device
            ->SetStreamSource(0, g_vertex_buffer, 0sizeof(sCustomVertex));
                g_device
            ->SetFVF(D3DFVF_CUSTOM_VERTEX);    
                g_device
            ->DrawPrimitive(D3DPT_TRIANGLELIST, 01);

                g_device
            ->EndScene();

                g_device
            ->Present(NULL, NULL, NULL, NULL);
            }

            LRESULT WINAPI WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
            {
                
            switch(msg)
                {
                
            case WM_KEYDOWN:
                    
            switch(wParam)
                    {    
                    
            case VK_ESCAPE:
                        DestroyWindow(hwnd);
                        
            break;
                    }    
                    
            break;

                
            case WM_DESTROY:        
                    PostQuitMessage(
            0);
                    
            return 0;
                }

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

            int WINAPI WinMain(HINSTANCE inst, HINSTANCE, LPSTR, INT)
            {
                WNDCLASSEX wc;

                wc.cbSize            
            = sizeof(WNDCLASSEX);
                wc.style            
            = CS_CLASSDC;
                wc.lpfnWndProc        
            = WinProc;
                wc.cbClsExtra        
            = 0;
                wc.cbWndExtra        
            = 0;
                wc.hInstance        
            = inst;
                wc.hIcon            
            = NULL;
                wc.hCursor            
            = NULL;
                wc.hbrBackground    
            = NULL;
                wc.lpszMenuName        
            = NULL;
                wc.lpszClassName    
            = CLASS_NAME;
                wc.hIconSm            
            = NULL;

                
            if(! RegisterClassEx(&wc))
                    
            return -1;

                HWND hwnd 
            = CreateWindow(CLASS_NAME, "Direct3D App", WS_OVERLAPPEDWINDOW, 200100600500,
                                         NULL, NULL, wc.hInstance, NULL);

                
            if(hwnd == NULL)
                    
            return -1;

                
            if(init_d3d(hwnd))
                {
                    ShowWindow(hwnd, SW_SHOWDEFAULT);
                    UpdateWindow(hwnd);

                    MSG msg;
                    ZeroMemory(
            &msg, sizeof(msg));

                    
            while(msg.message != WM_QUIT)
                    {
                        
            if(PeekMessage(&msg, NULL, 00, PM_REMOVE))
                        {
                            TranslateMessage(
            &msg);
                            DispatchMessage(
            &msg);
                        }
                            
                        render();
                    }
                }

                cleanup();

                UnregisterClass(CLASS_NAME, wc.hInstance);    

                
            return 0;
            }

             

            posted on 2008-05-01 13:17 lovedday 閱讀(600) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            99久久免费只有精品国产| 伊人久久大香线蕉综合热线| 久久综合九色综合网站| 国产精品久久久久9999| 91精品久久久久久无码| 欧美久久一级内射wwwwww.| 久久久精品国产免大香伊 | 女人高潮久久久叫人喷水| 日本WV一本一道久久香蕉| 欧美亚洲色综久久精品国产| 99久久国产亚洲高清观看2024| 亚洲精品无码久久毛片| 久久久久久狠狠丁香| 2021久久精品免费观看| 中文字幕亚洲综合久久2| 伊人久久大香线蕉亚洲五月天| 精品久久久久久国产牛牛app| 日本欧美久久久久免费播放网| 日韩久久久久中文字幕人妻| 久久久久久免费一区二区三区 | 色99久久久久高潮综合影院| 精品久久久久久无码中文字幕一区| 日韩欧美亚洲综合久久影院Ds| 久久精品国产亚洲沈樵| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 亚洲精品美女久久久久99小说| 亚洲国产精品久久| 国产精品久久久久久一区二区三区 | 久久婷婷五月综合色奶水99啪| 久久久久久国产精品无码下载| 777久久精品一区二区三区无码| 久久久久久国产精品无码超碰| 狠狠色丁香久久婷婷综合| 久久婷婷色香五月综合激情| 色婷婷久久久SWAG精品| 久久久久亚洲AV成人网人人网站| 青青草原1769久久免费播放 | 精品国产乱码久久久久久浪潮| 婷婷综合久久狠狠色99h| 狠狠色噜噜狠狠狠狠狠色综合久久 | 亚洲精品tv久久久久久久久|