• <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>

            天行健 君子當(dāng)自強而不息

            坐標系與基本圖元(8)

            全屏幕顯示

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

            首先調(diào)用函數(shù)GetAdapterDisplayMode()獲得顯示器當(dāng)前的顯示模式:

            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 閱讀(606) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            公告

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評論

            久久精品免费观看| 久久青青草原亚洲av无码| 久久亚洲中文字幕精品有坂深雪| 亚洲AV日韩AV天堂久久| 久久久久高潮毛片免费全部播放 | 狠狠精品久久久无码中文字幕 | 国产精品国色综合久久| 国产成人无码精品久久久久免费| 中文字幕精品久久| 香蕉久久夜色精品国产小说| 久久天天婷婷五月俺也去| 久久福利青草精品资源站| 亚洲精品无码久久不卡| 久久久青草久久久青草| 一本一本久久A久久综合精品| 国产精品丝袜久久久久久不卡| 久久人人爽人人爽人人片AV东京热| 久久成人国产精品二三区| 久久亚洲精精品中文字幕| 伊人色综合久久天天网| 青青青青久久精品国产h久久精品五福影院1421 | 亚洲午夜久久久久妓女影院| 国内精品久久久久国产盗摄| 国产成人久久AV免费| 亚洲欧美成人综合久久久| 香蕉久久久久久狠狠色| 久久久久国产成人精品亚洲午夜| 91精品国产高清久久久久久io| 欧洲成人午夜精品无码区久久| 亚洲国产成人久久精品99 | 91精品观看91久久久久久 | 99久久精品免费观看国产| 欧美伊香蕉久久综合类网站| 久久91综合国产91久久精品| 97久久精品无码一区二区| 国产精品久久久天天影视| 久久精品国产99国产精品澳门 | 久久久婷婷五月亚洲97号色| 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲天堂| 99精品国产综合久久久久五月天|