使用柏林噪声来创造闪电?

2024-02-16

实际上,我有几个与主题标题中给出的主题相关的问题。

我已经在我的应用程序中使用 Perlin 函数创建闪电,但我对我的实现并不完全满意。

以下问题基于初始和改进的 Perlin 噪声实现。

为了简化问题,我们假设我通过使用 1D Perlin 函数调制由 N 个节点组成的水平线的高度来创建一个简单的 2D 闪电。

  1. 据我了解,传递给 Perlin 函数的两个后续值必须至少相差一,否则生成的两个值将相同。这是因为在简单的 Perlin 实现中,Random 函数使用 int 参数,并且在改进的实现中,值被映射到 [0..255],然后用作包含值 [0..255] 的数组的索引。 ] 呈随机分布。是对的吗?

  2. 如何实现 Perlin 函数返回的第一个和最后一个偏移值(即节点 0 和 N-1)始终为 0(零)?现在我正在用我的 Perlin 函数调制正弦函数(0 .. Pi)来实现这一目标,但这并不是我真正想要的。只是将它们设置为零并不是我想要的,因为我想要一条末端没有锯齿的漂亮闪电路径。

  3. 如何改变 Perlin 函数(以便获得两条不同的路径,可以用作闪电的动画开始帧和结束帧)?我当然可以为每个节点值添加每个路径计算的固定随机偏移,或者使用不同设置的排列表来改进柏林噪声,但是有更好的选择吗?


  1. 这取决于您如何实现它并从中采样。使用多个八度音程有助于计算整数。

    每个倍频程和额外的插值/采样提供了柏林噪声中的大部分噪声。理论上,您不需要使用不同的整数位置;您应该能够在任何点进行采样,并且它将与附近的值相似(但并不总是相同)。

  2. 我建议使用柏林作为乘数而不是简单的加法,并在闪电过程中使用曲线。例如,柏林在 [-1.5, 1.5] 范围内,闪电上有一条正态曲线(两端为 0,中间为 1),lightning + (perlin * curve)将使你的端点保持静止。根据您实现柏林噪声发生器的方式,您可能需要类似的东西:

    lightning.x += ((perlin(lightning.y, octaves) * 2.0) - 0.5) * curve(lightning.y);

    if perlin返回 [0,1] 或

    lightning.x += (perlin(lightning.y, octaves) / 128.0) * curve(lightning.y);

    如果它返回 [0, 255]。假设lightning.x从给定值(也许是 0)开始,这将给出一条仍符合原始起点和终点的锯齿状线。

  3. 为闪电添加的每一个维度都为噪声添加一个维度。如果您要在一维(水平锯齿状)修改闪电,则需要一维柏林噪声。如果你想制作动画,你需要 2D。如果您想要在两个轴上呈锯齿状且具有动画效果的闪电,则需要 3D 噪声,等等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用柏林噪声来创造闪电? 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat

