• <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)而不息

            D3D Animation Basis(8)

            Drawing Meshes

            Now that you have your meshes loaded and you've updated those skinned meshes that needed updating, it is time to throw some pixels at the display and show off those meshes! In total, I have created four mesh−rendering functions to help you in your projects.

            HRESULT draw_mesh(D3DXMESHCONTAINER_EX* mesh_container)
            {
                
            // error checking

                
            if(mesh_container == NULL)
                    
            return E_FAIL;

                
            if(mesh_container->MeshData.pMesh == NULL)
                    
            return E_FAIL;

                
            if(mesh_container->NumMaterials == 0 || mesh_container->pMaterials == NULL)
                    
            return E_FAIL;

                
            // get the device interface
                IDirect3DDevice9* device;
                mesh_container
            ->MeshData.pMesh->GetDevice(&device);

                
            // release vertex shader if being used
                device->SetVertexShader(NULL);
                device
            ->SetVertexDeclaration(NULL);

                DWORD last_alpha_blend, old_alpha_blend, old_src_blend, old_dest_blend;

                
            // save render states
                device->GetRenderState(D3DRS_ALPHABLENDENABLE,    &old_alpha_blend);
                device
            ->GetRenderState(D3DRS_SRCBLEND,            &old_src_blend);
                device
            ->GetRenderState(D3DRS_DESTBLEND,            &old_dest_blend);
                last_alpha_blend 
            = old_alpha_blend;

                
            // setup pointer for mesh to draw, either regular or skinned.
                ID3DXMesh* mesh_to_draw = (mesh_container->skin_mesh == NULL) ? 
                                          mesh_container
            ->MeshData.pMesh : mesh_container->skin_mesh;

                
            // look through all subsets
                for(DWORD i = 0; i < mesh_container->NumMaterials; i++)
                {
                    
            // set material and texture
                    device->SetMaterial(&mesh_container->pMaterials[i].MatD3D);
                    device
            ->SetTexture(0, mesh_container->textures[i]);

                    
            // enable or disable alpha blending per material
                    if(mesh_container->pMaterials[i].MatD3D.Diffuse.a != 1.0f)
                    {
                        
            if(last_alpha_blend != TRUE)
                        {
                            last_alpha_blend 
            = TRUE;

                            device
            ->SetRenderState(D3DRS_ALPHABLENDENABLE,    TRUE);
                            device
            ->SetRenderState(D3DRS_SRCBLEND,            D3DBLEND_ONE);    // src color
                            device->SetRenderState(D3DRS_DESTBLEND,            D3DBLEND_DESTCOLOR);
                        }
                    }
                    
            else
                    {
                        
            if(last_alpha_blend != FALSE)
                        {
                            last_alpha_blend 
            = FALSE;
                            device
            ->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
                        }
                    }

                    mesh_to_draw
            ->DrawSubset(i);
                }

                
            // restore alpha blending states
                if(last_alpha_blend != old_alpha_blend)
                {
                    device
            ->SetRenderState(D3DRS_ALPHABLENDENABLE, old_alpha_blend);
                    device
            ->SetRenderState(D3DRS_SRCBLEND,           old_src_blend);
                    device
            ->SetRenderState(D3DRS_DESTBLEND,           old_dest_blend);
                }
                
                
            // make sure to release the device object!
                device->Release();

                
            return S_OK;
            }

             

            If a material being used specifies an alpha value other than 1, then alpha blending is enabled. This way, you can specify portions of a mesh to use alpha blending by merely changing the material information. Also, if a D3DXMESHCONTAINER_EX object contains a skinned mesh, that mesh is rendered instead of the regular mesh.

            posted on 2008-04-15 11:16 lovedday 閱讀(318) 評論(0)  編輯 收藏 引用

            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

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

            搜索

            最新評論

            亚洲va久久久久| 亚洲AV无码久久精品蜜桃| 亚洲AV日韩AV天堂久久| 久久婷婷是五月综合色狠狠| 久久93精品国产91久久综合| 狠狠色丁香婷婷久久综合| 久久国产精品99国产精| 久久香蕉国产线看观看乱码| 亚洲国产成人精品女人久久久 | 国产国产成人精品久久| 久久精品国产一区二区电影| 久久久无码精品亚洲日韩按摩 | 久久男人Av资源网站无码软件 | 久久久久免费精品国产| 精品综合久久久久久88小说| 亚洲午夜无码AV毛片久久| 久久精品一区二区影院| 午夜人妻久久久久久久久| 久久精品无码一区二区app| 久久久久久久久久久久中文字幕 | 97精品伊人久久大香线蕉app | 久久亚洲私人国产精品| 色偷偷88欧美精品久久久| 久久国产精品99国产精| 亚洲综合伊人久久大杳蕉| 91麻豆国产精品91久久久| 久久99热国产这有精品| 久久r热这里有精品视频| 性做久久久久久久久浪潮| 精品国产婷婷久久久| 精品精品国产自在久久高清| 日韩精品久久久久久免费| 国内精品久久久久影院老司| 久久亚洲高清综合| 伊人久久大香线蕉成人| 999久久久免费国产精品播放| 91麻豆精品国产91久久久久久| 日产精品99久久久久久| 久久亚洲春色中文字幕久久久| 久久久久久久久波多野高潮| 亚洲性久久久影院|