我从来没有理解过像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。 –