• <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中的光照(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 閱讀(668) 評論(0)  編輯 收藏 引用

            公告

            導航

            統(tǒng)計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久99亚洲综合精品首页| 99久久国产宗和精品1上映| 色综合久久久久| 久久免费香蕉视频| 无码国产69精品久久久久网站| 久久久久99精品成人片欧美| 国产69精品久久久久99| 久久综合亚洲色HEZYO社区| 久久精品毛片免费观看| 国产一区二区三精品久久久无广告 | 99精品久久久久久久婷婷| 韩国免费A级毛片久久| 久久亚洲中文字幕精品一区| 欧美日韩久久中文字幕| 香港aa三级久久三级| 久久久久波多野结衣高潮| a高清免费毛片久久| 亚洲伊人久久成综合人影院 | 亚洲AV日韩AV天堂久久| 久久播电影网| 久久精品国产亚洲欧美| 午夜欧美精品久久久久久久| 免费一级做a爰片久久毛片潮| 久久免费的精品国产V∧| 女人高潮久久久叫人喷水| 久久99精品久久久久久噜噜| 狠狠色丁香婷婷久久综合不卡| 久久强奷乱码老熟女网站| 久久久噜噜噜久久中文字幕色伊伊| 成人免费网站久久久| 久久综合给合久久狠狠狠97色69| 久久久久久久免费视频| 亚洲精品综合久久| 伊人精品久久久久7777| 日日狠狠久久偷偷色综合96蜜桃 | 久久精品女人天堂AV麻| 久久精品这里热有精品| 国产精品久久久久9999| 亚洲精品高清国产一久久| 国产一区二区精品久久岳| 久久精品女人天堂AV麻|