2016-01-12 71 views
0

請參閱我不是發佈代碼,因爲我需要邏輯,數學,算法。那麼:僞3D牆(自上而下光線投射,排序)

我正在嘗試使用圖層和視差滾動來實現自頂向下瓷磚地圖的3D視覺效果。問題是:目前我只是爲每一層設定不同的「速度」。但是,這隻適用於一些非常特定的相機位置,並且它使得塊體幾乎具有無限高度(因爲它們會「增加高度」直到它們離開相機的FOV)。

有沒有更好的(應該)來達到效果?哦,我正在使用CAllegro 5

我想過限制每一層的偏移量,但我不知道如何。

我目前的方法:

這是我的層「速度」當前代碼(它重複了上,下,左,右,改變座標):

if (key[ALLEGRO_KEY_UP]) 
    camera_y[0] -= 1; 
    camera_y[1] -= 2; 
    camera_y[2] -= 3; 

然後我跑一個循環來繪製貼圖相對於當前圖層的偏移量的貼圖。

順便說一句,那是預期的效果(例如3層):

Effect

+0

每層應該按相對滾動速度進行縮放。或者,您可以在相對於視口原點的背景圖塊頂部繪製1:1大小的疊加圖塊。爲了獲得最佳效果,使用立方體「盒子」構建牆壁,其中一個平頂和四個側面瓷磚,其中兩個將根據相對於視口中心的牆「盒子」的位置繪製出歪斜。 –

+0

我無法在任何地方找到與此技術相關的任何內容。我知道我可以讓它更順暢,並且工作正常,我只是不知道從哪裏開始。 –

回答

3

對於視差滾動,即快速滾動層必須相應地較大:

Scaled

可以使用堆疊在彼此的頂部上未縮放磚,從中心的距離的一個固定分數偏移瓦片的視口的中心,

Unscaled

但頂部不會是連續的(除非底部重疊)。如果所有圖層切片都是手繪或渲染圖像,則這不是問題。

如果牆壁是箱形,和你有頂級的圖像和四個邊的,你可以在拉攏他們幾乎3D,

Walled

其中每個最多兩側盒壁被畫出,歪斜。

在所有情況下:

如果視口的中心是在世界座標(x Ç,Y Ç),點(x,Y,Z)映射到座標(X」,Y ')相對於視口的中心:

X'=(X - X ç)×(Z + Z )/ Z

Y」 =(Y - ÿ Ç)×(Z + Z 0 )/ Z 0

其中z 是確定的視差或深度效果 「大小」 的常數。

+0

這個工作很好,除了現在塊之間如此接近。 [截圖](http://i.imgur.com/hNXmGdv.png) –

+0

@WilliamFernandes:更改z 0,或縮放源座標。請注意,x,y,z與視口座標(像素)的單位相同。 –

+0

非常感謝! –

1

我認爲你是在正確的路線,但「無限高」的問題可以通過簡單地加以解決給攝像機一個「高度」屬性,並通過計算來調整每一層的「速度」...

layer.speed =(layer.altitude/camera.altitude)* ZOOM_FACTOR; //給出一個浮點值。

直到您向我們展示您的一些數學代碼後,才能真正提出任何其他建議。

+0

玩家在相機的中心,所以相機只有在移動時纔會移動。 「速度」是我有3層,它們的X/Y座標由不同的值增加和減少(層#0增加1,層#1增加2,層#2增加3)。我不太明白如何將這些應用於我的方法。 –

+0

那麼你可以告訴我們代碼嗎? – Wossname

+0

剛剛添加它,Wossname! –