Billboard,通常翻譯為「廣告牌」或「告示牌」。
在多數的3D遊戲中,它一直都是不可或缺的技術之一。
技術需求低(如果沒有把數學環老師的話),效能需求低,效果卻非常好!
Billboard的原理很簡單,就是讓一個3D物件(通常是個Plane)永遠面對鏡頭。
處理物件的方是主要分為兩種:「丟給CPU算」「丟給GPU算」。
分辨的方式很簡單,一個在render前就先把物件轉好;而後者則是將資訊傳入,在VertexShader裡面處理。
效能何者較優?應該是後者…吧?
處理的過程也各有不同,可參考底下連結:
「Billboards」
「3D Billboard Particles Tutorial VI」
「葵花朝太阳的BILLBOARD算法」
「Billboard(广告牌)实现的逐步推导,扫盲!」
「3.11 Billboarding:在3D世界绘制2D图像使它们总是面向相机」※感謝「楊漱玉青」提供。
第一個連結,也就是Club上範例的,作者腦袋不知道在想啥!
身為教學,在shader加入風吹草動就算了,還多加一道ContentPipeline增加複雜度!
如果是進階教學是很好,但是還沒有先來個簡單又單純的啊!!
咳~回歸正題。
接著稍微解說一下第二篇。
首先,全域變數:
// HLSL half4x4 world : World; // 世界轉換矩陣 half4x4 vp : ViewProjection; // 攝影機的 View * Projection 矩陣 texture particleTexture; // 要繪製的紋理圖 |
// XNA shader.Parameters[“world"] shader.Parameters[“vp"] shader.Parameters[“particleTexture"] |
頂點資料:
struct VertexIn { half4 Position : POSITION0; // 頂點座標 half2 TextureCoords : TEXCOORD0; // UV座標 half4 Color : COLOR0; // 頂點顏色 half4 Data : POSITION1; // 其他資料。這裡X=縮放,Y=Alpha。 }; |
public struct BillboardParticleElement { Vector3 position; Vector2 textureCoordinate; Color color; Vector4 data; // …下略… } |
Update和Draw就直接看Code吧~
基本上就是控制BillboardParticleElement裡面的參數就對了。
不知道為啥有時候按空白鍵就會當掉…這篇打了三次,整個就很沒力(暈)
所以更詳細的部分就略過了
還是看他們的文章卡實在,哈哈!
謝謝~
http://shiba.hpe.cn/jiaoyanzu/wuli/showArticle.aspx?articleId=498&classId=4
這裡也有不錯的解釋哦~
挖賽!
好文章!
感謝大大M(_ _)M