• <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
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            好友連接

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            這個(gè)問題在normal mapping階段就已經(jīng)出現(xiàn)了,但是效果沒有用parallax mapping后明顯。具體癥狀如下:

            當(dāng)攝像機(jī)的z軸在正確角度時(shí),上下左右旋轉(zhuǎn)相機(jī),這時(shí)看起來parallax mapping是正確的。


            但當(dāng)攝像機(jī)沿z方向旋轉(zhuǎn)一個(gè)角度后,再上下左右旋轉(zhuǎn)相機(jī),就會(huì)發(fā)現(xiàn)貼圖偏移的方向出現(xiàn)了錯(cuò)誤,貼圖偏移的方向仍然按著攝像機(jī)z軸正確時(shí)的偏移方向偏移。

            比如說,攝像機(jī)沿z旋轉(zhuǎn)180度后,上/下旋轉(zhuǎn)相機(jī),物體的模型改變當(dāng)然是隨著顯示俯視/仰視,但是貼圖偏移卻反過來,變成了仰視/俯視;這時(shí)左右旋轉(zhuǎn),貼圖也會(huì)出現(xiàn)相反的左視/右視.....
            而攝像機(jī)沿z旋轉(zhuǎn)90度或270度時(shí),上下旋轉(zhuǎn)相機(jī),貼圖偏移卻是沿左視、右視改變
            攝像機(jī)沿z旋轉(zhuǎn)其它角度時(shí),這些改變也隨著變化,感覺上就是:貼圖的偏移效果仍然認(rèn)為你的眼睛還在攝像機(jī)z軸的正確角度處看。



            過后問了一個(gè)高手,他說轉(zhuǎn)換到tangent space算錯(cuò)了,然后我再把那本《openGL shading language》normal mapping里面vs的轉(zhuǎn)換tangent space代碼直接拿過來,計(jì)算的結(jié)果卻更加不正確,畫面都不會(huì)有動(dòng)態(tài)的偏移了,后來又去復(fù)習(xí)了向量旋轉(zhuǎn)的公式,覺得自己的應(yīng)該還是沒有錯(cuò)誤,又在網(wǎng)上找了別人寫過的代碼試驗(yàn),弄了半天還是不對(duì),現(xiàn)在感覺仍然是原來的代碼最接近正確的,但找不到原因,望高手解決。
            RenderMonkey源文件:parallaxMapping.rar
            有問題的代碼:

             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    vec3 eyepos=(0,0,0);
            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    vec3 eyePos=Pos_eyeSpace*-1.0;       //眼睛相對(duì)于點(diǎn),在眼空間的位置
            27    EyePos_pointTanSpace=TBN*eyePos;//眼睛相對(duì)于點(diǎn),在點(diǎn)的tangent坐標(biāo)系下的點(diǎn)位置
            28
            29
            30}

             

             1uniform sampler2D BumpTex;
             2uniform sampler2D BitMapTex;
             3uniform float HeightFactor;
             4
             5varying vec3 EyePos_pointTanSpace;
             6varying vec3 LightPos_pointTanSpace;
             7
             8void main() 
             9{
            10    float height = (texture2D(BumpTex, gl_TexCoord[0].xy)).a;//獲得高度
            11   height =(height *2.0)-1.0;
            12   
            13    vec3 LightDir=normalize(LightPos_pointTanSpace);//光方向
            14    vec3 viewVec=normalize(EyePos_pointTanSpace);//眼睛方向
            15    
            16    vec2 texCoord2=gl_TexCoord[0].xy+viewVec.xy*height*HeightFactor;
            17    
            18    vec3 BumpNorm=vec3(texture2D(BumpTex, texCoord2));
            19    
            20    BumpNorm=(BumpNorm *2.0)-1.0;
            21    
            22    vec4 Co=(texture2D(BitMapTex, texCoord2));
            23    
            24    float diffuse = max(dot(BumpNorm, LightDir), 0.0);
            25    
            26    
            27    vec3 reflectVec=reflect(-LightDir,BumpNorm);
            28    
            29    float spec = max(dot(reflectVec, viewVec), 0.0);//反射光 
            30    spec = pow(spec, 8.0);
            31
            32    float color=spec+diffuse;
            33    
            34    gl_FragColor = Co*color;//vec4(color,spec,0.0, 1.0);
            35}


             

            posted on 2009-10-24 13:36 陳昱(CY) 閱讀(1407) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 圖形學(xué)

            FeedBack:
            # re: 一個(gè)有問題的parallax mapping,望高手解決 2009-10-28 13:49 coloriy
            幫你頂了  回復(fù)  更多評(píng)論
              
            # re: 一個(gè)有問題的parallax mapping,望高手解決 2010-06-19 00:27 陳昱(CY)
            問題已經(jīng)在這一篇解決http://www.shnenglu.com/jedi-CY/archive/2010/06/19/118207.html
            居然是RenderMonkey的相機(jī)導(dǎo)致  回復(fù)  更多評(píng)論
              
            亚洲欧美国产日韩综合久久| 久久精品亚洲精品国产欧美| 国产高潮久久免费观看| 久久精品国产亚洲av水果派| 久久成人小视频| 久久综合亚洲鲁鲁五月天| 久久无码AV中文出轨人妻| 97视频久久久| 伊人色综合久久天天网| 日批日出水久久亚洲精品tv| 无码AV波多野结衣久久| 国产精品久久久久9999| 国产精品亚洲综合专区片高清久久久| 久久精品九九亚洲精品| 亚洲国产精品成人久久| 久久久久久久久无码精品亚洲日韩| 国产成人精品综合久久久久| 国产精品18久久久久久vr| 久久ww精品w免费人成| 国产高潮国产高潮久久久| 久久久久人妻一区精品果冻| 色婷婷久久综合中文久久一本| 奇米影视7777久久精品人人爽| 久久久久精品国产亚洲AV无码 | 精品久久久久久亚洲精品| 日韩精品久久久久久久电影蜜臀| 久久精品国产黑森林| 中文字幕无码久久久| 亚洲va久久久噜噜噜久久| 国产精品久久成人影院| 国产精品久久久久久久久久免费| 久久久久香蕉视频| 欧洲精品久久久av无码电影| 99久久99久久精品国产| 国产精品99精品久久免费| 精品人妻伦九区久久AAA片69| 精品久久久噜噜噜久久久| 久久天天日天天操综合伊人av| 五月丁香综合激情六月久久| 久久久久国产精品嫩草影院| 久久综合噜噜激激的五月天|