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

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            香蕉久久夜色精品国产2020| 久久精品国产清高在天天线| 开心久久婷婷综合中文字幕| 中文国产成人精品久久亚洲精品AⅤ无码精品| 色综合久久精品中文字幕首页| 久久精品女人天堂AV麻| 久久综合亚洲鲁鲁五月天| 久久ZYZ资源站无码中文动漫| 久久www免费人成看国产片| 亚洲午夜久久久久妓女影院| 情人伊人久久综合亚洲| 久久人人青草97香蕉| 99久久精品久久久久久清纯| 久久久精品人妻一区二区三区蜜桃| 久久99毛片免费观看不卡| 久久无码专区国产精品发布| 99久久婷婷国产综合精品草原| 蜜桃麻豆WWW久久囤产精品| 丁香久久婷婷国产午夜视频| 影音先锋女人AV鲁色资源网久久| 99久久99久久精品国产片果冻| 奇米影视7777久久精品| 少妇熟女久久综合网色欲| 久久97久久97精品免视看秋霞 | 97久久综合精品久久久综合| 一本久道久久综合狠狠躁AV| 国产精品久久久久久| 97久久超碰国产精品2021| 久久久国产乱子伦精品作者| 亚洲国产精品无码久久久不卡 | 日本一区精品久久久久影院| 久久精品无码午夜福利理论片| 成人午夜精品无码区久久| 波多野结衣久久| 久久久精品人妻一区二区三区蜜桃| 女同久久| 午夜人妻久久久久久久久| 热久久最新网站获取| 中文字幕热久久久久久久| 久久久久人妻一区精品色| www.久久热.com|