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

            平行光示例:

            The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.

            Syntax

            SHORT GetAsyncKeyState(      
                int vKey
            );

            Parameters

            vKey
            [in] Specifies one of 256 possible virtual-key codes. For more information, see Virtual-Key Codes.

            Return Value

            If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks.

            截圖:

            源代碼:

            /**************************************************************************************
              Demonstrates using a directional 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
                D3DXVECTOR3 light_direction(1.0f-0.0f0.25f);
                D3DXCOLOR   color 
            = WHITE;
                D3DLIGHT9   dir_light 
            = init_directional_light(&light_direction, &color);

                
            // set and enable the light
                g_d3d_device->SetLight(0&dir_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:35 lovedday 閱讀(592) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            亚洲精品无码久久久久AV麻豆| 奇米影视7777久久精品人人爽 | 亚洲精品无码久久久久去q| 久久99精品久久久久久9蜜桃| 一级做a爱片久久毛片| 亚洲欧美日韩精品久久亚洲区 | 久久永久免费人妻精品下载| 久久精品国产亚洲AV无码娇色| 四虎国产精品免费久久5151| 久久天天日天天操综合伊人av| 无码AV中文字幕久久专区| 丰满少妇人妻久久久久久4| 少妇人妻综合久久中文字幕| 免费观看成人久久网免费观看| 2021国内久久精品| 久久久国产一区二区三区| 久久99精品久久久久婷婷| 亚洲午夜精品久久久久久app| 欧美精品一区二区精品久久| 色诱久久久久综合网ywww| 色综合久久天天综线观看| 丰满少妇人妻久久久久久| 伊人久久大香线蕉av不变影院| 久久精品免费大片国产大片| 久久国产精品99精品国产987| 婷婷伊人久久大香线蕉AV| 亚洲色欲久久久久综合网| 精品国产热久久久福利| 99国内精品久久久久久久| 久久久久综合网久久| 国产精品久久久久aaaa| 99re久久精品国产首页2020| 久久国产精品77777| 久久国产热精品波多野结衣AV| 人妻精品久久久久中文字幕69| 国内精品伊人久久久久777| 久久亚洲AV成人无码| 亚洲va国产va天堂va久久| 久久精品人成免费| 久久精品国产秦先生| 久久精品国产亚洲精品|