我從來沒有理解過像mandelbulb這樣的東西可以從數學數據中產生。對我來說唯一有意義的方法是使用體素,這顯然不是在這裏鏈接的圖像中使用的。所以如果有人能向我解釋這一點,請做。mandelbulb如何呈現?
回答
我不知道確切的數學,但我知道如何從2D分到達3D之一。但首先讓我們看看如何做二維分形:
當計算一般(二維)分形時,您可以選取一些像素座標並使用函數(如[x,y] = somefunc(x,y)
)對其進行變換,並檢查結果是否符合某些條件。如果它不是你再次重申,並再次...
你的數字可能永遠不會滿足這個條件,所以你添加一些全局計數器,讓我們說100個迭代每個像素 - 如果它不符合100次迭代後的條件你認爲它永遠不會停止。
如果從未滿足條件,則假定當前像素在分形之外,如果滿足條件,則存儲這樣做所需的迭代次數。
將所有這些計算出來的每個像素都映射到顏色的迭代次數後,我經常看到outside
繪製爲黑色,迭代計數映射到某種自定義顏色。你可以使用漸變,樂隊,灰度或任何你想要的。你也可以循環這些顏色來僞造動畫。
這裏要注意的一點是,當你開始計算一些像素,然後經過一些迭代後,最終會得到該像素的結果 - 這在3D情況下會有所不同。
3D
在3D情況下,大部分的計算是一樣的,只是多了很多人。
您從一些像素開始,但是現在您可以計算從您的眼睛到該像素的3D光線,並選擇靠近您的某個起始點(如近剪裁平面)。你對這個3D點做了你的迭代,但是如果你不符合條件,你只需稍微提前一點就可以重新計算這個新點。這意味着計算一些迭代以獲得當前像素的結果是不夠的 - 您可能需要爲光線上的每個測試點執行很多次,這會使計算速度變慢。
基本上,當您找到滿足您的條件的第一個點併爲此點計算迭代次數時,可以按照與2D案例中相同的方式對它着色,但3D空間會爲您提供更多選項。你可以追蹤這個點和燈光之間的線,以檢查它是否有陰影,或者嘗試計算光照的正常值(分形中沒有典型的normals
,但你可能試圖僞造它)。
這是一個您可以最有創意的地方 - 儘管目前的電腦速度太慢,無法快速完成所有這些數學運算,您可能會發現很多技巧可以幫助您。例如,在您發佈的圖片中,我相信他們也會跟蹤每個最終點的一些接近程度,以獲得ambient occlusion
。
並根據我的somefunc
和condition
,您可以查看關於Mandelbrot和Julia集的維基頁面。他們似乎很簡單,但我沒有自己做,所以不會假裝我是描述它的好人。
- 1. 如何渲染Mandelbulb式三維分形
- 2. UIActivityController如何呈現?
- 3. 如何呈現環
- 4. 如何呈現big_int?
- 5. 如何呈現action.js.coffee.erb?
- 6. 如何呈現OpenStreetMaps?
- 7. 如何在呈現
- 8. 如何呈現bottlepy
- 9. 如何呈現jqplot
- 10. UISplitViewController:如何呈現popover?
- 11. 如何重新呈現flatlist?
- 12. 如何呈現在移動
- 13. 如何呈現與AP
- 14. 如何呈現在樹枝
- 15. 如何呈現weasyprint鏈接?
- 16. 如何呈現在angularjs
- 17. LWJGL如何呈現SSAO
- 18. 如何讓Gridview呈現THEAD?
- 19. 如何動態呈現HTML
- 20. 如何呈現的Android
- 21. 如何呈現html文件
- 22. 如何呈現sql'。'在PHP
- 23. Rails如何呈現選項?
- 24. 如何呈現迴應?
- 25. 複數如何呈現?
- 26. 如何呈現UIScrollView Modaly
- 27. 如何調試CSS3呈現?
- 28. 如何呈現鬍鬚
- 29. HtmlUnitDriver如何呈現頁面?
- 30. 如何呈現有條件
的確是好奇的形象!它是用某種轉換函數完成的。Mandelbrot圖像已經具有三個維度:x-y平面和z-高度(迭代)。雖然我的猜測是這是類似Julia集合的轉變,而不是Mandelbrot。 –