青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

麒麟子

~~

導航

<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

統計

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

Friends

WebSites

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

使用投影紋理進行模型貼花(Mesh Decals)

Decals Using Projective Texture Mapping

講投影紋理的好文章網上是很多的,在此給大家一個參考鏈接,我就不再呈述了。 此文章的描述很易懂。

投影紋理映射(Projective Texture Mapping)

http://wwwnno00.irrlicht3d.cn:8011/redirect.php?tid=54109&goto=lastpost

 

上面的文章從原理上講述了投影紋理是什么,本文則利用投影紋理進行一個實際的應用。

在游戲中貼花最常見的地方就是用鼠標選擇一個目標后,地上出現的一個圓圈,或者范圍魔法在施放時的提示區域。

這個紋理會隨著模型和地圖的表面進地扭曲,而非一個平面,所以,我們不論怎么做,都會進行一個“投影”的思想,才能讓貼上去

的紋理在某一個方向上看的時候,是一個完整的畫面。(我們地上的圈,就是從上往下貼的,所以你從上往下看時,會看到一個完整無扭曲的圖片)。

 

什么? 地上是一圈?是的,但是呢,我們的紋理是方的。 我們看到是圈,并不表示我們要把紋理貼到一個圈上。

下面是我在RenderMonkey里測試的結果。

image

image

image

 

OK,圍觀完畢,下面簡單說一下如何實現。

 

用投影紋理進行貼花有兩種做法。

第一種。

1、正常渲染模型。

無它!

2、根據投影方向,投影半徑找到投影時需要渲染的三角形組。

這種貼花的效率損耗就是花在這里了,所以三角形剔除算法要比較高效才行。

3、將此三角形組進行渲染(相當于做為一個模型渲染),紋理映射時采用投影紋理。

渲染時,要打開全局混合開關。

 

采用這一種渲染方式時,不需要占用紋理通道,也就是可以在模型上貼無數個花。

 

第二種。

這是一種占用紋理通道的做法。就是只渲染一次,而在PS中,進行紋理混合。

 

本文演示的是第一種情況,因為它更貼近于實際應用。并且并未做三角面剔除,而是僅僅將模型渲染了兩次。

 

下面是投影紋理的HLSL代碼,以及相關解釋。

 

VS:

struct VS_INPUT
{
   float4 Position : POSITION0;
};

struct VS_OUTPUT
{
   float4 Position : POSITION0;
   float3 WorldPos : TEXCOORD0;
};

VS_OUTPUT vs_main( VS_INPUT Input )
{
   VS_OUTPUT Output;

   Output.Position = mul( Input.Position, matViewProjection );
   Output.WorldPos = Input.Position;
   return( Output );
}

VS所做的工作并沒有什么特別的,僅是需要多向PS傳遞一個空間位置。

 

 

PS: 

sampler2D baseMap;
sampler2D Texture1; //貼這張紋理時,其UV尋址方式最好為CLAMP
struct PS_INPUT
{
   float3 WorldPos : TEXCOORD0;
};

float4 ps_main( PS_INPUT Input ) : COLOR0
{
   float3 Center = float3(0, 0, 20);//投影中心,Y值被忽略。
   float Radius = 4;//投影范圍
   float3 UVector = float3(1, 0, 0)/(2 * Radius);//將世界坐標變換到紋理投影空間坐標并規范化到0-1之間(正投影)
   float3 VVector = float3(0, 0, 1)/(-2 * Radius);//同上
   float2 coord; 
   coord.x = dot(Input.WorldPos - Center, UVector) + 0.5;
   coord.y = dot(Input.WorldPos - Center, VVector) + 0.5;
  // if(coord.x < 1 && coord.y < 1 && coord.x>0 && coord.y>0)
   return tex2D( Texture1, coord);
   //else
   //return 0;
}

 

 

 

PS所做的工作就是將世界坐標轉換到投影空間,再轉換為紋理坐標。

需要說明一點的是,為了測試方便,我僅假設此時攝相機觀察和投影方向為-Y方向。所以

dot(Input.WorldPos - Center, UVector)+0.5

上面這句話其實相當于是mul(Input.WorldPos,matProjTexture)/2.0+0.5;

 

另外,對于

  // if(coord.x < 1 && coord.y < 1 && coord.x>0 && coord.y>0)

