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

麒麟子

~~

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

常用鏈接

留言簿(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>
            在线精品在线| 欧美午夜不卡| 亚洲欧洲日本mm| 欧美成人激情视频| 欧美国产在线电影| 亚洲国产欧美日韩| 日韩亚洲欧美高清| 亚洲一区黄色| 欧美有码视频| 欧美高清在线播放| 在线亚洲免费| 久久久一区二区三区| 另类激情亚洲| 欧美午夜精品久久久久久久| 国产亚洲电影| 亚洲美女啪啪| 久久久精品日韩欧美| 亚洲精品国产精品久久清纯直播 | 亚洲国产欧美在线 | 久久久五月婷婷| 亚洲二区在线观看| 亚洲欧美怡红院| 蜜臀久久99精品久久久久久9 | 亚洲精品免费在线| 午夜欧美精品久久久久久久| 老司机精品视频网站| 国产精品手机在线| 亚洲片国产一区一级在线观看| 亚洲欧美国产不卡| 欧美成人激情视频免费观看| 亚洲色图综合久久| 免费亚洲一区| 国产在线观看91精品一区| 一区二区免费在线观看| 久久天天躁狠狠躁夜夜av| 一区二区高清在线| 欧美一区视频在线| 999亚洲国产精| 久热爱精品视频线路一| 国产日韩一区| 亚洲欧美一区二区三区极速播放| 欧美国产精品专区| 久久精品一二三| 国产日韩精品一区二区三区| 亚洲天堂免费观看| 亚洲精品综合| 欧美成人伊人久久综合网| 在线观看欧美日韩国产| 久久一区欧美| 久久久国产精品一区| 激情亚洲一区二区三区四区| 久久av二区| 欧美在线你懂的| 国内精品免费在线观看| 久久久国产91| 久久精品综合一区| 一区二区三区自拍| 美女福利精品视频| 蜜臀91精品一区二区三区| 亚洲成在人线av| 欧美激情小视频| 欧美国产丝袜视频| 日韩视频二区| 一区二区三区四区五区精品视频 | 亚洲香蕉在线观看| 夜夜嗨一区二区| 国产精品国内视频| 午夜在线一区二区| 久久av在线| 激情亚洲网站| 亚洲国产视频直播| 欧美日韩一区三区四区| 亚洲免费视频在线观看| 亚洲丝袜av一区| 国产私拍一区| 老巨人导航500精品| 欧美xx视频| 亚洲欧美国产精品桃花| 欧美在线不卡| 亚洲免费观看高清完整版在线观看熊| 亚洲国产网站| 国产伦精品一区二区| 美女在线一区二区| 欧美日韩国产美女| 亚洲欧洲精品天堂一级| 亚洲黄色性网站| 国产精品亚洲一区二区三区在线| 久久免费国产精品| 欧美国产免费| 久久成人综合视频| 欧美电影免费观看网站| 午夜亚洲视频| 毛片一区二区| 午夜精品免费在线| 久久综合图片| 国产女主播一区二区| 麻豆久久久9性大片| 国产专区综合网| 欧美成人中文字幕| 欧美三日本三级少妇三2023| 久久久久99精品国产片| 欧美区高清在线| 欧美一区二区三区视频在线观看| 久久婷婷麻豆| 亚洲一区二区三区影院| 免费观看久久久4p| 久久成人一区二区| 欧美网站大全在线观看| 欧美激情导航| 国内精品**久久毛片app| 一区二区三区欧美在线观看| 亚洲人成在线观看一区二区| 久久不射电影网| 亚洲主播在线播放| 欧美肥婆在线| 欧美成人激情视频| 国产有码在线一区二区视频| 亚洲一区黄色| 一区二区精品国产| 欧美成人一二三| 免费欧美日韩| 精品999久久久| 欧美一级电影久久| 欧美在线影院| 国产日韩欧美精品| 亚洲午夜影视影院在线观看| 一区二区三区高清| 欧美人与禽猛交乱配视频| 欧美国产一区二区在线观看| 极品少妇一区二区三区| 欧美夜福利tv在线| 久久精品亚洲热| 国产一级揄自揄精品视频| 亚洲免费视频在线观看| 亚洲欧美久久| 国产毛片一区二区| 香蕉视频成人在线观看| 久久精品99| 韩日精品在线| 久久久免费精品视频| 免费在线欧美黄色| 91久久精品国产91性色| 欧美好吊妞视频| 亚洲精品影院| 亚洲图片欧美一区| 国产精品三上| 欧美在线日韩| 免费亚洲一区| 日韩午夜激情电影| 欧美日韩亚洲视频| 亚洲在线1234| 久久精品91久久久久久再现| 狠狠色综合色综合网络| 久久婷婷亚洲| 亚洲黑丝一区二区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲国产精品欧美一二99| 亚洲电影免费观看高清完整版在线| 久久久久一区二区三区| 亚洲国产一区二区三区青草影视| 免费亚洲一区二区| 一区二区日韩精品| 久久亚洲精选| 亚洲精品黄网在线观看| 国产精品va在线播放我和闺蜜| 欧美亚洲视频在线看网址| 欧美风情在线观看| 亚洲私人黄色宅男| 激情成人综合| 欧美日韩色婷婷| 久久av一区| 99综合精品| 欧美成人综合| 亚洲欧美中文另类| 亚洲国产成人精品女人久久久 | 一区二区三区自拍| 欧美日韩亚洲91| 久久精品一区二区三区四区 | 欧美bbbxxxxx| 亚洲尤物在线| 亚洲国产另类精品专区| 欧美一级在线视频| 日韩天天综合| 亚洲第一伊人| 国产欧美日韩高清| 欧美日韩不卡合集视频| 久久精品亚洲一区| 亚洲在线成人精品| 亚洲另类一区二区| 免费在线成人| 久久精品30| 亚洲综合电影一区二区三区| 亚洲高清视频的网址| 国产精品网站在线播放| 欧美精品aa| 久久免费视频观看| 欧美一级专区| 一区二区三区鲁丝不卡| 亚洲日本va在线观看| 欧美高清在线一区二区|