2015-06-26 61 views
-1

因此,對於我正在開發的遊戲,我正在嘗試製作獨特類型的着色器。大多數是非常基本的,只有一個困難的部分。我只想渲染玩家在視線中看到的東西。這是一款自上而下的2D遊戲,因此玩家通常可以看到房間。但以此圖像爲例。渲染區域播放器會看到

An example of a room and players view

顯然這裏的球員是橙色的圓。他可以看到的區域是灰色(灰色)填充區域。黑色的線代表一個房間,紫色的線代表他穿過房間門的視野。我只想渲染陰影區域。

我知道GLSL有一個放棄聲明,您可以刪除特定的像素。這意味着通過創建布爾函數,我可以在頂點着色器中執行以下代碼。

if (!playerCanSeePoint(params)) { 
    discard; 
} 

我不知道該怎麼做,但是是讓playerCanSeePoint函數。我的一個想法是從玩家四面八方拋出無形的線條,並找到它的第一個交點。這意味着首先牆壁,並會創造適當的形狀。儘管這似乎是資源消耗。那麼有沒有一個好方法可以做到這一點?

回答

0

您從視圖區域大小的正方形開始,然後根據玩家的位置爲每個牆壁劃出一部分。

然後,您可以對多邊形進行三角測量並使用模板來防止在其外面進行繪製。