依然是上次就已經作過的內容,因此第二篇來的很快。html
首先動態須要一個時間的概念,時間不一樣也就不存在動態效果了。函數
於是首先須要添加一個時間變量,在RenderMonkey有一系列預約義變量,好比咱們剛建立完一個項目就能看matViewProjection這個變量,就是一個預約義變量,這是一個世界,觀察,投影的合矩陣,在Vertex Shader中咱們模型頂點位置向量須要與這個矩陣相乘完成座標轉換才能使模型出如今預覽窗口。關於這幾個矩陣,能夠參看這篇博客的詳解工具
http://www.cnblogs.com/kex1n/archive/2011/08/19/2145866.htmlspa
回到咱們的時間變量,添加系統的預約義時間變量fTime0_X,以後我重命名成了timecode
接下來就能夠去添加代碼了,此次只是僅僅涉及頂點的移動,於是咱們只須要考慮Vertex Shader便可htm
float4x4 matViewProjection; float time; 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; float banner_x=0.04f; float banner_z_min=1.1f; float banner_z_max=2.2f; if((Input.Position.x>banner_x)&&(Input.Position.z>banner_z_min)&&(Input.Position.z<banner_z_max)) Input.Position.y = Input.Position.y+0.5*Input.Position.x*sin(2*time+Input.Position.z); Output.Position = mul( Input.Position, matViewProjection ); Output.TexCoord=Input.TexCoord; return( Output ); }
首先咱們須要聲明這個時間變量time,以後去到vs_main函數裏修改頂點的位置blog
這裏的模型依然是上一篇中的旗幟,顯然咱們只須要移動旗面的頂點,旗杆是固定不動的。get
因此咱們用最簡單的座標範圍來判斷那些頂點須要移動。博客
具體每一個頂點的座標數值能夠去建模工具內查看。須要注意的一點是座標的不一樣。it
僅僅是左右手座標系的不一樣能夠右鍵你的模型->Orientation來切換左右手座標系。
可是若是是模型擺放都出現了差異就須要本身稍微看一下。
以下兩圖,同一個模型在RM和3DMAX的座標系中的位置
肯定範圍以後就能夠去讓範圍內的旗幟沿着旗幟的法線方向作週期運動了
這裏使用了sin函數來作基本的週期運動,頂點的X座標做爲振幅,Z座標做爲相位,這樣旗幟就飄動的相對天然一點。
不過這樣機械化的飄動其實仍是不天然, 能更隨機化一點才真實,之後看看有什麼好辦法。
下一篇應該是作一個天空盒子的漸變,也是以前作過的,都整理一下。