這句話,我寫在這里,是作為裁剪使用,若沒有這個. 就算你設置為了CLAMP,那么當你的紋理邊緣的ALPHA不為0時,你會看到

紋理會左右延伸。

 

而若你未選擇CLAMP尋址方式,那你的效果就百般神奇了。 也可以將上面屏蔽的代碼解開,用于裁剪。

 

結尾:

一、投影紋理進行模型貼花時,主要是進行三角面剔除,使在渲染貼花時,提交最少的三角面。

二、在貼花PASS中,需要將全局混合開啟,并設置相應的SRCBLEND(SRC_ALPHA)和DESTBLEND(DEST_ALPHA)值。括號內為我用的值。

當然,如果你不想讓貼花與場景(模型)混合,則可以不開啟。 

三、請注意紋理的尋址方式以及紋理邊緣的ALPHA情況。 若紋理邊緣ALPHA不為0,則可以手工進行裁剪。

四、本文僅是采用了固定的投影方向和SHADER內部定義變量的方式來進行貼花渲染。 并且,并未進行模型三角面剔除。所以若要使用,則需要注意第一個問題。

五、本文靈感來源于此貼:http://forums.create.msdn.com/forums/p/34339/198791.aspx

六、支持郵件交流:BoYueGame#Gmail#com

posted on 2011-01-07 00:37 麒麟子 閱讀(5235) 評論(3)  編輯 收藏 引用 所屬分類: GPU and Graphic

評論

# re: 使用投影紋理進行模型貼花(Mesh Decals) 2011-01-07 09:57 Rambler

老子很怒了。
下面這網站轉我貼就算了,還刪減貼子內容!隱藏出處和文中引用的鏈接。
大家要注意了!雖然東西不值錢,但也不能這樣被嫖竊
http://www.cr173.com/html/10331_1.html  回復  更多評論   

# re: 使用投影紋理進行模型貼花(Mesh Decals) 2011-01-07 11:53 cr173

@Rambler
已經加上了不好意思  回復  更多評論   

# re: 使用投影紋理進行模型貼花(Mesh Decals) 2011-01-07 12:20 Rambler

