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

            天行健 君子當自強而不息

            創(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結構體,還提供了能夠設置和取得各種顏色分量的函數(shù)。要設置一個顏色分量,指定一個0 - 255之間的數(shù)字即可。要取得一個顏色分量,給適當?shù)暮瘮?shù)提供一個unsigned char類型的指針即可。

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

            公告

            導航

            統(tǒng)計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久笫一福利免费导航| 天堂无码久久综合东京热| 一本色道久久99一综合| 亚洲精品国产美女久久久| 久久电影网一区| 日韩欧美亚洲综合久久影院Ds| 久久精品国产亚洲AV忘忧草18| 99久久99这里只有免费的精品| 精品无码人妻久久久久久| 亚洲综合伊人久久综合| 99久久国产免费福利| 无码专区久久综合久中文字幕| 一本一道久久精品综合| 熟妇人妻久久中文字幕| 久久99久久99小草精品免视看| 99国内精品久久久久久久| 欧美国产成人久久精品| 国产成人精品久久二区二区| 亚洲精品tv久久久久| 久久99国产精品二区不卡| 亚洲午夜久久久久久久久电影网| 久久精品无码一区二区三区日韩| 99久久免费国产精品热| 亚洲精品美女久久久久99| 日本欧美国产精品第一页久久| 国产午夜免费高清久久影院 | 噜噜噜色噜噜噜久久| 国产精品岛国久久久久| 奇米综合四色77777久久| 亚洲国产成人久久精品99| 久久青青国产| 久久久WWW成人免费毛片| 97精品伊人久久久大香线蕉| 久久99精品国产99久久| 国产精品福利一区二区久久| 久久av无码专区亚洲av桃花岛| 久久精品国产乱子伦| 99久久无色码中文字幕人妻| 伊人久久精品无码av一区| 日产精品久久久久久久| 亚洲国产精品无码久久一线|