用于创建游戏引擎中使用的向量场的模块,例如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
具有参数radius和pull
旋转流2d
电偶极子2d
Eddididie2D有2种特殊的方法来对矢量进行归一化,并且失去场强的所有信息,或者将场强箝位到最大值。这是必要的,因为这个领域的物理特性在视觉上并不令人满意。
皮带2d
这样,您可以将旋转区域放置在或多或少合并在一起的区域中,从而形成皮带在皮带轮上运行的印象。
除了x和y坐标外,每个滑轮都有半径、厚度和速度(改变方向的负速度)。
作为流程图:
自定义值
这是一个快速原型和向量场生成类。
为构造函数提供自定义函数,用于创建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])
方形示例:
正余弦旋转
importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.cos(y)vfunc=lambdax,y:np.cos(x)vf=CustomUV2D(ufunc,vfunc,size=16)
“花”
importnumpyasnpfromvectorfieldsimportCustomUV2Dufunc=lambdax,y:np.sin(y+x)vfunc=lambdax,y:np.cos(x-y)vf=CustomUV2D(ufunc,vfunc,size=12,resolution=48)
一些对角线流动的东西
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)
旋转列
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])
历史记录
这个小项目是从一个小游戏开始的,主题是“电力”。我想对粒子做点什么,并用公式控制它们的流动,但在创建向量场的时候,可用的方法要么对于这个小任务来说太复杂,要么太费时,要么一定要购买软件许可证。当然,这不能与像vectoraygen这样的gui软件竞争,但它是免费的、开源的。
开发
因为它做了什么我需要它被困在早期的发展阶段。例如,缺少三维向量场示例,也没有单元测试。
我想看到人们用它创建其他向量场,并改进和推进代码。