• <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>
            隨筆 - 32  文章 - 94  trackbacks - 0
            <2009年10月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            好友連接

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            第一個是最容易“發(fā)明”的車輪:x射線效果,不過按這個做法實現(xiàn)真正透明的話還要逐個物體渲染到紋理,再疊加:

             1uniform vec3 LightPos;
             2uniform float specularContribution;
             3
             4varying vec3  normal;
             5varying float LightIntensity;
             6void main(void)
             7{
             8
             9   vec3 ecPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
            10    normal      = normalize(gl_NormalMatrix * gl_Normal);
            11    vec3 lightVec   = normalize(LightPos - ecPosition);
            12    vec3 reflectVec = reflect(-lightVec, normal);
            13    vec3 viewVec    = normalize(-ecPosition);
            14
            15    float spec      = clamp(dot(reflectVec, viewVec), 0.01.0);
            16    spec            = pow(spec, 6.0);
            17
            18    LightIntensity  = (1.0-specularContribution) * max(dot(lightVec, normal), 0.0)
            19                       + specularContribution * spec;
            20
            21   LightIntensity=max(LightIntensity,0.0);
            22   gl_Position = ftransform();
            23}
             1uniform vec4 myColor;
             2uniform vec4 InnerColor;
             3uniform float RayTransmittance;
             4
             5varying vec3  normal;
             6varying float LightIntensity;
             7
             8void main(void)
             9{
            10   if(normal.z<=0.0)
            11   normal.z=1.0;
            12   float alpha=1.0-normal.z;
            13   alpha=pow(alpha,RayTransmittance);
            14   gl_FragColor =mix(myColor,InnerColor,alpha)+LightIntensity;//vec4( myColor.r, myColor.g, myColor.b, alpha );
            15}

            第二個是per pixel lighting,也簡單,把vs中的東西搬到ps中就完了:
             1uniform vec3 LightPos;
             2
             3varying vec3 Normal_eyeSpace;
             4varying vec3 Pos_eyeSpace;
             5
             6void main(void)
             7{
             8   gl_Position = ftransform();
             9   
            10   Normal_eyeSpace=gl_NormalMatrix * gl_Normal;
            11   
            12   Pos_eyeSpace=gl_ModelViewMatrix * gl_Vertex;
            13   
            14   
            15}
             1uniform vec3 LightPos;
             2
             3varying vec3 Normal_eyeSpace;
             4varying vec3 Pos_eyeSpace;
             5
             6void main(void)
             7{
             8   Normal_eyeSpace=normalize(Normal_eyeSpace);
             9   vec3 LightDir_eyeSpace=normalize(Pos_eyeSpace-LightPos);
            10   
            11   float diffuse=max(dot(-LightDir_eyeSpace,Normal_eyeSpace),0.0);
            12   float spec = 0.0;
            13
            14    if (diffuse > 0.0)
            15    {
            16        vec3 reflectVec = reflect(LightDir_eyeSpace, Normal_eyeSpace);
            17        reflectVec=normalize(reflectVec);
            18       
            19        vec3 viewVec=normalize(-Pos_eyeSpace);
            20        spec = max(dot(reflectVec, viewVec), 0.0);//反射光 
            21        spec = pow(spec, 4.0);
            22    }

            23     float color=min(1.0,diffuse+spec);
            24
            25   gl_FragColor = vec4( color, spec, spec, 1.0 );
            26}

            第三個是normal mapping,比較難理解些,在vs中把點的空間位置弄清楚,然后ps中直接拿normal map的貼圖當(dāng)法線用。
            但是看過別人實現(xiàn)的normal mapping是可以控制凹凸的強度的,這里好像控制不了,那位高手能說一說思路?


             1uniform vec3 LightPosition;
             2
             3varying vec3 EyePos_pointTanSpace;
             4varying vec3 LightPos_pointTanSpace;
             5
             6attribute vec3 Tangent;
             7//uniform vec3 Tangent;
             8
             9void main()
            10{
            11    gl_Position = ftransform();
            12    gl_TexCoord[0= gl_MultiTexCoord0;
            13    
            14    
            15    vec3 Pos_eyeSpace = vec3(gl_ModelViewMatrix * gl_Vertex);
            16    
            17    // 眼坐標(biāo)系下的TBN
            18    vec3 n = normalize(gl_NormalMatrix * gl_Normal);
            19    vec3 t = normalize(gl_NormalMatrix * Tangent);
            20    vec3 b = cross(n, t);
            21    mat3 TBN = mat3(t, b, n);
            22
            23    vec3 pointLightPos=LightPosition-Pos_eyeSpace;//光相對于點,在眼空間的位置
            24    LightPos_pointTanSpace=TBN*pointLightPos;//光相對于點,在點的tangent坐標(biāo)系下的位置
            25
            26    
            27    vec3 eyePos=Pos_eyeSpace*-1.0;       //眼睛相對于點,在眼空間的位置
            28    EyePos_pointTanSpace=TBN*eyePos;//眼睛相對于點,在點的tangent坐標(biāo)系下的點位置
            29
            30    
            31}

             1uniform sampler2D BumpTex;
             2
             3uniform float bumpFactor;
             4
             5varying vec3 EyePos_pointTanSpace;
             6varying vec3 LightPos_pointTanSpace;
             7
             8void main() 
             9{
            10   float dist=length(LightPos_pointTanSpace);//光距離
            11
            12    vec3 BumpNorm = vec3(texture2D(BumpTex, gl_TexCoord[0].xy));//獲得法向量
            13    BumpNorm = (BumpNorm -0.5)* bumpFactor;
            14    
            15    
            16    vec3 LightDir=normalize(LightPos_pointTanSpace);//光方向
            17    vec3 viewVec=normalize(EyePos_pointTanSpace);//眼睛方向
            18    
            19    float diffuse = max(dot(BumpNorm, LightDir), 0.0);
            20    
            21    //diffuse=1.0/(pow(2.0,dist));//距離衰減
            22    
            23    vec3 reflectVec=reflect(-LightDir,BumpNorm);
            24    
            25    float spec = max(dot(reflectVec, viewVec), 0.0);//反射光 
            26    spec = pow(spec, 16.0);
            27
            28    float color=spec+diffuse;
            29    
            30    gl_FragColor = vec4(color,spec,0.01.0);
            31}
            posted on 2009-10-17 22:50 陳昱(CY) 閱讀(1374) 評論(3)  編輯 收藏 引用 所屬分類: 圖形學(xué)算法

            FeedBack:
            # re: shader的小奏鳴曲 2009-10-18 09:40 陳梓瀚(vczh)
            陳昱開始搞shader了啊  回復(fù)  更多評論
              
            # re: shader的小奏鳴曲 2009-10-18 12:34 陳昱(CY)
            @陳梓瀚(vczh)

            是啊,空閑時間學(xué)習(xí)學(xué)習(xí),體驗體驗,有什么建議嗎?  回復(fù)  更多評論
              
            # re: shader的小奏鳴曲 2009-10-18 18:03 99讀書人
            空閑時間學(xué)習(xí)學(xué)習(xí),體驗體驗  回復(fù)  更多評論
              
            久久久久无码中| 精品乱码久久久久久夜夜嗨 | 日本精品久久久久中文字幕8| 欧美精品一本久久男人的天堂| 国产精品久久永久免费| 亚洲国产精品婷婷久久| 久久亚洲2019中文字幕| 久久亚洲精品国产精品婷婷| 欧美午夜精品久久久久久浪潮| 狠狠色丁香久久婷婷综合蜜芽五月| 漂亮人妻被中出中文字幕久久 | 18岁日韩内射颜射午夜久久成人| 久久99国产精品成人欧美| 综合久久精品色| 久久青青草原综合伊人| 久久精品国产亚洲AV久| 99久久精品免费看国产| 无码超乳爆乳中文字幕久久 | 久久大香香蕉国产| 亚洲七七久久精品中文国产| 嫩草影院久久国产精品| 欧美精品久久久久久久自慰| 香蕉99久久国产综合精品宅男自 | 亚洲国产精品无码成人片久久| 国产高清美女一级a毛片久久w| 婷婷伊人久久大香线蕉AV| 思思久久99热只有频精品66 | 久久无码人妻一区二区三区午夜 | 亚洲AV无码1区2区久久| 久久国产视屏| 欧美激情精品久久久久| 久久免费线看线看| 国产91色综合久久免费| 久久发布国产伦子伦精品| 久久99国产综合精品免费| 亚洲AV无码久久精品成人 | 三级三级久久三级久久| 久久精品国产福利国产琪琪| 久久99亚洲综合精品首页| 国产三级观看久久| 久久人妻少妇嫩草AV无码蜜桃|