gpt4 book ai didi

c++ - 如何以编程方式生成与这些相似的形状?

转载 作者:行者123 更新时间:2023-11-30 04:14:52 26 4
gpt4 key购买 nike

我需要帮助。我一直在绞尽脑汁,但似乎找不到任何好的代码示例来说明如何以编程方式生成与这些形状类似的形状(闪光、微光、阳光等)。

http://www.richardrosenman.com/storage/lightburst.jpg

我真的需要帮助。任何人都可以提供一些示例代码来帮助我生成类似的东西吗?

我使用的是类似于 C++ 的语言。

最佳答案

这些看起来都像一个光中心,在中心明亮,在向外移动时,既会衰减(变暗)又会扩散(变得更分散)。

要淡入淡出,您需要通过 r(距离)函数从最大强度缩放光。从物理上讲,这类似于 1/r1/r^2 但在您的情况下,使用指数 e^(-r) 可能会更幸运 甚至线性淡入淡出 1 - a*r

效果的一个主要方面是扩散。在不构建完整的光线追踪器的情况下模拟扩散的最简单方法是沿旋转轴应用线性高斯模糊(或者甚至是简单的平均模糊)。例如,r = 3, theta = 0.5 处的扩散点可能是 r = 3, theta = 0.4 和 r = 3, theta = 0.6 之间未扩散点的平均值。如果模糊函数的“窗口”随 r 缩放,您将获得最佳效果。也就是说,r 越大,平均窗口越大,或者高斯模糊的 sigma 越大。

最后,它看起来像在扩散之前,光束被一个随 θ 变化的传输函数旋转地“过滤掉”。也就是说,“逃离”过滤器的光束量是角度的函数。该函数似乎有些随机但具有明显的结构(即,光带和暗带,而不是简单的白噪声)。这是生成具有结构的随机数据的 Perlin 噪声 的理想选择。您可以自定义此结构在柏林噪声算法中的精细程度;这确实是您显示的三张图片的区别所在。

总结一下:

  1. 首先,计算非分散分布:

    • 开始衰落的光球,f(r,theta) = 1/r(或其他一些衰落)

    • 将褪色的光球乘以嘈杂的过滤函数 p(theta)——但可能只指向超过给定半径的点(让那个白球在中间)

  2. 然后,用径向增长的模糊窗口分散一切

  3. 或许可以为所有内容添加白噪声颗粒。

我认为这只是生成这些的一种方式;可能还有其他人,但这可能是一个好的开始。

关于c++ - 如何以编程方式生成与这些相似的形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18649162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com