• <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)自強(qiáng)而不息

            坐標(biāo)系與基本圖元(8)

            全屏幕顯示

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

             

            運(yùn)行截圖:

             

            完整源代碼:

            #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 閱讀(603) 評(píng)論(0)  編輯 收藏 引用


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


            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(lèi)(178)

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

            搜索

            最新評(píng)論

            久久人人爽人人爽人人片AV不| 久久久久久国产精品美女 | 久久精品国产精品亚洲精品| 久久婷婷五月综合色高清| 久久香综合精品久久伊人| 久久婷婷综合中文字幕| 久久无码人妻精品一区二区三区 | 国内精品伊人久久久久777| 日日躁夜夜躁狠狠久久AV| 久久不射电影网| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 久久91亚洲人成电影网站| 久久婷婷五月综合色99啪ak| avtt天堂网久久精品| 久久亚洲av无码精品浪潮| 久久久亚洲欧洲日产国码二区 | 久久99国产精品成人欧美| 久久无码人妻一区二区三区 | 国产精品99久久精品| 亚洲&#228;v永久无码精品天堂久久| 久久久久亚洲AV无码观看| 狠狠人妻久久久久久综合| 久久精品国产亚洲AV电影| 久久国产色av免费看| 久久久精品久久久久特色影视| 99久久久精品免费观看国产| 久久久久久精品成人免费图片| 久久精品国产只有精品66| 国产精品成人无码久久久久久| 欧美一区二区精品久久| 狠狠色丁香久久综合婷婷| 国产精品一久久香蕉国产线看观看| 国产69精品久久久久观看软件| 午夜精品久久久久久影视riav| 精品一久久香蕉国产线看播放| 91精品无码久久久久久五月天| 精品久久无码中文字幕| 久久婷婷国产麻豆91天堂| 国产AV影片久久久久久 | 日本欧美久久久久免费播放网| 国产成人久久精品一区二区三区|