随机推荐

  • 使用 React Router 4 动态加载 Redux 减速器

    我根据组件拆分代码 并且我想仅在组件加载时注入化简器 而不是从一开始就将它们全部堆叠在商店中 在 React Router 3 中 它非常简单 但我似乎无法让它与 React Router 4 一起工作 这是减速器和存储 减速器 js im
  • 当 DataGridView.SelectionMode 为 FullRowSelect 时,剪贴板复制失败

    在 Windows 窗体中 如果我创建一个包含行和列的简单 DataGridView 控件 然后将 SelectionMode 属性设置为 FullRowSelect 则剪贴板的复制功能会出现奇怪的行为 当选择一行并且用户按下 ctrl c
  • RxJava + Retrofit -> BaseObservable 用于 API 调用以进行集中响应处理

    我是 RxJava 新手 所以如果这听起来太新手 请原谅我 截至目前 我有一个实现 Retofit 回调的抽象 CallbackClass 在那里 我捕获了回调的 onResponse 和 onError 方法 并在最终转发到自定义实现的方
  • Angular 动态组件加载器更改检测问题

    我正在尝试使用角度动态组件加载器 https angular io guide dynamic component loader当我使用 ChangeDetectionStrategy OnPush 时 我遇到了更改检测问题 我在其中读到了
  • DateTimePicker:选择日期和时间

    是否可以使用 DateTimePicker Winforms 选择日期和时间 在下拉列表中 如何更改所选值的自定义显示 另外 是否可以让用户手动输入日期 时间 将格式设置为自定义 然后指定格式 dateTimePicker1 Format
  • 在类中使用#pragma pack

    我们可以在上课前使用 pragma pack 吗 pragma 这里的意义是什么 我知道它用于向编译器提供有关实现的信息 但是如果我们将它与类一起使用怎么办 它有exact对类的影响与对结构的影响相同 影响数据成员的对齐 实际上在课堂上使用
  • 在另一个 .cs 文件类中使用一个 .cs 文件类中的方法

    我有 2 个 cs 文件 每个文件中都有一个类 如何在 Form2 cs 内的另一个类中调用 Form1 cs 中的类中的方法 看起来像这样 Form1 cs public partial class Class1 ClassContain
  • 如何使用相同的代码将 unicode 文本写入 python 2 和 3 中的文件?

    我正在尝试编写一个可以通过 python 2 和 3 运行的程序 它从网站读取字符并写入文件 我已经导入了unicode literals来自 未来 直接尝试编写一个如下所示的字符串 txt u his u2026 n 将导致 Unicod
  • 适用于 Web 应用程序的 3D 散点图

    我正在寻找用于 Web 应用程序的散点图 3D 组件 现在我正在使用数学图 http jmathtools berlios de doku php 在 Java Applet 内 生成如下内容 替代文本 http jmathtools be
  • 由 Array.prototype.fill() 填充的数组的奇怪行为

    我遇到了一些我不明白的数组 事实上 我创建了一个数组 并用空子数组填充以获得二维矩阵 但是当我操作数组时 它的行为并不像我预期的那样 var arr new Array 5 arr fill arr 2 push third rank it
  • Pandas Dataframe 按列排序[重复]

    这个问题在这里已经有答案了 我有一个 Python Pandas 数据框 df 有 2 列 我想按第二列对 df 进行排序 Kappa prod Angle 0 0 004511 5 457840 1 0 003977 5 312861 2
  • DockPanel.Dock="Right" 不适用于最大化窗口上的单个控件?

    我正在使用 DockPanel Dock 将控件停靠在特定位置 即左 右 问题是我的控件没有根据 DockPanel Dock 位置停靠 下面是单个控件的代码DockPanel Dock Right
  • 为什么需要 PrintWriter?

    我真的很困惑各种 io 类的用途 例如 如果我们有 BufferedWriter 为什么我们需要 PrintWriter BufferedReader reader new BufferedReader new FileReader fil
  • array_agg() 的替代品?

    有没有 PostgreSQL 的替代品array agg 函数 以便它不会返回以下格式的值 x y z 我可以让它返回吗 x y z In PostgreSQL 9 0或稍后使用string agg val https www postgr
  • wglShareLists 失败并出现错误 6:ERROR_INVALID_HANDLE 句柄无效

    我尝试在两个类之间共享 HPBUFFERARB TGLForm 和 TGLForm2 我尝试过 FBO 但有一个旧的 Borland Builder 6 版本 我无法使用 FBO 进行管理 我的目标是在两个 openGL 窗口中显示相同的缓
  • CSS 浮动页脚

    我想制作一个保留在可视窗口底部的页脚 除非当您调整窗口大小时它会与内容相抵触 我试过 底部 0 位置 绝对 但是当窗口较小时 页脚会妨碍 我相信这会做你想要的 CSS 布局 100 高度 包含页眉和页脚 http www xs4all nl
  • 按组顺序填充 NA 值

    我正在尝试填充数据集中的一些值 我的数据的简化版本如下 gt example df Date GROUP value 157 2018 01 31 10180 3 464 158 2018 02 28 10180 3 413 159 201
  • 将 Javascript 应用程序转换为 Windows 应用程序

    除了Adobe Air还有其他解决方案吗 我听说 V8 有点东西 只是现在没有时间 用另一种语言编写整个应用程序 然后编写 2 倍以上的代码 也许你可以使用jsc 从命令行编译 JScript 代码 http msdn microsoft
  • 如何在 Azure 中允许 URL 编码路径段

    我有一个在 Azure 中运行的 ASP NET 6 MVC 应用程序 我有一个控制器 其动作如下 HttpDelete Route image url public async Task
  • 使用柏林噪声来创造闪电?

    实际上 我有几个与主题标题中给出的主题相关的问题 我已经在我的应用程序中使用 Perlin 函数创建闪电 但我对我的实现并不完全满意 以下问题基于初始和改进的 Perlin 噪声实现 为了简化问题 我们假设我通过使用 1D Perlin 函