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

            黎明的剔透里伸出了你沁清的曖昧

            Graphics|EngineDev|GameDev|2D&3D Art

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              60 隨筆 :: 1 文章 :: 18 評(píng)論 :: 0 Trackbacks
             
            方向光:Directional Light 只具有方向和顏色屬性的光源,常用來模擬太陽(yáng)



            方向光的計(jì)算只與頂點(diǎn)法線和光源放方向有關(guān),其光照的結(jié)果是頂點(diǎn)法線與入射角形成的夾角的cos值*光源強(qiáng)度
             1void CalculateDirectionalLight (Vertex_PCN *pVertices, int num_vertices){
             2     for(int i=0;i<num_vertices;i++){
             3         //求出轉(zhuǎn)換后在世界坐標(biāo)系的頂點(diǎn)法線;
             4         Vector4 vNormal= g_world_matrix.RotateVector (pVertices[i].m_normal );
             5         Vector4 vIntensity=Vector3Dot(vNormal,g_vLightDirection);//頂點(diǎn)法線和光線方向的夾角,決定反射光的強(qiáng)度
             6        // `累加上計(jì)算出來方向光的強(qiáng)度`
             7        pVertices[i].m_color += vIntensity * g_vLightColor;
             8    
             9     }

            10}

            對(duì)一個(gè)四邊形定義頂點(diǎn)位置 ,頂點(diǎn)顏色 頂點(diǎn)法線
            定義方向光源,光源顏色,
            渲染一個(gè)四邊形,光源只對(duì)其兩個(gè)頂點(diǎn)照射:



            點(diǎn)光源:point light具有位置和顏色的屬性,它在空間中占據(jù)一個(gè)點(diǎn),并向四面八方散射,光線照射到某個(gè)物體后,反射光的強(qiáng)度與物體表面的法線和入射光線的夾角有關(guān),這一點(diǎn)和方向光淚水,不同的是,因?yàn)辄c(diǎn)光源具有位置屬性,所以光線達(dá)到每個(gè)頂點(diǎn)的方向與距離不同,并且它還會(huì)光源隨著物體的距離增大而衰減,
             1//計(jì)算點(diǎn)光源,只與頂點(diǎn)位置,頂點(diǎn)法線以及光源位置有關(guān)
             2void CalculatePointLight (Vertex_PCN *pVertices, int num_vertices){
             3     float fSpotLightCutoffCos=FastMath::Cos (FastMath::DegreeToRadian (g_fSpotLightCutoff));
             4     for(int i=0;i<num_vertices;i++){
             5         Vector4 vPosition=pVertices[i].m_position *g_world_matrix;
             6         Vector4 vNormal=g_world_matrix.RotateVector (pVertices[i].m_normal );
             7         Vector4 vVertex_to_Light=g_vLightPosition-vPosition;
             8         float light_distance=vVertex_to_Light.NormalizeAndGetLength ();
             9         Vector4 vDistance(1.0,light_distance,light_distance*light_distance);
            10         Vector4 vAttenuation=Vector3Dot(vDistance,g_vLightAttenuation);
            11         Vector4 vIntensity=Vector3Dot(vNormal,vVertex_to_Light);
            12         pVertices[i].m_color +=vIntensity*g_vLightColor/vAttenuation;
            13     }

            14}


            取四邊形的一個(gè)頂點(diǎn)位置 法線 顏色參與點(diǎn)光源的照射:



            使用OpenGL自己定義的函數(shù)可以實(shí)現(xiàn)方向光,點(diǎn)光源以及聚光燈

             

            //方向光參數(shù)light0
              float vDirection[4]={0.0f1.0f0.0f0.0f};//w=0,表示平行光
              float vDirAmbientColor[4]={0.0f0.0f0.0f1.0f};
              
            float vDirDiffuseColor[4]={1.0f0.0f0.0f1.0f};

                 
            //點(diǎn)光源參數(shù)Light1
              float vPointPosition[4]={0.0f,3.0f-5.0f1.0f};//w=1表示點(diǎn)光源
              float vPoiAmbientColor[4]={0.0f0.0f0.0f1.0f};
              
            float vPoiDiffuseColor[4]={0.0f1.0f0.0f1.0f};
              
            float vPoiAttenuation[4]={2.0f1.0f0.5f};
                 
               
            //聚光燈參數(shù)Light2
              float vSpotPoint[4]={0.0f10.0f0.0f1.0f};//w=1
              float vSpotDirection[4]={0.0f0.0f,-1.0f0.0f};
              
            float vSpotAmbientColor[4]={0.0f0.0f0.0f1.0f};
              
            float vSpotDiffuseColor[4]={0.0f0.0f1.0f1.0f};
              
            float vSpotAttenuationg[4]={1.0f1.0f0.0f};
              
            float mfSpotLightCutoff=20;
              
            float mfSpotLightExponent=5;

            方向光:

            void Light::SetDirectionLight() {
                    glEnable(GL_LIGHTING);
                    glEnable(GL_LIGHT0);
                    glLightfv(GL_LIGHT0, GL_POSITION, vDirection);
            }
             

            點(diǎn)光源:

             

            void Light::SetPointLight (){
                       glEnable(GL_LIGHTING);
                    glEnable(GL_LIGHT0);
                    
            // `光源位置`
                    glLightfv(GL_LIGHT0, GL_POSITION, vPointPosition);
                            
            // `隨距離的衰減值 `
                            
            // 1/(CONSTANT + LINEAR*d + QUADRATIC*d^2) `公式中的CONSTANT,LINEAR,QUADRATIC值`
                            glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION,    vPoiAttenuation[0]);
                            glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION,    vPoiAttenuation[
            1]);
                            glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION,vPoiAttenuation[
            2]);

            }

            聚光燈:

            void Light::SetSpotLight (){
                   glEnable(GL_LIGHTING);
                   glEnable(GL_LIGHT0);
                     
            // `光源位置`
                    glLightfv(GL_LIGHT0, GL_POSITION, vSpotPoint);
                    
            // `隨距離的衰減值`
                    
            // 1/(CONSTANT + LINEAR*d + QUADRATIC*d^2) `公式中的CONSTANT, LINEAR, QUADRATIC值`
                    glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION,  vSpotAttenuationg[0]);
                    glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION,      vSpotAttenuationg[
            1]);
                    glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, vSpotAttenuationg[
            2]);
                    
            // `光柱的方向`
                    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, vSpotDirection);
                    
            // `光柱圓錐的一半角度`
                    glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, mfSpotLightCutoff);
                    
            // `光柱圓錐的角度衰減`
                    glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, mfSpotLightExponent);
                    
            );

            }


             

             











            posted on 2012-02-10 14:51 情絕格調(diào)(fresmaster) 閱讀(649) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Graphics
            亚洲国产另类久久久精品| 精品熟女少妇AV免费久久 | 亚洲AV日韩精品久久久久久久| 99久久国产综合精品网成人影院 | 久久99国产精品尤物| 久久久久亚洲AV无码观看| 亚洲婷婷国产精品电影人久久| 久久久久久毛片免费看| 日韩久久久久中文字幕人妻 | 久久久久无码精品| 国产激情久久久久影院| 51久久夜色精品国产| 国产精品综合久久第一页| 一本久久免费视频| 久久久国产99久久国产一| 久久久久久免费视频| 奇米影视7777久久精品| 亚洲AV无码1区2区久久| 久久久久久国产精品免费无码| 国产精品免费久久久久久久久| 婷婷综合久久中文字幕| 97精品国产97久久久久久免费| 久久免费观看视频| 国产精品中文久久久久久久| 人妻精品久久无码区| 国产精品久久久99| 久久人人爽人人爽人人片av高请| 亚洲AV无码久久寂寞少妇| 国产综合精品久久亚洲| 欧美亚洲国产精品久久| 亚洲国产精品无码久久一线| 99热精品久久只有精品| 久久久久免费视频| 久久精品国产99久久久古代| 精品久久久久久无码中文字幕一区 | 亚洲国产精品无码久久| 久久综合欧美成人| 天天做夜夜做久久做狠狠| 久久精品中文字幕久久| 久久亚洲国产成人影院网站 | 7777久久亚洲中文字幕|