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

            天行健 君子當自強而不息

            Direct3D中的繪制(4)

            這個程序使用D3DXCreateTeapot函數創建并用DrawSubset函數渲染一個紡紗茶壺。

            Uses a left-handed coordinate system to create a mesh containing a teapot.

            HRESULT D3DXCreateTeapot(
            LPDIRECT3DDEVICE9 pDevice,
            LPD3DXMESH * ppMesh,
            LPD3DXBUFFER * ppAdjacency
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the created teapot mesh.
            ppMesh
            [out] Address of a pointer to the output shape, an ID3DXMesh interface.
            ppAdjacency
            [out] Address of a pointer to an ID3DXBuffer interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh. NULL can be specified.

            Return Values

            If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

            Remarks

            This function creates a mesh with the D3DXMESH_MANAGED creation option and D3DFVF_XYZ | D3DFVF_NORMAL flexible vertex format (FVF).

            Draws a subset of a mesh.

            HRESULT DrawSubset(
            DWORD AttribId
            );

            Parameters

            AttribId
            [in] DWORD that specifies which subset of the mesh to draw. This value is used to differentiate faces in a mesh as belonging to one or more attribute groups.

            Return Values

            If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.

            Remarks

            The subset that is specified by AttribId will be rendered by the IDirect3DDevice9::DrawIndexedPrimitive method, using the D3DPT_TRIANGLELIST primitive type, so an index buffer must be properly initialized.

            An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier (AttribId) when drawing the frame.

            截圖:

            源程序:

            /**************************************************************************************
              Renders a teapot in wireframe mode.  Shows how to create a teapot using the 
              D3DXCreateTeapot function and how to render the teapot using the ID3DXMesh::DrawSubset 
              method.
             *************************************************************************************
            */

            #include 
            "d3dUtility.h"

            #pragma warning(disable : 
            4100)

            const int WIDTH  = 640;
            const int HEIGHT = 480;

            IDirect3DDevice9
            *    g_d3d_device = NULL;

            // mesh interface that will store the teapot data and contains method to render the teapot data
            ID3DXMesh* g_teapot_mesh = NULL;

            ////////////////////////////////////////////////////////////////////////////////////////////////////

            bool setup()
            {    
                
            // create the teapot geometry
                D3DXCreateTeapot(g_d3d_device, &g_teapot_mesh, NULL);

                
            // position and aim the camera

                D3DXVECTOR3 position(
            0.0f0.0f-3.0f);
                D3DXVECTOR3 target(
            0.0f0.0f0.0f);
                D3DXVECTOR3 up(
            0.0f1.0f0.0f);

                D3DXMATRIX view_matrix;
                D3DXMatrixLookAtLH(
            &view_matrix, &position, &target, &up);

                g_d3d_device
            ->SetTransform(D3DTS_VIEW, &view_matrix);

                
            // set the projection matrix
                D3DXMATRIX proj;
                D3DXMatrixPerspectiveFovLH(
            &proj, D3DX_PI * 0.5f, (float)WIDTH/HEIGHT, 1.0f1000.0f);
                g_d3d_device
            ->SetTransform(D3DTS_PROJECTION, &proj);

                
            // set wireframe mode render state
                g_d3d_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);

                
            return true;
            }

            void cleanup()
            {
                safe_release
            <ID3DXMesh*>(g_teapot_mesh);
            }

            bool display(float time_delta)
            {
                
            // spin the teapot

                D3DXMATRIX ry;

                
            static float y = 0.0f;
                D3DXMatrixRotationY(
            &ry, y);

                
            // increment y-rotation angle each frame
                y += time_delta;

                
            // reset angle to zero when angle reaches 2*PI
                if(y >= 6.28f)
                    y 
            = 0.0f;

                g_d3d_device
            ->SetTransform(D3DTS_WORLD, &ry);

                
            // draw the scene

                g_d3d_device
            ->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff1.0f0);

                g_d3d_device
            ->BeginScene();

                
            // draw teapot using DrawSubset method with 0 as the argument
                g_teapot_mesh->DrawSubset(0);
                
                g_d3d_device
            ->EndScene();

                g_d3d_device
            ->Present(NULL, NULL, NULL, NULL);

                
            return true;
            }

            LRESULT CALLBACK wnd_proc(HWND hwnd, UINT msg, WPARAM word_param, LPARAM long_param)
            {
                
            switch(msg)
                {
                
            case WM_DESTROY:
                    PostQuitMessage(
            0);
                    
            break;

                
            case WM_KEYDOWN:
                    
            if(word_param == VK_ESCAPE)
                        DestroyWindow(hwnd);
                    
            break;
                }

                
            return DefWindowProc(hwnd, msg, word_param, long_param);
            }

            int WINAPI WinMain(HINSTANCE inst, HINSTANCE, PSTR cmd_line, int cmd_show)
            {
                
            if(! init_d3d(inst, WIDTH, HEIGHT, true, D3DDEVTYPE_HAL, &g_d3d_device))
                {
                    MessageBox(NULL, 
            "init_d3d() - failed."0, MB_OK);
                    
            return 0;
                }

                
            if(! setup())
                {
                    MessageBox(NULL, 
            "Steup() - failed."0, MB_OK);
                    
            return 0;
                }

                enter_msg_loop(display);

                cleanup();
                g_d3d_device
            ->Release();

                
            return 0;
            }

             


            下載茶壺源程序


            posted on 2008-03-14 15:27 lovedday 閱讀(821) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            午夜精品久久久久久影视riav | 久久天天躁狠狠躁夜夜不卡| 精品久久久久久国产牛牛app| 欧美精品一本久久男人的天堂| 99久久精品费精品国产| 久久国产欧美日韩精品免费| 国产成人综合久久精品红| 99久久做夜夜爱天天做精品| 91精品国产9l久久久久| 久久久久亚洲av综合波多野结衣| 无码久久精品国产亚洲Av影片 | 国产成人精品白浆久久69| 久久亚洲电影| 99久久国产主播综合精品| 久久久久久久女国产乱让韩| 久久久九九有精品国产| 国产香蕉久久精品综合网| 久久精品嫩草影院| 成人精品一区二区久久| 日韩精品久久久肉伦网站| 久久精品无码一区二区WWW | 久久精品亚洲日本波多野结衣| 中文精品久久久久人妻| www亚洲欲色成人久久精品| 国内精品伊人久久久久777| 国色天香久久久久久久小说| 久久伊人亚洲AV无码网站| 久久夜色精品国产亚洲| 日韩av无码久久精品免费| 午夜视频久久久久一区| 一本一本久久a久久精品综合麻豆| 国内精品久久久久影院免费| 久久久噜噜噜久久中文福利| 久久久www免费人成精品| 久久这里的只有是精品23| 久久成人18免费网站| 中文字幕成人精品久久不卡| 久久最新精品国产| 久久久无码精品亚洲日韩软件| 久久久久这里只有精品| 久久中文字幕无码专区|