用于创建游戏引擎中使用的向量场的模块,例如Unreal Engine 4或Unity 3D。

vectorfields的Python项目详细描述


矢量域

创建矢量场和流图的脚本,可用于游戏引擎,如Unreal Engine 4和Unity 3D。
看看ue4的documentation

安装

通过python包索引

pip install vectorfields

出血边缘

  • 使用开发模式安装:
    pip install -e git+https://github.com/OlafHaag/vectorfields.git@master#egg=vectorfields
  • 使用常规模式安装(生成包):
    pip install https://github.com/OlafHaag/vectorfields/archive/master.zip

用法

你得懂一点python和数学。

无法实例化抽象基类vectorfield和vectorfield2d。

实例化一个特定的向量场,如electricdipole2d。
可以使用save方法将向量字段以fga或vf格式写入磁盘。为了能够以vf格式保存,必须使用to_3d方法将vectorfield2d子类的实例转换为3d向量字段。如果我没有弄错,unity需要cubic分辨率为x=y=z的向量场。 还可以将vectorfield2d子类的实例保存到flow maps(例如png)。

最好直接在引擎中预览向量场。保存到磁盘通常会以unity形式重新加载文件。
出于其他目的,可以使用vectorfield2d类的plot方法获得预览。

特殊类

涡流2d

具有参数radiuspull
Vortex2D Example Animation

旋转流2d

TwirlFlow2D Example Animation

电偶极子2d

Eddididie2D有2种特殊的方法来对矢量进行归一化,并且失去场强的所有信息,或者将场强箝位到最大值。这是必要的,因为这个领域的物理特性在视觉上并不令人满意。
ElectricDipole Example Animation

皮带2d

这样,您可以将旋转区域放置在或多或少合并在一起的区域中,从而形成皮带在皮带轮上运行的印象。
除了x和y坐标外,每个滑轮都有半径、厚度和速度(改变方向的负速度)。 Belt2D Example Animation
作为流程图:
Belt2D Example Flowmap

自定义值

这是一个快速原型和向量场生成类。

为构造函数提供自定义函数,用于创建u、v和w向量组件。
这些函数必须采用3个参数,这些参数将替换类“data members grid”“x,grid”“y,grid”“z”。
返回值必须是分别与grid_x、grid_y或grid_z形状相同的数组。

自定义2d

这是一个快速成型和生成二维矢量场的类。

向构造函数提供自定义函数,用于创建u和v向量组件。
这些函数必须有两个参数,这两个参数将替换类的数据成员grid_x和grid_y。 返回值必须是分别与grid_x或grid_y形状相同的数组。

2d示例:

非平方正弦向量场

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.ones(x.shape)# Flow in one direction.vfunc=lambdax,y:np.sin(x)vf=CustomUV2D(ufunc,vfunc,size=[8,2],resolution=[32,8])

方形示例: Sine Wave Example Animation

正余弦旋转

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.cos(y)vfunc=lambdax,y:np.cos(x)vf=CustomUV2D(ufunc,vfunc,size=16)

Diamonds Example Animation

“花”

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.sin(y+x)vfunc=lambdax,y:np.cos(x-y)vf=CustomUV2D(ufunc,vfunc,size=12,resolution=48)

Belt2D Example Animation

一些对角线流动的东西

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.cos(np.sqrt(np.abs(x)))vfunc=lambdax,y:np.cos(np.sqrt(np.abs(y)))vf=CustomUV2D(ufunc,vfunc)

anvaka's方形的流动瓷砖(说真的,很难找到这些东西的名称)

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:2.0*np.mod(np.floor(-y),2.0)-1.0vfunc=lambdax,y:2.0*np.mod(np.floor(-x),-2.0)+1.0vf=CustomUV2D(ufunc,vfunc,size=5.9,resolution=24)

优美的旋转

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.cos(np.linalg.norm(np.dstack((x,y)),axis=2))[:,:,np.newaxis]vfunc=lambdax,y:np.cos(x-y)vf=CustomUV2D(ufunc,vfunc,size=16)

Twirls Example Animation

旋转列

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.sin(y)vfunc=lambdax,y:xvf=CustomUV2D(ufunc,vfunc,size=[12,16],resolution=[24,32])

最后一件事…

importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.cos(y**2)vfunc=lambdax,y:np.cos(y*x)vf=CustomUV2D(ufunc,vfunc,size=[24,16],resolution=[48,32])

Thingy Example Animation

历史记录

这个小项目是从一个小游戏开始的,主题是“电力”。我想对粒子做点什么,并用公式控制它们的流动,但在创建向量场的时候,可用的方法要么对于这个小任务来说太复杂,要么太费时,要么一定要购买软件许可证。当然,这不能与像vectoraygen这样的gui软件竞争,但它是免费的、开源的。

开发

因为它做了什么我需要它被困在早期的发展阶段。例如,缺少三维向量场示例,也没有单元测试。

我想看到人们用它创建其他向量场,并改进和推进代码。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?