XNA – Billboard

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裡面的參數就對了。


不知道為啥有時候按空白鍵就會當掉…這篇打了三次,整個就很沒力(暈)
所以更詳細的部分就略過了
還是看他們的文章卡實在,哈哈!

–End

2 thoughts on “XNA – Billboard

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s