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

            天行健 君子當自強而不息

            D3D Animation Basis(3)

            Initializing Direct3D

            Next in line for the helper functions is init_d3d, which you use to initialize Direct3D and create a 3D device and display window. I tried to keep the code as simple as possible, performing the typical initialization code you would use in any Direct3D application.

            HRESULT init_d3d(IDirect3D9** ret_d3d,
                             IDirect3DDevice9
            ** ret_device,
                             HWND hwnd,
                             BOOL force_windowed,
                             
            bool multi_threaded)
            {
                
            // error checking
                if(ret_d3d == NULL || ret_device == NULL || hwnd == NULL)
                    
            return E_FAIL;

                IDirect3D9
            * d3d = Direct3DCreate9(D3D_SDK_VERSION);

                
            if(d3d == NULL)
                    
            return E_FAIL;

                
            *ret_d3d = d3d;

                
            // Ask if user wants to run windowed or fullscreen, or force windowed if flagged to do such.

                
            int mode;

                
            if(force_windowed)
                    mode 
            = IDNO;
                
            else
                    mode 
            = MessageBox(hwnd, "Use fullscreen mode? (640x480x16)""Initialize D3D", MB_YESNO | MB_ICONQUESTION);

                
            // set the video (depending on windowed mode or fullscreen)

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

                
            // setup video setttings based on choice of fullscreen or not

                
            if(mode == IDYES)    // setup fullscreen format (set to your own if you perfer)
                {
                    
            // set the presentation parameters (use fullscreen)
                    d3dpp.BackBufferWidth             = 640;
                    d3dpp.BackBufferHeight             
            = 480;
                    d3dpp.BackBufferFormat             
            = D3DFMT_R5G6B5;
                    d3dpp.SwapEffect                 
            = D3DSWAPEFFECT_FLIP;
                    d3dpp.Windowed                     
            = FALSE;
                    d3dpp.EnableAutoDepthStencil     
            = TRUE;
                    d3dpp.AutoDepthStencilFormat     
            = D3DFMT_D16;
                    d3dpp.FullScreen_RefreshRateInHz 
            = D3DPRESENT_RATE_DEFAULT;
                    d3dpp.PresentationInterval         
            = D3DPRESENT_INTERVAL_DEFAULT;
                }
                
            else    // setup windowed format (set to your own demensions below)
                {
                    
            // get the client and window dimensions
                    RECT client_rect, window_rect;
                    GetClientRect(hwnd, 
            &client_rect);
                    GetWindowRect(hwnd, 
            &window_rect);

                    
            // set the width and height (set your dimensions here)
                    DWORD desired_width = 640, desired_height = 480;
                    DWORD width  
            = (window_rect.right - window_rect.left) - client_rect.right  + desired_width;
                    DWORD height 
            = (window_rect.bottom - window_rect.top) - client_rect.bottom + desired_height;

                    
            // set the window's dimensions
                    MoveWindow(hwnd, window_rect.left, window_rect.top, width, height, TRUE);

                    
            // get the desktop format
                    D3DDISPLAYMODE display_mode;
                    d3d
            ->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &display_mode);

                    
            // set the presentation parameters (use windowed)
                    d3dpp.BackBufferWidth              = desired_width;
                    d3dpp.BackBufferHeight              
            = desired_height;
                    d3dpp.BackBufferFormat              
            = display_mode.Format;
                    d3dpp.SwapEffect                  
            = D3DSWAPEFFECT_DISCARD;
                    d3dpp.Windowed                      
            = TRUE;
                    d3dpp.EnableAutoDepthStencil      
            = TRUE;
                    d3dpp.AutoDepthStencilFormat     
            = D3DFMT_D16;
                    d3dpp.FullScreen_RefreshRateInHz 
            = D3DPRESENT_RATE_DEFAULT;
                    d3dpp.PresentationInterval         
            = D3DPRESENT_INTERVAL_DEFAULT;
                }

                
            // create the 3D device

                DWORD flags 
            = D3DCREATE_MIXED_VERTEXPROCESSING;

                
            if(multi_threaded)
                    flags 
            |= D3DCREATE_MULTITHREADED;

                IDirect3DDevice9
            * device;
                HRESULT hr 
            = d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, flags, &d3dpp, &device);

                
            if(FAILED(hr))
                    
            return hr;

                
            // store the 3D device object pointer
                *ret_device = device;

                
            // set the perspective projection

                
            float aspect = (float)d3dpp.BackBufferWidth / d3dpp.BackBufferHeight;

                D3DXMATRIX mat_proj;
                D3DXMatrixPerspectiveFovLH(
            &mat_proj, D3DX_PI/4.0f, aspect, 1.0f10000.0f);
                device
            ->SetTransform(D3DTS_PROJECTION, &mat_proj);

                
            // set the default render states
                device->SetRenderState(D3DRS_LIGHTING,            FALSE);
                device
            ->SetRenderState(D3DRS_ZENABLE,            D3DZB_TRUE);
                device
            ->SetRenderState(D3DRS_ALPHABLENDENABLE,    FALSE);
                device
            ->SetRenderState(D3DRS_ALPHATESTENABLE,    FALSE);

                
            // set the default texture stage states
                device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
                device
            ->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
                device
            ->SetTextureStageState(0, D3DTSS_COLOROP,      D3DTOP_MODULATE);

                
            // set the default texture filters
                device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
                device
            ->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);

                
            return S_OK;
            }

             

            posted on 2008-04-14 12:33 lovedday 閱讀(346) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久久久亚洲av综合波多野结衣 | 久久婷婷五月综合97色直播| 午夜视频久久久久一区 | 伊人久久大香线蕉av一区| 久久国产精品成人免费| 久久久噜噜噜久久中文字幕色伊伊 | 色偷偷88888欧美精品久久久| 久久电影网2021| 狠狠色丁香久久婷婷综合| 国产叼嘿久久精品久久| 97久久久精品综合88久久| 久久久久久精品无码人妻| 青青青国产成人久久111网站| 一本色综合网久久| 99久久香蕉国产线看观香| 一本久久精品一区二区| 伊人色综合久久天天人守人婷| 国内精品久久久久久麻豆| 国产精品狼人久久久久影院| 久久午夜电影网| 国产午夜精品久久久久九九电影| 国产高清国内精品福利99久久| 国产精品久久久久久福利漫画| 97久久超碰成人精品网站| 久久国产精品-久久精品| 久久久久九九精品影院| 久久国语露脸国产精品电影| 久久夜色精品国产噜噜亚洲AV| 国产精品一区二区久久不卡| 久久精品国产WWW456C0M| 精品久久久一二三区| 91久久精品视频| 97久久国产亚洲精品超碰热| 青青草原综合久久大伊人导航| 久久久久久午夜成人影院| 欧美午夜A∨大片久久| 精品免费久久久久国产一区| 久久久久99精品成人片试看| 久久这里都是精品| 久久强奷乱码老熟女网站| 亚洲欧美国产日韩综合久久 |