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

            永遠(yuǎn)也不完美的程序

            不斷學(xué)習(xí),不斷實(shí)踐,不斷的重構(gòu)……

            常用鏈接

            統(tǒng)計(jì)

            積分與排名

            好友鏈接

            最新評論

            淺談水體的實(shí)現(xiàn)

                溫故知新,水面很早就實(shí)現(xiàn)了,但沒有在這里寫過,今天總結(jié)一下。
                水的模擬要達(dá)到以下效果:水面的折射與反射,水的波動(dòng)。
                要達(dá)到這種效果,需要以下四張紋理:折射紋理(RenderTarget),反射紋理(RenderTarget),Bumpmap,水自己的紋理。
                折射與反射的原理就不具體說了,下面只說實(shí)現(xiàn)步驟。

                一、渲染到紋理
                RenderTarget的創(chuàng)建我不多述了,網(wǎng)上查查,我創(chuàng)建的是256X256的紋理,格式為X8R8G8B8。折射紋理比較簡單,直接把當(dāng)前的地形或在水面以下的物體渲染多次,注意,為提高性能,在這次pass中,可以選擇帶clip的shader(假如用到shader)或者直接使用水面的平面作為一個(gè)clipplane(不使用Shader)。
                然后是反射的實(shí)現(xiàn),首先生成一個(gè)以水面為反射面的反射矩陣,攝像機(jī)的坐標(biāo)乘與反射矩陣求得新的坐標(biāo)。然后按渲染流程再走一次,(即計(jì)算裁剪空間,加入渲染對列,到最后渲染)。渲染到紋理后,注意,此時(shí)的紋理U坐標(biāo)應(yīng)該做一個(gè)反轉(zhuǎn)操作。如果在shader中修改,必須比較簡單就是u = 1.0 - uvCoord.x。 

                二、水的波動(dòng)

                需要利用一個(gè)Bumpmap做作紋理UV值的偏移,下面是HLSL的代碼:

                float2 BumpUVCoords = input.uvCoords;
                BumpUVCoords.x += time;
                BumpUVCoords.y -= time;
                float4 dudv_offset = tex2D(BumpMap, BumpUVCoords);//primary_motion + secondary_motion); //, 0.0001, 0.9999));  // + secondary_motion);
                float2 offsets = (2 * dudv_offset.xy - 1) * 0.1;

                //這里的clamp是多余的,明天試試去掉
                float2 lastCoords = input.uvCoords + offsets;  //clamp(input.uvCoords + offsets, 0.00, 4.00);//offsets; //, 0.00, 1.00);
               
                float2 waterUV = input.uvCoords;
                waterUV.x += time;
                waterUV.y -= time;
                float4 colorWater = tex2D(Samp0, waterUV);
             
                output.Color = colorWater;

                clamp(input.outTexProj, 0.0, 1.0);
                float2 texProj = input.outTexProj.xy / input.outTexProj.w;
                texProj.x = 1.0 - texProj.x;
                lastCoords = clamp(texProj + offsets, 0.0, 1.0);

            截圖:

            posted on 2009-06-03 20:45 狂爛球 閱讀(2607) 評論(4)  編輯 收藏 引用 所屬分類: 圖形編程

            評論

            # re: 淺談水體的實(shí)現(xiàn) 2009-06-03 21:38 崇拜中

            天書  回復(fù)  更多評論   

            # re: 淺談水體的實(shí)現(xiàn) 2009-06-03 22:02 魔鬼螳螂

            @崇拜中
            啥意思?  回復(fù)  更多評論   

            # re: 淺談水體的實(shí)現(xiàn) 2009-06-04 17:58 東方CJ

            看不懂,看來我還是要多學(xué)習(xí)  回復(fù)  更多評論   

            # re: 淺談水體的實(shí)現(xiàn) 2009-10-14 13:53 Leaf

            效率如何?  回復(fù)  更多評論   

            青青青青久久精品国产| 成人精品一区二区久久| 久久99热这里只频精品6| 无码人妻少妇久久中文字幕 | 2021国产精品午夜久久| 久久精品无码一区二区WWW | 一本一本久久a久久精品综合麻豆| 亚洲午夜久久久| 国产午夜免费高清久久影院| 久久免费视频观看| 久久伊人精品一区二区三区| 国产成人综合久久综合| 伊人色综合久久天天网| 97精品伊人久久久大香线蕉| 99久久无色码中文字幕人妻| 国产精品免费看久久久香蕉| 久久精品国产亚洲AV香蕉| 老司机午夜网站国内精品久久久久久久久 | 久久综合九色综合精品| 久久只这里是精品66| 麻豆精品久久久一区二区| 亚洲国产精品高清久久久| 亚洲国产成人久久综合一| 精品久久久久久中文字幕大豆网| 伊人丁香狠狠色综合久久| 欧美亚洲色综久久精品国产| 日韩电影久久久被窝网| 国产精品永久久久久久久久久| 99久久超碰中文字幕伊人| 亚洲国产欧美国产综合久久| 欧美亚洲国产精品久久| 日韩精品无码久久一区二区三| 国产精品亚洲美女久久久| 久久99国产精品久久99果冻传媒| 久久久久亚洲Av无码专| 香蕉久久夜色精品升级完成| 亚洲综合伊人久久大杳蕉| 99精品国产99久久久久久97 | 亚洲欧美久久久久9999| 久久精品无码免费不卡| 日日狠狠久久偷偷色综合免费|