@cr173
OK!  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲男女自偷自拍| 国产精品男女猛烈高潮激情 | 亚洲国产精品一区二区三区| 久久精品在线免费观看| 午夜在线播放视频欧美| 午夜亚洲福利在线老司机| 久久精品欧洲| 亚洲丰满在线| 日韩一本二本av| 一区二区三区在线观看国产| 欧美激情视频一区二区三区在线播放| 久久精品国产综合| 久久精品一级爱片| 欧美a级大片| 91久久午夜| 亚洲一区3d动漫同人无遮挡| 欧美一区在线视频| 久久综合一区二区| 欧美日韩国产高清视频| 国产亚洲一区二区精品| 亚洲精品欧美日韩专区| 亚洲自拍啪啪| 欧美成人亚洲成人| 亚洲永久网站| 欧美暴力喷水在线| 国产性做久久久久久| 99re6热只有精品免费观看| 香蕉尹人综合在线观看| 欧美成人免费在线| 午夜精品国产更新| 欧美日韩国产在线一区| 狠狠色丁香久久综合频道| 亚洲一区精品视频| 亚洲高清在线视频| 久久精品视频在线看| 欧美日韩视频专区在线播放| 一区在线播放| 欧美午夜久久| 亚洲精品在线视频| 免费欧美在线| 久久av免费一区| 国产日韩欧美精品在线| 亚洲一区二区少妇| 最新成人在线| 欧美成人免费视频| 亚洲国产欧美久久| 久久在线免费观看| 欧美亚洲免费| 国产乱码精品一区二区三| 久久一日本道色综合久久| 国产视频一区二区三区在线观看| 欧美精品偷拍| 99精品福利视频| 亚洲国产高清在线| 国产精品午夜av在线| 99re66热这里只有精品4| 亚洲国产精品高清久久久| 久久伊伊香蕉| 亚洲国产美女精品久久久久∴| 久久综合久久久| 久久国产精品久久久| 国语精品中文字幕| 久久九九精品99国产精品| 欧美在线1区| 一区福利视频| 欧美国产视频在线| 欧美成ee人免费视频| 欧美三区免费完整视频在线观看| 亚洲精品综合| 欧美大学生性色视频| 亚洲免费观看| 一本色道88久久加勒比精品| 国产精品黄视频| 小黄鸭视频精品导航| 亚洲女人av| 黄色亚洲精品| 欧美激情国产日韩| 亚洲蜜桃精久久久久久久| 欧美日韩精品免费看| 午夜在线成人av| 久久精品人人做人人综合| 樱花yy私人影院亚洲| 欧美风情在线观看| 欧美日韩亚洲一区二区三区四区| 亚洲天堂第二页| 午夜精品短视频| 激情丁香综合| 亚洲福利视频一区二区| 欧美理论视频| 香蕉亚洲视频| 久久久久国内| 亚洲午夜伦理| 久久av最新网址| 亚洲三级视频| 亚洲男人的天堂在线aⅴ视频| 国产主播一区二区三区| 91久久久久久国产精品| 国产美女高潮久久白浆| 欧美激情bt| 国产欧美精品| 亚洲免费电影在线| 国模叶桐国产精品一区| 日韩亚洲成人av在线| 国产自产在线视频一区| 91久久精品国产91久久性色tv | 国产欧美一区二区三区国产幕精品| 乱人伦精品视频在线观看| 欧美日韩国产在线| 久久香蕉国产线看观看网| 欧美日韩一区二区国产| 免费不卡在线视频| 国产精品九九久久久久久久| 欧美国产专区| 激情亚洲网站| 欧美一区国产二区| 亚洲一区二区三区乱码aⅴ| 久久综合五月| 久久深夜福利| 国产精品美女久久久久久久 | 久久日韩粉嫩一区二区三区| 午夜在线一区| 欧美精品一区三区在线观看| 欧美专区亚洲专区| 欧美日韩情趣电影| 亚洲成人资源网| 激情久久综艺| 亚洲欧美文学| 欧美一激情一区二区三区| 欧美日韩在线播放一区| 一区二区精品国产| 久久久精品免费视频| 欧美国产日本| 国产一区二区精品久久91| 在线一区二区日韩| 日韩视频在线你懂得| 欧美mv日韩mv国产网站| 欧美gay视频| 在线不卡中文字幕| 久久精品一区二区三区中文字幕| 久久精品免费播放| 国产亚洲一区二区在线观看 | 国产精品视频一二| 亚洲一区不卡| 欧美伊久线香蕉线新在线| 国产精品日韩精品欧美精品| 亚洲一区亚洲| 欧美在线啊v一区| 国产区亚洲区欧美区| 午夜欧美电影在线观看| 久久久久久亚洲精品杨幂换脸| 国产亚洲毛片在线| 欧美在线视频在线播放完整版免费观看| 久久精品色图| 亚洲激情第一页| 欧美日韩在线精品| 亚洲欧美久久久| 久久综合中文| 亚洲乱亚洲高清| 国产精品国产三级国产a| 亚洲免费网站| 免费看亚洲片| 在线视频你懂得一区二区三区| 欧美日韩国产一中文字不卡| 亚洲性线免费观看视频成熟| 久久婷婷av| 一区二区日韩伦理片| 国产精品一区视频| 久久久精品国产免大香伊| 亚洲欧洲日产国产综合网| 香蕉亚洲视频| 日韩视频免费| 国产亚洲在线| 欧美精品日韩三级| 欧美亚洲免费在线| 91久久精品一区二区三区| 性色一区二区三区| 亚洲国产精品第一区二区三区| 欧美日韩国产天堂| 久久电影一区| 一本久道久久综合婷婷鲸鱼| 久久久国产视频91| 一本色道久久综合亚洲精品小说 | 日韩视频永久免费观看| 国产欧美日韩一区二区三区在线观看 | 国产日韩亚洲欧美综合| 欧美高清视频免费观看| 午夜精品久久久久久| 亚洲欧洲精品一区二区三区| 久久亚洲春色中文字幕| 99日韩精品| 一区二区成人精品| 99精品福利视频| 伊人久久亚洲美女图片| 国产精品电影观看| 欧美夫妇交换俱乐部在线观看| 欧美一区国产一区| 中文在线一区| 夜久久久久久| 亚洲精品乱码久久久久久久久| 欧美高清视频在线|