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

            久久高潮一级毛片免费| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲欧洲久久久精品| 久久久久国产精品人妻| 中文无码久久精品| 国内精品久久久久久久coent| 久久―日本道色综合久久| 久久播电影网| 久久妇女高潮几次MBA| 久久精品视频免费| 久久精品国产乱子伦| 国产亚洲欧美精品久久久| 亚洲国产成人久久一区WWW| 男女久久久国产一区二区三区 | 亚洲国产另类久久久精品小说| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 性欧美大战久久久久久久| 久久久久亚洲AV成人片| 亚洲愉拍99热成人精品热久久| 国产精品久久久久影视不卡| 亚洲AV无码久久精品蜜桃| 日韩一区二区久久久久久| 婷婷久久香蕉五月综合加勒比| 欧美激情精品久久久久久久九九九| 国内精品久久久久久中文字幕| 久久婷婷激情综合色综合俺也去| 欧美激情精品久久久久久| 精品久久久久久久中文字幕| 久久精品国产亚洲欧美| 狠狠色婷婷综合天天久久丁香| 久久亚洲精精品中文字幕| 无码任你躁久久久久久老妇App| 香蕉久久久久久狠狠色| 性做久久久久久久久浪潮| 欧美大战日韩91综合一区婷婷久久青草 | 青青草原综合久久| 久久亚洲国产中v天仙www| 久久青青草原精品影院| 88久久精品无码一区二区毛片 | 久久久精品国产sm调教网站 | 77777亚洲午夜久久多喷|