• <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ì)知識(shí)請(qǐng)參閱D3D 中的材質(zhì)和光照處理。

            材質(zhì)和MATERIAL

            通過改變繪制表面的顏色值,就可以改變渲染對(duì)象的外觀,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的實(shí)現(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類保存了一個(gè)D3DMATERIAL9結(jié)構(gòu)體,還提供了能夠設(shè)置和取得各種顏色分量的函數(shù)。要設(shè)置一個(gè)顏色分量,指定一個(gè)0 - 255之間的數(shù)字即可。要取得一個(gè)顏色分量,給適當(dāng)?shù)暮瘮?shù)提供一個(gè)unsigned char類型的指針即可。

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


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


            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

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

            搜索

            最新評(píng)論

            久久精品国产亚洲5555| 久久精品国产亚洲AV不卡| 四虎影视久久久免费| 一级做a爰片久久毛片免费陪| 国产69精品久久久久APP下载 | 亚洲精品乱码久久久久久不卡| 丁香五月网久久综合| 久久婷婷国产综合精品| 久久偷看各类wc女厕嘘嘘| 久久成人国产精品| 久久久久久久久波多野高潮| 狠狠色丁香婷婷综合久久来| 久久久久久久91精品免费观看| 久久久久高潮毛片免费全部播放| 久久精品国产99国产精品澳门| 久久国产亚洲精品| 成人精品一区二区久久| 伊人久久精品无码av一区| 2021国内精品久久久久久影院| 欧美午夜精品久久久久免费视| 欧美粉嫩小泬久久久久久久| 国产精品美女久久久久av爽| 久久久久亚洲AV无码观看| 久久99精品久久久久久野外 | 久久综合九色欧美综合狠狠| 97久久香蕉国产线看观看| 久久精品国产亚洲αv忘忧草| 久久久久久一区国产精品| 99久久国产热无码精品免费久久久久 | 国内精品久久久久久久coent| 伊人久久无码中文字幕| 伊人久久大香线蕉无码麻豆 | 久久青青草原精品国产| 久久久久久精品免费免费自慰| 久久久久久亚洲精品不卡| 三级韩国一区久久二区综合| 久久久精品久久久久久| 久久婷婷五月综合色99啪ak| 久久综合亚洲色HEZYO国产| 色天使久久综合网天天| 四虎国产精品成人免费久久|