unity简单的闪电链制作(对中点分形法插值抖动部分参数的解释)

本文主要是介绍unity简单的闪电链制作(对中点分形法插值抖动部分参数的解释),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考原文:

https://blog.csdn.net/aceyan0718/article/details/52317231

https://krazydad.com/bestiary/bestiary_lightning.html

 

思路很简单,阅读原文就明白,就是采用递归的方式不断在两个点之间以给定的偏差值对中点进行抖动。

比如起点A与终点B,首先求得A,B连线的中点C,之后让C加减某一一定范围内的随机数值。之后再递归的对A,C两点,B,C两点实施相同的操作。直到顶点偏移量小于某一阈值。

问题1:为什么detail 增加后,线条数量会减少,每个线条会更长?

首先这里说的线条数量是起点与终点之间插入若干点之后,相邻点所连接的总的线条数量。其实就是插入的顶点数+1。

比如A,B之间插入点C,那么线条数量为2(A,C与C,B),插入的顶点数为1.

这里,我觉得应该是detail与displace 的大小关系,会影响到插入的顶点数,递归出口为displace < detail。每一次在两点之间插入一个顶点之后displace 都会变为原来的一半,因此当detail较小,displace较大时,插入的顶点会更多,也就是相邻点所连接的线条数越多。当detail较大,displace较小时插入的顶点会更少,也就是线条数量会减少。

问题2:displace对闪电链可能的影响

假设起点A,终点B的位置分别为(0,0,0),(10,10,10)

递归计算插入点坐标时: float midX = (startPos.x + destPos.x) / 2 + (float)(UnityEngine.Random.value - 0.5) * displace;

可以看见,如果displace超过A,B在X轴上距离的一半,那么midX有可能不在起点或者终点的X轴坐标之间。假设displace = 12,

那么midX可能的值在范围( -1, 11 )之间,而对于A,B两点,他们连线的X轴位置范围为(0,10)。

为什么提到上面这点呢,因为有时候希望对A,B之间的闪电链做出限制。比如A在B的上方,我们希望可以控制A,B之间的闪电链Y方向上在A,B两点之间,不会发生闪电链在在Y轴方向上超出A,B范围。

当然也可以直接给出A,B中点X,Y,Z三个值的偏移,如:

private void CollectLinPos(Vector3 startPos,Vector3 destPos,float displaceX, float displaceY, float displaceZ){if (displaceX < detail){_linePosList.Add(startPos);}else{float midX = (startPos.x + destPos.x) / 2;float midY = (startPos.y + destPos.y) / 2;float midZ = (startPos.z + destPos.z) / 2;midX += (float)(UnityEngine.Random.value - 0.5) * displaceX;midY += (float)(UnityEngine.Random.value - 0.5) * displaceY;midZ += (float)(UnityEngine.Random.value - 0.5) * displaceZ;Vector3 midPos =newVector3(midX,midY,midZ);CollectLinPos(startPos,midPos, displaceX / 2, displaceY/2, displaceZ/2 );CollectLinPos(midPos,destPos, displaceX / 2,  displaceY/2, displaceZ/2 );}}

 

这篇关于unity简单的闪电链制作(对中点分形法插值抖动部分参数的解释)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963681

相关文章

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL