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

            聚光燈示例,截圖:

            源代碼:

            /**************************************************************************************
              Demonstrates using a spot light with D3DX objects.  
              You can move the spotlight around the scene with the 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;
            ID3DXMesh
            *                g_object_meshes[NUM_MESH];
            D3DXMATRIX                g_world_matrices[NUM_MESH];
            D3DMATERIAL9            g_materials[NUM_MESH];
            D3DLIGHT9                g_spot_light;

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

            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.5f2.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);

                D3DXMATRIX rx;
                D3DXMatrixRotationX(
            &rx, D3DX_PI * 0.5f);
                g_world_matrices[MESH_CYLINDER] 
            *= rx;

                
            // 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;

                
            for(int i = 0; i < NUM_MESH; i++)
                    g_materials[i].Power 
            = 20.0f;

                
            // setup a spot light
                D3DXVECTOR3 light_pos(0.0f0.0f-5.0f);
                D3DXVECTOR3 light_dir(
            0.0f0.0f1.0f);
                D3DXCOLOR   color 
            = WHITE;
                g_spot_light 
            = init_spot_light(&light_pos, &light_dir, &color);

                
            // set and enable the light
                g_d3d_device->SetLight(0&g_spot_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, TRUE);

                
            // position and aim the camera
                D3DXVECTOR3 position(0.0f0.0f-5.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);
                
                
            return true;
            }

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

            bool display(float time_delta)
            {
                
            // move spot light around based on keyboard input

                
            if(GetAsyncKeyState(VK_LEFT) & 0x8000f)
                    g_spot_light.Direction.x 
            -= 0.5f * time_delta;

                
            if(GetAsyncKeyState(VK_RIGHT) & 0x8000f)
                    g_spot_light.Direction.x 
            += 0.5f * time_delta;

                
            if(GetAsyncKeyState(VK_UP) & 0x8000f)
                    g_spot_light.Direction.y 
            += 0.5f * time_delta;

                
            if(GetAsyncKeyState(VK_DOWN) & 0x8000f)
                    g_spot_light.Direction.y 
            -= 0.5f * time_delta;

                
            // update the light
                g_d3d_device->SetLight(0&g_spot_light);
                g_d3d_device
            ->LightEnable(0, TRUE);

                
            // 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 20:46 lovedday 閱讀(669) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

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

            搜索

            最新評(píng)論

            伊人色综合久久天天人手人婷| 国产美女久久精品香蕉69| 国产精品99久久不卡| 久久99精品国产麻豆婷婷| 欧美亚洲国产精品久久| 久久久久人妻精品一区| 久久久精品国产亚洲成人满18免费网站| 午夜精品久久久久久影视riav| 久久综合久久自在自线精品自| 国产综合精品久久亚洲| 久久偷看各类wc女厕嘘嘘| 三级片免费观看久久| 国产91色综合久久免费| 国产精品一区二区久久精品涩爱| 国产精品久久毛片完整版| 久久精品中文字幕大胸| 久久国产香蕉视频| 久久久久久免费一区二区三区| 国内精品伊人久久久影院| 国产一区二区精品久久凹凸| AV无码久久久久不卡蜜桃| 久久精品国产99国产精品导航| 国产精品无码久久综合网| 久久久久免费看成人影片| 久久亚洲精品国产精品婷婷 | 热久久这里只有精品| 国产欧美久久久精品影院| 污污内射久久一区二区欧美日韩| 免费国产99久久久香蕉| 97超级碰碰碰久久久久| 久久久久AV综合网成人| 7777精品久久久大香线蕉| 人人妻久久人人澡人人爽人人精品| 精品国产一区二区三区久久| 久久夜色精品国产噜噜噜亚洲AV| 亚洲综合熟女久久久30p| 久久伊人精品一区二区三区| 久久成人小视频| 色综合久久久久无码专区| 无码专区久久综合久中文字幕 | 久久国产成人精品麻豆|