• <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)而不息

            創(chuàng)建游戲內(nèi)核(7)


            本篇是 創(chuàng)建游戲內(nèi)核(6)的續(xù)篇,其中涉及到的材質(zhì)知識請參閱D3D 中的材質(zhì)和光照處理。

            材質(zhì)和MATERIAL

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

            來看看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的實現(xiàn):
             
            //-------------------------------------------------------------------
            // 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結(jié)構(gòu)體,還提供了能夠設(shè)置和取得各種顏色分量的函數(shù)。要設(shè)置一個顏色分量,指定一個0 - 255之間的數(shù)字即可。要取得一個顏色分量,給適當(dāng)?shù)暮瘮?shù)提供一個unsigned char類型的指針即可。

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


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


            公告

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            隨筆分類(178)

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

            搜索

            最新評論

            亚洲综合伊人久久大杳蕉| 日韩亚洲欧美久久久www综合网 | 亚洲精品NV久久久久久久久久| 国产成人久久AV免费| 狠狠色婷婷久久综合频道日韩| 青青草原综合久久大伊人精品| 精品久久久久久成人AV| 色综合久久无码中文字幕| 18岁日韩内射颜射午夜久久成人| 污污内射久久一区二区欧美日韩| 久久这里只有精品视频99| 久久精品成人免费观看97| 青青草原综合久久大伊人导航 | 亚洲精品国精品久久99热| 久久久久18| 亚洲欧美精品一区久久中文字幕| 久久99精品九九九久久婷婷| 久久av免费天堂小草播放| 久久婷婷色综合一区二区| 久久大香萑太香蕉av| 亚洲国产另类久久久精品| 久久成人国产精品| 国产精品九九久久免费视频 | 狠狠狠色丁香婷婷综合久久俺| 精品久久久久久国产潘金莲| 99国产精品久久久久久久成人热| 婷婷综合久久中文字幕| 久久性精品| 无码伊人66久久大杳蕉网站谷歌 | 亚洲国产欧美国产综合久久| 99re久久精品国产首页2020| 久久免费视频6| 亚洲国产精品一区二区久久hs| 色综合久久最新中文字幕| 久久综合精品国产一区二区三区| 综合人妻久久一区二区精品| 91久久婷婷国产综合精品青草| 久久男人中文字幕资源站| 久久久亚洲欧洲日产国码aⅴ| 青青青青久久精品国产h| 日韩欧美亚洲综合久久影院Ds|