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

            Direct3D中的繪制(5)

            這個(gè)程序創(chuàng)建并渲染幾種不同的能夠使用D3DXCreate*函數(shù)創(chuàng)建的3D物體。

            Uses a left-handed coordinate system to create a mesh containing an axis-aligned box.

            HRESULT D3DXCreateBox(
            LPDIRECT3DDEVICE9 pDevice,
            FLOAT Width,
            FLOAT Height,
            FLOAT Depth,
            LPD3DXMESH * ppMesh,
            LPD3DXBUFFER * ppAdjacency
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the created box mesh.
            Width
            [in] Width of the box, along the x-axis.
            Height
            [in] Height of the box, along the y-axis.
            Depth
            [in] Depth of the box, along the z-axis.
            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

            The created box is centered at the origin.

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

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

            HRESULT D3DXCreateCylinder(
            LPDIRECT3DDEVICE9 pDevice,
            FLOAT Radius1,
            FLOAT Radius2,
            FLOAT Length,
            UINT Slices,
            UINT Stacks,
            LPD3DXMESH * ppMesh,
            LPD3DXBUFFER * ppAdjacency
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the created cylinder mesh.
            Radius1
            [in] Radius at the negative Z end. Value should be greater than or equal to 0.0f.
            Radius2
            [in] Radius at the positive Z end. Value should be greater than or equal to 0.0f.
            Length
            [in] Length of the cylinder along the z-axis.
            Slices
            [in] Number of slices about the main axis.
            Stacks
            [in] Number of stacks along the main axis.
            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

            The created cylinder is centered at the origin, and its axis is aligned with the z-axis.

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

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

            HRESULT D3DXCreateTorus(
            LPDIRECT3DDEVICE9 pDevice,
            FLOAT InnerRadius,
            FLOAT OuterRadius,
            UINT Sides,
            UINT Rings,
            LPD3DXMESH * ppMesh,
            LPD3DXBUFFER * ppAdjacency
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the created torus mesh.
            InnerRadius
            [in] Inner-radius of the torus. Value should be greater than or equal to 0.0f.
            OuterRadius
            [in] Outer-radius of the torus. Value should be greater than or equal to 0.0f.
            Sides
            [in] Number of sides in a cross-section. Value must be greater than or equal to 3.
            Rings
            [in] Number of rings making up the torus. Value must be greater than or equal to 3.
            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

            The created torus is centered at the origin, and its axis is aligned with the z-axis. The inner radius of the torus is the radius of the cross-section (the minor radius), and the outer radius of the torus is the radius of the central hole.

            This function returns a mesh that can be used later for drawing or manipulation by the application.

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

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

            HRESULT D3DXCreateSphere(
            LPDIRECT3DDEVICE9 pDevice,
            FLOAT Radius,
            UINT Slices,
            UINT Stacks,
            LPD3DXMESH * ppMesh,
            LPD3DXBUFFER * ppAdjacency
            );

            Parameters

            pDevice
            [in] Pointer to an IDirect3DDevice9 interface, representing the device associated with the created sphere mesh.
            Radius
            [in] Radius of the sphere. This value should be greater than or equal to 0.0f.
            Slices
            [in] Number of slices about the main axis.
            Stacks
            [in] Number of stacks along the main axis.
            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

            The created sphere is centered at the origin, and its axis is aligned with the z-axis.

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

            Builds a matrix using the specified offsets.

            D3DXMATRIX * D3DXMatrixTranslation(
            D3DXMATRIX * pOut,
            FLOAT x,
            FLOAT y,
            FLOAT z
            );

            Parameters

            pOut
            [in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
            x
            [in] X-coordinate offset.
            y
            [in] Y-coordinate offset.
            z
            [in] Z-coordinate offset.

            Return Values

            Pointer to a D3DXMATRIX structure that contains a translated transformation matrix.

            Remarks

            The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMATRIXTranslation can be used as a parameter for another function.

            運(yùn)行截圖:

            源程序:

            /**************************************************************************************
             Renders several D3DX shapes in wireframe mode and has the camera fly around the scene.  
             Demonstrates the D3DXCreate* functions, and demonstrates more complex transformations 
             used to position the objects in the world and move the camera around the world.
             *************************************************************************************
            */

            #include 
            "d3dUtility.h"

            #pragma warning(disable : 
            4100)

            #define TEAPOT_MESH        0
            #define BOX_MESH        1
            #define CYLINDER_MESH    2
            #define TORUS_MESH        3
            #define SPHERE_MESH        4
            #define NUM_MESH        5

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

            IDirect3DDevice9
            *    g_d3d_device = NULL;
            ID3DXMesh
            *            g_object_meshes[NUM_MESH];

            // world matrices for each object.
            // these matrices specify the location of the objects in the world.
            D3DXMATRIX g_object_world_matrices[NUM_MESH];

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

            bool setup()
            {    
                
            // create the teapot geometry
                D3DXCreateTeapot(g_d3d_device, &g_object_meshes[TEAPOT_MESH], NULL);
                D3DXCreateBox(g_d3d_device, 
            2.0f2.0f2.0f&g_object_meshes[BOX_MESH], NULL);
                D3DXCreateCylinder(g_d3d_device, 
            1.0f1.0f3.0f1010&g_object_meshes[CYLINDER_MESH], NULL);
                D3DXCreateTorus(g_d3d_device, 
            1.0f3.0f1010&g_object_meshes[TORUS_MESH], NULL);
                D3DXCreateSphere(g_d3d_device, 
            1.0f1010&g_object_meshes[SPHERE_MESH], NULL);

                
            // Build world matrices - position the objects in world space.
                
            // For example, g_object_world_matrices[1] will position g_object_meshes[1] at (-5, 0, 5).
                
            // Likewise, g_object_world_matrices[2] will position g_object_meshes[2] at (5, 0, -5).
                D3DXMatrixTranslation(&g_object_world_matrices[TEAPOT_MESH],    0.0f0.0f0.0f);
                D3DXMatrixTranslation(
            &g_object_world_matrices[BOX_MESH],       -5.0f0.0f,  5.0f);
                D3DXMatrixTranslation(
            &g_object_world_matrices[CYLINDER_MESH],  5.0f0.0f,  5.0f);
                D3DXMatrixTranslation(
            &g_object_world_matrices[TORUS_MESH],       -5.0f0.0f-5.0f);
                D3DXMatrixTranslation(
            &g_object_world_matrices[SPHERE_MESH],    5.0f0.0f-5.0f);

                
            // 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()
            {
                
            for(int i = 0; i < NUM_MESH; i++)
                    safe_release
            <ID3DXMesh*>(g_object_meshes[i]);
            }

            bool display(float time_delta)
            {
                
            // Animate the camera:
                
            //
                
            // The camera will circle around the center of the scene.  We use the sin and cos functions 
                
            // to generate points on the circle, then scale them by 10 to further the radius.  
                
            // In addition the camera will move up and down as it circles about the scene.
                static float angle = (3.0f * D3DX_PI) / 2.0f;
                
            static float camera_height = 0.0f;
                
            static float camera_height_dir = 10.0f;

                D3DXVECTOR3 position(cosf(angle) 
            * 10.0f, camera_height, sinf(angle) * 10.0f);

                
            // the camera is targetted at the origin of the world
                D3DXVECTOR3 target(0.0f0.0f0.0f);

                
            // the worlds up vector
                D3DXVECTOR3 up(0.0f1.0f0.0f);

                D3DXMATRIX view_matrix;
                D3DXMatrixLookAtLH(
            &view_matrix, &position, &target, &up);
                g_d3d_device
            ->SetTransform(D3DTS_VIEW, &view_matrix);

                
            // compute the position for the next frame
                angle += time_delta;
                
            if(angle >= 6.28f)
                    angle 
            = 0.0f;

                
            // compute the height of the camera for the next frame
                camera_height += camera_height_dir * time_delta;
                
            if(camera_height >= 20.0f || camera_height <= -20.0f)
                    camera_height_dir 
            = -camera_height_dir;
                
                
            // draw the scene

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

                g_d3d_device
            ->BeginScene();

                
            for(int i = 0; i < NUM_MESH; i++)
                {
                    
            // set the world matrix that positions the object
                    g_d3d_device->SetTransform(D3DTS_WORLD, &g_object_world_matrices[i]);

                    
            // draw the object using the previously set world matrix
                    g_object_meshes[i]->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 18:52 lovedday 閱讀(980) 評(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)論

            91精品国产色综久久| 久久久久国产视频电影| 99久久做夜夜爱天天做精品| 麻豆av久久av盛宴av| 国产69精品久久久久777| 久久精品国产一区| 18禁黄久久久AAA片| 久久国产免费观看精品| 欧美精品福利视频一区二区三区久久久精品 | 亚洲国产天堂久久综合| 奇米影视7777久久精品| 久久久久无码国产精品不卡| 无遮挡粉嫩小泬久久久久久久| 日本精品久久久中文字幕| 久久中文字幕人妻熟av女| 国产精品欧美久久久天天影视| 色综合久久天天综线观看| 久久99国产综合精品| 欧美成a人片免费看久久| 亚洲嫩草影院久久精品| 久久ZYZ资源站无码中文动漫| 亚洲人成无码网站久久99热国产| 99久久无码一区人妻| 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲天堂| 久久精品亚洲精品国产欧美| 久久精品成人免费网站| 日韩人妻无码精品久久久不卡 | 国产成人99久久亚洲综合精品| 婷婷久久香蕉五月综合加勒比| 欧美激情精品久久久久久久九九九| 99久久国产亚洲高清观看2024| 久久久国产精品福利免费 | 久久久精品人妻一区二区三区蜜桃 | 久久精品免费一区二区| 亚洲精品综合久久| 亚洲欧洲久久av| 亚洲精品无码久久久久sm| 无码精品久久久天天影视| 少妇高潮惨叫久久久久久 | 亚洲∧v久久久无码精品|