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

            天行健 君子當自強而不息

            創建游戲內核(7)


            本篇是 創建游戲內核(6)的續篇,其中涉及到的材質知識請參閱D3D 中的材質和光照處理。

            材質和MATERIAL

            通過改變繪制表面的顏色值,就可以改變渲染對象的外觀,MATERIAL類可以使改變材質顏色值變得更容易一些。

            來看看MATERIAL類的定義:
             
            //================================================================================
            // Defines for class MATERIAL.
            //================================================================================
            class MATERIAL
            {
            protected:
                D3DMATERIAL9 _material;

            public:
                MATERIAL();

                D3DMATERIAL9* Get_Material();

                
            void Set_Diffuse_Color(unsigned char red, unsigned char green, unsigned char blue);
                
            void Get_Diffuse_Color(unsigned char* red, unsigned char* green, unsigned char* blue);

                
            void Set_Ambient_Color(unsigned char red, unsigned char green, unsigned char blue);
                
            void Get_Ambient_Color(unsigned char* red, unsigned char* green, unsigned char* blue);

                
            void Set_Specular_Color(unsigned char red, unsigned char green, unsigned char blue);
                
            void Get_Specular_Color(unsigned char* red, unsigned char* green, unsigned char* blue);

                
            void Set_Emissive_Color(unsigned char red, unsigned char green, unsigned char blue);
                
            void Get_Emissive_Color(unsigned char* red, unsigned char* green, unsigned char* blue);

                
            void Set_Power(float power);
                
            float Get_Power();
            };
             

            接著是類MATERIAL的實現:
             
            //-------------------------------------------------------------------
            // Constructor, set a default material (white).
            //-------------------------------------------------------------------
            MATERIAL::MATERIAL()
            {
                ZeroMemory(&_material, 
            sizeof(D3DMATERIAL9));

                Set_Diffuse_Color(255, 255, 255);
                Set_Ambient_Color(255, 255, 255);
                Set_Specular_Color(255, 255, 255);
                Set_Emissive_Color(255, 255, 255);

                Set_Power(1.0f);
            }

            //-------------------------------------------------------------------
            // Set diffuse color.
            //-------------------------------------------------------------------
            void MATERIAL::Set_Diffuse_Color(unsigned char red, unsigned char green, unsigned char blue)
            {
                _material.Diffuse.r = red / 255.0f;
                _material.Diffuse.g = green / 255.0f;
                _material.Diffuse.b = blue / 255.0f;
            }

            //-------------------------------------------------------------------
            // Get diffuse color.
            //-------------------------------------------------------------------
            void MATERIAL::Get_Diffuse_Color(unsigned char* red, unsigned char* green, unsigned char* blue)
            {
                
            if(red != NULL)
                    *red = (unsigned 
            char)(255.0 * _material.Diffuse.r);

                
            if(green != NULL)
                    *green = (unsigned 
            char)(255.0 * _material.Diffuse.g);

                
            if(blue != NULL)
                    *blue = (unsigned 
            char)(255.0 * _material.Diffuse.b);
            }

            //-------------------------------------------------------------------
            // Set ambient color.
            //-------------------------------------------------------------------
            void MATERIAL::Set_Ambient_Color(unsigned char red, unsigned char green, unsigned char blue)
            {
                _material.Ambient.r = red / 255.0f;
                _material.Ambient.g = green / 255.0f;
                _material.Ambient.b = blue / 255.0f;
            }

            //-------------------------------------------------------------------
            // Get ambient color.
            //-------------------------------------------------------------------
            void MATERIAL::Get_Ambient_Color(unsigned char *red, unsigned char *green, unsigned char *blue)
            {
                
            if(red != NULL)
                    *red = (unsigned 
            char)(255.0f * _material.Ambient.r);

                
            if(green != NULL)
                    *green = (unsigned 
            char)(255.0f * _material.Ambient.g);

                
            if(blue != NULL)
                    *blue = (unsigned 
            char)(255.0f * _material.Ambient.b);
            }

            //-------------------------------------------------------------------
            // Set specular color.
            //-------------------------------------------------------------------
            void MATERIAL::Set_Specular_Color(unsigned char red, unsigned char green, unsigned char blue)
            {
                _material.Specular.r = red / 255.0f;
                _material.Specular.g = green / 255.0f;
                _material.Specular.b = blue / 255.0f;
            }

            //-------------------------------------------------------------------
            // Get specular color.
            //-------------------------------------------------------------------
            void MATERIAL::Get_Specular_Color(unsigned char* red, unsigned char* green, unsigned char* blue)
            {
                
            if(red != NULL)
                    *red = (unsigned 
            char)(255.0 * _material.Specular.r);

                
            if(green != NULL)
                    *green = (unsigned 
            char)(255.0 * _material.Specular.g);

                
            if(blue != NULL)
                    *blue = (unsigned 
            char)(255.0 * _material.Specular.b);
            }

            //-------------------------------------------------------------------
            // Set emissive color.
            //-------------------------------------------------------------------
            void MATERIAL::Set_Emissive_Color(unsigned char red, unsigned char green, unsigned char blue)
            {
                _material.Emissive.r = red / 255.0f;
                _material.Emissive.g = green / 255.0f;
                _material.Emissive.b = blue / 255.0f;
            }

            //-------------------------------------------------------------------
            // Get emmisive color.
            //-------------------------------------------------------------------
            void MATERIAL::Get_Emissive_Color(unsigned char *red, unsigned char *green, unsigned char *blue)
            {
                
            if(red != NULL)
                    *red = (unsigned 
            char)(255.0 * _material.Emissive.r);

                
            if(green != NULL)
                    *green = (unsigned 
            char)(255.0 * _material.Emissive.g);

                
            if(blue != NULL)
                    *blue = (unsigned 
            char)(255.0 * _material.Emissive.b);
            }

            //-------------------------------------------------------------------
            // Set power for material, which specifying the sharpness of specular 
            // highlights.
            //-------------------------------------------------------------------
            void MATERIAL::Set_Power(float power)
            {
                _material.Power = power;
            }

            //-------------------------------------------------------------------
            // Get power for material, which specifying the sharpness of specular 
            // highlights.
            //-------------------------------------------------------------------
            float MATERIAL::Get_Power()
            {
                
            return _material.Power;
            }

            //-------------------------------------------------------------------
            // Get material.
            //-------------------------------------------------------------------
            D3DMATERIAL9* MATERIAL::Get_Material()
            {
                
            return &_material;
            }
             

            MATERIAL類保存了一個D3DMATERIAL9結構體,還提供了能夠設置和取得各種顏色分量的函數。要設置一個顏色分量,指定一個0 - 255之間的數字即可。要取得一個顏色分量,給適當的函數提供一個unsigned char類型的指針即可。

            posted on 2007-08-30 21:04 lovedday 閱讀(304) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            国产精品成人久久久久久久| 日本久久久精品中文字幕| 无码任你躁久久久久久老妇| 亚洲国产另类久久久精品| 伊人久久综合热线大杳蕉下载| 一本色综合久久| 人妻无码久久精品| 欧洲精品久久久av无码电影| 99久久国产亚洲综合精品| 久久99精品久久久久久秒播 | 香蕉久久夜色精品国产2020| 国内精品欧美久久精品| 久久久久亚洲精品日久生情| 久久天天躁夜夜躁狠狠躁2022| 91视频国产91久久久| 72种姿势欧美久久久久大黄蕉| 国产精品青草久久久久福利99| 亚洲综合伊人久久大杳蕉| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 久久久久国产精品嫩草影院| 成人精品一区二区久久| www久久久天天com| 欧美一区二区精品久久| 日产精品久久久久久久性色 | 亚洲精品无码久久久影院相关影片 | 久久久精品久久久久久| 久久久久国色AV免费看图片| 丰满少妇人妻久久久久久| 色婷婷综合久久久中文字幕| 7777精品伊人久久久大香线蕉| 国产精品免费看久久久香蕉| 亚洲嫩草影院久久精品| 久久精品国产99国产精偷| 久久久久亚洲AV成人网人人网站 | 久久笫一福利免费导航 | 久久精品三级视频| 国产一区二区精品久久岳| 国产99久久久国产精免费| 久久精品成人免费网站| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲美日韩Av中文字幕无码久久久妻妇 |