波多野结衣 蜜桃视频,国产在线精品露脸ponn,a v麻豆成人,AV在线免费小电影

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在游戲中貼花最常見的地方就是用鼠標選擇一個目標后,地上出現的一個圓圈,或者范圍魔法在施放時的提示區域。
這個紋理會隨著模型和地圖的表面進地扭曲,而非一個平面,所以,我們不論怎么做,都會進行一個“投影”的思想,才能讓貼上去的紋理在某一個方向上看的時候,是一個完整的畫面。(我們地上的圈,就是從上往下貼的,所以你從上往下看時,會看到一個完整無扭曲的圖片)。
什么? 地上是一圈?是的,但是呢,我們的紋理是方的。 我們看到是圈,并不表示我們要把紋理貼到一個圈上。
下面是我在RenderMonkey里測試的結果。

 


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


用投影紋理進行貼花分為三部。

1、正常渲染模型。

無它!

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

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

3、將此三角形組進行渲染,紋理映射時采用投影紋理。

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

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

struct VS_INPUT
{
float4 Position : POSITION0;
float2 Texcoord : TEXCOORD0;
};

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

VS_OUTPUT vs_main( VS_INPUT Input )
{
VS_OUTPUT Output;

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

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

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

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

分享到:
標簽:貼花 紋理 投影 模型 Decals
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定