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

            隨筆分類

            隨筆檔案

            好友連接

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

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

             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}

            第二個(gè)是per pixel lighting,也簡(jiǎn)單,把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}

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


             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;//光相對(duì)于點(diǎn),在眼空間的位置
            24    LightPos_pointTanSpace=TBN*pointLightPos;//光相對(duì)于點(diǎn),在點(diǎn)的tangent坐標(biāo)系下的位置
            25
            26    
            27    vec3 eyePos=Pos_eyeSpace*-1.0;       //眼睛相對(duì)于點(diǎn),在眼空間的位置
            28    EyePos_pointTanSpace=TBN*eyePos;//眼睛相對(duì)于點(diǎn),在點(diǎn)的tangent坐標(biāo)系下的點(diǎn)位置
            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) 閱讀(1375) 評(píng)論(3)  編輯 收藏 引用 所屬分類: 圖形學(xué) 、算法

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

            是啊,空閑時(shí)間學(xué)習(xí)學(xué)習(xí),體驗(yàn)體驗(yàn),有什么建議嗎?  回復(fù)  更多評(píng)論
              
            # re: shader的小奏鳴曲 2009-10-18 18:03 99讀書(shū)人
            空閑時(shí)間學(xué)習(xí)學(xué)習(xí),體驗(yàn)體驗(yàn)  回復(fù)  更多評(píng)論
              
            AV色综合久久天堂AV色综合在| 亚洲人成无码网站久久99热国产| 99久久夜色精品国产网站| 久久男人中文字幕资源站| 欧美久久综合九色综合| 久久国产欧美日韩精品| 国产精品对白刺激久久久| 久久99精品国产麻豆不卡| 久久久久久精品无码人妻| 狠狠色丁香久久综合五月| 亚洲国产精品综合久久网络| 日产精品久久久久久久| 久久久久久毛片免费看| 久久亚洲精品成人av无码网站| 国产成人精品久久亚洲| 久久精品麻豆日日躁夜夜躁| 99热都是精品久久久久久| 久久久婷婷五月亚洲97号色| 国产伊人久久| 久久99精品国产一区二区三区 | 久久综合久久美利坚合众国| 中文无码久久精品| 日韩十八禁一区二区久久| 精品久久久久久国产91| 亚洲色婷婷综合久久| 久久一本综合| 久久国产高清一区二区三区| 69久久夜色精品国产69| 久久天天躁狠狠躁夜夜avapp| 老男人久久青草av高清| 狠狠色丁香久久婷婷综合_中 | 99热成人精品免费久久| 久久精品中文无码资源站| 亚洲精品无码久久久影院相关影片| 久久婷婷五月综合97色直播| 国产亚州精品女人久久久久久| 久久青草国产精品一区| 久久se精品一区二区| 久久亚洲国产午夜精品理论片| 国产精品久久久久天天影视| 国产精品18久久久久久vr |