HLSL學習實踐記錄: RenderMonkey實現(一):顯示出模型和貼圖

以前寫過一篇 初學RenderMonkey作一面旗幟飄動的效果 node

其實當時徹底是心血來潮初步接觸了一下,感受特別酷,爲了在mod裏秀一下,對於HLSL沒有太多概念。框架

以後就擱置了,如今從新拾起來,決定認真的學習下吧,打算將過程記錄下來,算是一個系列吧,但願不要坑了。學習

這裏不會寫不少理論,一來我本身也是初學者,不敢亂寫什麼,各類HLSL的教程不少。二來實現一個效果才比較有趣。spa

選用RenderMonkey是由於我第一次就接觸的這個,雖然很老了並且不更新了,但感受用起來還不錯,比較方便,就不想考慮別的,先用起來。.net



首先來建立一個Effect,能夠選擇不一樣的接口,顯然學習HLSL, 咱們選擇Directx.code

*Effect(效果框架):按照最初製做着色器特效時的作法至關繁瑣,Effect就是一種簡化。對象


選擇一個模型, 雙擊Model或者右鍵->Edit來選擇咱們本身的模型,默認是一個球體,這裏我換成了一面旗幟。blog


爲模型添加一個貼圖,以後雙擊貼圖項或者右鍵->Edit來選擇咱們本身的貼圖。教程


以後咱們須要在數據流裏添加一個貼圖座標項目TEXCOORD,這樣在代碼裏咱們才能夠運用貼圖座標和貼圖來給模型「上色」。
接口

這裏默認會有一個POSITION項目,這個就是組成咱們模型的頂點數據,爲何咱們以建立Effect就能看見模型就是由於這裏已經默認添加好了

同時代碼裏也有一部分默認的,這個下面會提到。



到目前爲止,咱們有了一個模型,一張貼圖,對應的數據流也添加好了。

可是目前這些都只是準備工做,真正要對這個Effect顯示出效果,最重要的部分在Pass中

*Pass(過程):具體的定義我也說不清,通常來講一個Effect由多個technique組成,technique由多個Pass組成,因此Pass是最基本的效果實現過程


因爲默認已經添加好了模型,因此沒必要關心模型,若是有多個模型可供選擇能夠在模型上右鍵->reference node 來選擇。

咱們只要爲Pass添加貼圖對象


接下來須要寫兩段代碼了,能夠在Pass下看到這兩個Shader代碼

替換以下代碼,代碼自己沒什麼解釋的,就是最基本的渲染代碼

Piexl Shader:像素着色器

sampler2D banner;

struct PS_INPUT
{
   float2 TexCoord : TEXCOORD0;
};

float4 ps_main(PS_INPUT Input) : COLOR0
{   
   
   float4 color = tex2D( banner, Input.TexCoord );
   
   return color;
}

Vertex Shader:頂點着色器

float4x4 matViewProjection;

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

struct VS_OUTPUT 
{
   float4 Position : POSITION0;
   float2 TexCoord : TEXCOORD0;  
   
};

VS_OUTPUT vs_main( VS_INPUT Input )
{
   VS_OUTPUT Output;

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


最後, 一個帶貼圖的模型出如今了渲染窗口裏


下一篇咱們讓這面旗幟飄動起來。

相關文章
相關標籤/搜索