• <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中的光照(4)

            點光源示例,截圖:

            源代碼:

             

            /**************************************************************************************
              Demonstrates using a point light with D3DX objects.  
              You can orbit the scene using the left and right arrow keys.  
              In addition you can elevate the camera with the up and down arrow keys.  
             *************************************************************************************
            */

            #include 
            "d3dUtility.h"

            #pragma warning(disable : 
            4100)

            #define MESH_TEAPOT        0
            #define MESH_SPHERE        1
            #define MESH_TORUS        2
            #define MESH_CYLINDER    3
            #define NUM_MESH        4

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

            IDirect3DDevice9
            *        g_d3d_device  = NULL;
            ID3DXMesh
            *                g_object_meshes[NUM_MESH];
            D3DXMATRIX                g_world_matrices[NUM_MESH];
            D3DMATERIAL9            g_materials[NUM_MESH];

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

            bool setup()
            {    
                
            // create objects
                D3DXCreateTeapot(g_d3d_device, &g_object_meshes[MESH_TEAPOT], NULL);
                D3DXCreateSphere(g_d3d_device, 
            1.0f2020&g_object_meshes[MESH_SPHERE], NULL);
                D3DXCreateTorus(g_d3d_device, 
            0.5f1.0f2020&g_object_meshes[MESH_TORUS], NULL);
                D3DXCreateCylinder(g_d3d_device, 
            0.5f1.0f2.0f2020&g_object_meshes[MESH_CYLINDER], NULL);

                
            // build world matrices - position the objects in world space
                D3DXMatrixTranslation(&g_world_matrices[MESH_TEAPOT],     0.0f,  2.0f0.0f);
                D3DXMatrixTranslation(
            &g_world_matrices[MESH_SPHERE],     0.0f-2.0f0.0f);
                D3DXMatrixTranslation(
            &g_world_matrices[MESH_TORUS],    -3.0f,  0.0f0.0f);
                D3DXMatrixTranslation(
            &g_world_matrices[MESH_CYLINDER],     3.0f,  0.0f0.0f);

                
            // setup the object's materials
                g_materials[MESH_TEAPOT]   = RED_MATERIAL;
                g_materials[MESH_SPHERE]   
            = BLUE_MATERIAL;
                g_materials[MESH_TORUS]    
            = GREEN_MATERIAL;
                g_materials[MESH_CYLINDER] 
            = YELLOW_MATERIAL;

                
            // setup a directional light, note that the point light is positioned at the origin.
                D3DXVECTOR3 light_direction(0.0f0.0f0.0f);
                D3DXCOLOR   color 
            = WHITE;
                D3DLIGHT9   point_light 
            = init_point_light(&light_direction, &color);

                
            // set and enable the light
                g_d3d_device->SetLight(0&point_light);
                g_d3d_device
            ->LightEnable(0, TRUE);

                
            // turn off specular lighting and instruct Direct3D to renormalize normals
                g_d3d_device->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
                g_d3d_device
            ->SetRenderState(D3DRS_SPECULARENABLE, FALSE);

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

            void cleanup()
            {
                
            for(int i = 0; i < NUM_MESH; i++)
                    safe_release
            <ID3DXMesh*>(g_object_meshes[i]);
            }

            bool display(float time_delta)
            {
                
            // update the scene: update camera position

                
            static float angle = (3.0f * D3DX_PI) / 2.0f;
                
            static float height = 5.0f;

                
            if(GetAsyncKeyState(VK_LEFT) & 0x8000f)
                    angle 
            -= 0.5f * time_delta;

                
            if(GetAsyncKeyState(VK_RIGHT) & 0x8000f)
                    angle 
            += 0.5f * time_delta;

                
            if(GetAsyncKeyState(VK_UP) & 0x8000f)
                    height 
            += 5.0f * time_delta;

                
            if(GetAsyncKeyState(VK_DOWN) & 0x8000f)
                    height 
            -= 5.0f * time_delta;

                D3DXVECTOR3 position(cosf(angle) 
            * 7.0f, height, sinf(angle) * 7.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);

                
            // draw the scene

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

                g_d3d_device
            ->BeginScene();

                
            for(int i = 0; i < NUM_MESH; i++)
                {
                    
            // set material and world matrix for ith object, then render the ith object.
                    g_d3d_device->SetMaterial(&g_materials[i]);
                    g_d3d_device
            ->SetTransform(D3DTS_WORLD, &g_world_matrices[i]);
                    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-16 19:55 lovedday 閱讀(546) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久综合久久综合亚洲| 91精品国产综合久久久久久 | 99久久精品国产一区二区| 人妻无码精品久久亚瑟影视 | 亚洲精品高清久久| 久久伊人精品青青草原日本| 久久精品久久久久观看99水蜜桃| 无码精品久久久久久人妻中字| 久久青草国产精品一区| 亚洲国产精品综合久久网络| 久久精品国产亚洲AV嫖农村妇女| 99久久精品国产一区二区三区| 久久久久波多野结衣高潮| 99久久成人18免费网站| 亚洲va国产va天堂va久久| 精品久久国产一区二区三区香蕉| 亚洲va中文字幕无码久久不卡 | 国产精品久久久久久久app | 91精品久久久久久无码| 久久久久青草线蕉综合超碰| 久久成人精品| 国产精品成人无码久久久久久 | 久久这里只有精品18| 亚洲国产天堂久久综合| 999久久久国产精品| AV色综合久久天堂AV色综合在| 亚洲国产成人精品女人久久久 | 国产精品久久久亚洲| 亚洲а∨天堂久久精品| 国产精品99久久久久久www| 2022年国产精品久久久久| 久久精品卫校国产小美女| 久久精品综合网| 久久婷婷人人澡人人爽人人爱| 日产久久强奸免费的看| 国产亚州精品女人久久久久久| 狠狠狠色丁香婷婷综合久久五月 | 午夜精品久久久久久影视777| 久久精品中文字幕一区| 久久国产成人| 精品久久久中文字幕人妻|