2

赦免文字牆。我稍後會添加圖像。我需要用水,沙,草,樹木,礦物,沙漠,海灘,島嶼等產生一個有點逼真的立方米體素地圖,不需要任何形式的voronoi陰謀(即將這些因素與每個其他)。是的,這是一款遊戲。在與鄰居對應的區域中隨機選擇點,避免無限遞歸

我想我會隨機生成臨界點並插入它們以獲得海拔和溼度讀數,但是我隨機生成了一個損失。基本上我需要一點點均勻分佈,而不必一次列出完整的列表。我需要一次生成大約20x20x20,並且可能與大約1000x1000x1000的臨界點單元一起工作,但我期望在大單元的邊緣會發生奇怪的事情。有誰知道以這種方式選擇點的方法嗎? 真正的麻煩在於,點應該更喜歡靠近「山脈」式連鎖店的其他人。

這裏的問題是,這是發生在這些1公里的細胞。

我可以在一個單元格內簡單地選擇點,但由於單元格和它的鄰居需要互相依賴,所以我的平凡算法會遇到需要向這些單元格中的一個單元邁向無窮大,或者看到網格狀的斷鏈圖案。鏈條不應該在細胞邊界上更頻繁地破碎。如果他們在一代中表現出有點問題的晶圓狀圖案,並且造成一代人因爲設計/遊戲原因而無法使用的貧窮一代。

n.b.爲了達到這些目的,系統級隨機發生器可以播種並且實際上是均勻的。就細胞內部而言,我可以選擇鏈條。我也認爲有一個細胞溢出到任何未生成的細胞中,所以它的鏈開始連接到現有的細胞,但是這將打破基於位置和種子的生成決定論,增加生成順序作爲因子。

再次,爲了寫實和設計的目的,我試圖遠離使用Perlin。或者我應該發佈在gamedev.SE

+0

所以,困難在於獨立生成細胞會導致細胞邊界處的不連續性? – Raedwald

+0

@Rededwald正是如此。 – hexafraction

+0

Downvoter:請解釋你的downvote(如果它與另一個老問題有關,在這個問題的幾秒鐘內就會被低估) – hexafraction

回答

1

關鍵概念是在填充單元之前創建單元格與其所有六個鄰居之間的接口。將您的整個世界創建爲空心框的網格,但在創建之前,請將其創建爲線框輪廓,但在此之前,請創建線框交點網格。

這是一個簡單的方法 - 你必須改善這一點。首先,考慮這種一次生成整個世界的方法:

(1)選擇所有頂點體素 - 也許是每個單元格中的上北西體素 - 並將其世界屬性設置爲完全基於位置的合理值和種子。 (2)選擇連接頂點的體素線,並根據位置和種子填充所有世界屬性,但限制爲與每端的現有頂點體素值相匹配。 (3)選擇體素的平面,描述由現有線條界定的面部,並根據位置和種子填寫所有世界屬性,但限制爲與沿着邊緣的現有線體素值相匹配。 (4)根據位置和種子填充單元格,但限制與現有邊界六面體匹配。

現在,請認爲這種方法不需要一次完成。所有必要的是,在填充單元格之前創建單元格的全部六個面,並且在填充單元格之前創建面部的所有四個邊界線,並且在填充之前創建一個線條的兩個端點在第一個單元之後,其中一些已經存在。

我說你必須改進這個想法的原因是它會在單元邊界產生明顯的漸變邊界。恐怕每個接口體素不僅需要包含世界屬性,而且還需要包含當前接口中每個屬性的變化率。這意味着每個線體素必須包含每個屬性的兩個變化率,並且每個頂點三個。

我不打算描述如何限制世界屬性的漸變,因爲它接近具有預定義漸變的體素,因爲我確信您可以處理它,我的回答已經太長了,而且我不會不知道如何。

+0

「頂點體素」有一點點呃。我沒有通過體素產生體素。我選擇隨機點,並且需要體素附近(40左右)的所有點來生成它。儘管如此,這看起來很有趣。 – hexafraction