• <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无码久久一区二区| 精品熟女少妇AV免费久久| 精品国产综合区久久久久久| 伊人久久精品无码二区麻豆| 伊人精品久久久久7777| 国产精品亚洲综合久久| 久久青青草原亚洲av无码| 久久久无码精品亚洲日韩软件| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 精品久久久久中文字幕日本| 久久精品青青草原伊人| 国色天香久久久久久久小说| 久久强奷乱码老熟女网站| 亚洲中文字幕无码久久2017| 久久国产亚洲高清观看| 久久男人Av资源网站无码软件| 久久久一本精品99久久精品66 | 青青国产成人久久91网| 99久久精品费精品国产| 久久久精品国产亚洲成人满18免费网站 | 精品综合久久久久久97| 久久久久亚洲av综合波多野结衣| 精品国产日韩久久亚洲| 欧美噜噜久久久XXX| 久久精品国内一区二区三区| 国产精品免费久久久久电影网| 欧美与黑人午夜性猛交久久久| 久久精品国产亚洲αv忘忧草| 亚洲AV乱码久久精品蜜桃| 一级做a爰片久久毛片人呢| 国内精品久久久久久麻豆 | 久久精品嫩草影院| 久久久精品免费国产四虎| 国产女人aaa级久久久级| 性做久久久久久久久久久| 久久精品国产久精国产思思| 久久国产视频99电影| 99久久国产综合精品女同图片| 久久99国产精品久久| 亚洲国产精品成人久久蜜臀|