Greetings~ 這裡是鐵匠史密斯,
昨日講述到了 玩家資訊 ─ 座標: fXPlayer
、 fYPlayer
,
今天就要來看看這些座標「映射到畫面」上後,會呈現什麼樣子——也就是 screen
的世界
screen
作用中的畫面緩衝區要顯示什麼?沒錯,那我們的遊戲畫面是顯示什麼呢?
當然是顯示玩家所看到的場景 = 第一人稱玩家視野
直接上圖:
假設玩家在世界地圖上 (8, 3) -> map[3 * 16 + 8] = map[56]
的位置,其視角所看到的畫面極為 screen
也就是圖中橘色方框的內容
當然,別忘記計算機圖學的座標定義:
screen
也是由 1-D 擴充字元的陣列組成, 則存取畫面(玩家視野)特定位置(screen_x, screen_y)所看到的亮度為:
screen[screen_y * nScreenWidth + screen_x]
與存取 map
任意位置數值的概念相同
map
與 screen
對應的場景由以上的概念,我們可以把玩家在 map
上的位置所看到的視野如 3-D 想像圖表示:
想像的圖如左圖(Imagination)所示,一個玩家站在 (8, 3)
其所看到的視野,我們可以發現:
我只是一個沾不上邊的小新手,還沒可以將遊戲做到擁有上面所述的條件/特性
我們只使用 2-D 平面,在視野 screen
上呈現類 3-D 的場景,所以實際如右圖(Reality):
當然,我們所看到的畫面都是離散的(Discrete),儘管我們 screen
上的像素(element = 擴充字元 wchar_t
)可能很少,但也可以將看到的畫面想像成是連續的,如圖:
這就牽扯到影像處理/離散數學/計算機圖學教到的Sampling Theorem -> 如何將每個連續的數據(Continuous Data)轉成離散數據(Discrete Data),並呈現在電腦上,如有空(或鐵人賽篇幅不夠 lol)的話,會再度提到這些數學原理。
screen
= 第一人稱玩家視野screen[screen_y * nScreenWidth + screen_x]
找到視野中特定位置的亮度map
與 screen
對應的場景既然已經知道玩家看到的視野 screen
了,
我們就需要一個依據: 玩家往哪裡看?
明日會提到遊戲中玩家的另一個數值: fPlayerA
、 AOV
的定義,
將地圖、玩家、視野都定義好後,才可以介紹我們的演算法~
加油,讓我們繼續走下去~