本帖最后由 LocusAzzurro 于 2021-6-13 17:11 编辑
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzswgfzlnj30m80go0vo.jpg
使用表达式来控制你的百变选区!
大家好,这里Az,最近完成了对WorldEdit中//deform指令的研究,在这里与大家分享一下获得的成果,发掘这个功能更多的潜能。
目录
I.指令简介
II.指令结构与使用方式
III.可用标示
IV.坐标范围
V.变换方程-加减(移动)
VI.变换方程-乘除(缩放)
VII.函数的使用
VIII.特殊函数-旋转与翻转
IX.源坐标的使用
X.移动后源坐标的使用
XI.使用例子
XII.相关资料与来源
XIII.后记
阅读提示:你可能需要如下知识来理解本文并了解它的使用方式
注意本文内容虽然与//generate指令研究同源,但二者为WorldEdit下的不同功能
WorldEdit插件系列教程(作者 shengjing1): http://www.mcbbs.net/thread-68779-1-1.html
WorldEdit插件资源(作者 sjjklh): http://www.mcbbs.net/thread-68815-1-1.html
WorldEdit插件简短介绍:
2021/06/13 18:10 GMT+1 图片重修复与纯文本流线化完成
来自群组: Minecraft插件百科
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzswgfzlnj30m80go0vo.jpg
使用表达式来控制你的百变选区!
大家好,这里Az,最近完成了对WorldEdit中//deform指令的研究,在这里与大家分享一下获得的成果,发掘这个功能更多的潜能。
目录
I.指令简介
II.指令结构与使用方式
III.可用标示
IV.坐标范围
V.变换方程-加减(移动)
VI.变换方程-乘除(缩放)
VII.函数的使用
VIII.特殊函数-旋转与翻转
IX.源坐标的使用
X.移动后源坐标的使用
XI.使用例子
XII.相关资料与来源
XIII.后记
阅读提示:你可能需要如下知识来理解本文并了解它的使用方式
- WorldEdit 基础操作
- 三维直角坐标系
- 基础代数
- 几何变换
注意本文内容虽然与//generate指令研究同源,但二者为WorldEdit下的不同功能
WorldEdit插件系列教程(作者 shengjing1): http://www.mcbbs.net/thread-68779-1-1.html
WorldEdit插件资源(作者 sjjklh): http://www.mcbbs.net/thread-68815-1-1.html
WorldEdit插件简短介绍:
WorldEdit是一个常用的地图编辑工具,玩家可以利用它进行许多建筑中的操作,加快施工速度,同时也提供了许多便捷的功能。
2021/06/13 18:10 GMT+1 图片重修复与纯文本流线化完成
来自群组: Minecraft插件百科
本帖最后由 LocusAzzurro 于 2021-6-13 15:39 编辑
I.指令简介
//deform 为WorldEdit中的一个指令,作用是根据用户给出的表达式对选区进行变换。 这个功能是WorldEdit的强大功能之一,可以按照用户的需求对选区进行转换,可以达到旋转,拉伸,移动选区内容的效果。在本文中我将向各位分享这个指令的使用方式,需要注意的地方,以及一些实例,也希望各位共同发现它更多的潜能。在正式开始之前,我们先来看一个例子了解它的能力:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsgz36tjj311y0jiakj.jpg
上面的形体通过一个命令即可转换为:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsgp68saj311y0jlgwe.jpg
当然,这样看起来并不能很好的理解它是如何运作的,那么让我来一一了解它的功能,首先,我们通过上图使用的指令来了解指令的构成。
I.指令简介
//deform 为WorldEdit中的一个指令,作用是根据用户给出的表达式对选区进行变换。 这个功能是WorldEdit的强大功能之一,可以按照用户的需求对选区进行转换,可以达到旋转,拉伸,移动选区内容的效果。在本文中我将向各位分享这个指令的使用方式,需要注意的地方,以及一些实例,也希望各位共同发现它更多的潜能。在正式开始之前,我们先来看一个例子了解它的能力:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsgz36tjj311y0jiakj.jpg
上面的形体通过一个命令即可转换为:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsgp68saj311y0jlgwe.jpg
当然,这样看起来并不能很好的理解它是如何运作的,那么让我来一一了解它的功能,首先,我们通过上图使用的指令来了解指令的构成。
本帖最后由 LocusAzzurro 于 2021-6-13 16:08 编辑
II.指令结构与使用方式
上图使用的指令是:
复制代码
这其中://deform 为主指令x+=sin(2*y) 为使用的几何变换表达式
这里使用的表达式的写法与日常的有些不同,我们来看一下表达式需要注意的地方:
需要注意的地方有:
II.指令结构与使用方式
上图使用的指令是:
- //deform x+=sin(2*y)
这其中://deform 为主指令x+=sin(2*y) 为使用的几何变换表达式
这里使用的表达式的写法与日常的有些不同,我们来看一下表达式需要注意的地方:
- 表达式的写法与Java相似:
- 加减乘除分别为+ - * /;
- 次方为 ^ ,这个符号在这里不表示逻辑异或门;
- 使用多重括号时仅能使用圆括号;
- 在表达式中可以使用 && 来代表逻辑与门,用||来代表逻辑或门,! 比较特殊,加在一段表达式前代表逻辑非门,加在表达式或数字之后代表数学阶乘,但在这个指令的使用中不是非常重要;
- 比较使用的是 < > (大于与小于),<=(小于等于),>=(大于等于),==(等于),!=(不等于);
- 如果需要同时输入多个表达式(如一个x轴上的变换和一个y轴上的变换),两个表达式之间可以用分号隔开;
- 表达式写法支持Java风格的运算+赋值,如y+=1等同于y=y+1;
- 一般的函数是可以在表达式中使用的,如abs()绝对值,cos()正弦,sqrt()平方根等,完整的列表可以查看WorldEdit Wiki (在下文的函数部分会有介绍与例子)
需要注意的地方有:
- 与日常书写表达式不同,3x,5y等需要用乘号链接,即3*x, 5*y;
综上所述,这个指令的格式为
复制代码- //generate <ID> [-r/-o] <表达式>
-r, -o 为这个指令可以使用的标示。
使用这个指令的时候需要选择一个选区,指令会对选区按要求进行变形,注意选区的形状会影响到输出的结果,有时这个特性会造成一些麻烦,但有时可以使用这个来达到希望的效果,这一点我们接下来会讲到。
同时,就像刚才提到的,在使用这个指令时,我们可以使用一个或几个标示来改变指令的效果,来达到需要的结果。
本帖最后由 LocusAzzurro 于 2021-6-13 16:10 编辑
III.可用标示
在使用指令时,我们可以添加一个或多个标示来改变指令的运行方式,添加标示的方法很简单,只需要将标示像添加参数一样的方式添加至指令中即可。如:
复制代码
可用的标示有两个,分别是-r与-o。-r 会使变换时使用源坐标-o 会使变换时使用源坐标,同时将坐标系原点移动到玩家位置(或者玩家的第一选择点,如果使用了/toggleplace)
-r 与 -o 的效果冲突,因此-o的效果会覆盖掉-r的效果,推荐不要同时使用。
这里仅仅给出一个标示的基本介绍,在本文之后的章节中会一一介绍它们的效果,接下来我们首先来集中看一下不使用任何标示的情况。
III.可用标示
在使用指令时,我们可以添加一个或多个标示来改变指令的运行方式,添加标示的方法很简单,只需要将标示像添加参数一样的方式添加至指令中即可。如:
- //deform -r y+=1
可用的标示有两个,分别是-r与-o。-r 会使变换时使用源坐标-o 会使变换时使用源坐标,同时将坐标系原点移动到玩家位置(或者玩家的第一选择点,如果使用了/toggleplace)
-r 与 -o 的效果冲突,因此-o的效果会覆盖掉-r的效果,推荐不要同时使用。
这里仅仅给出一个标示的基本介绍,在本文之后的章节中会一一介绍它们的效果,接下来我们首先来集中看一下不使用任何标示的情况。
本帖最后由 LocusAzzurro 于 2021-6-13 16:13 编辑
IV.坐标范围
在不使用任何标示的情况下,WorldEdit会将当前的选区看做一个三维直角坐标系,坐标系原点为选区中心。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsgrz4kzj311y0jl7g7.jpg
如图,我用羊毛标出了三条坐标轴,WorldEdit使用的坐标轴系统与Minecraft的相同,即从西(负)到东(正)为X轴(红),从下到上为Y轴(黄),从北到南为Z轴(蓝)。
这个坐标系三条轴的界限为 -1 与 +1 ,也可以说生成的范围为 [-1;+1] ,注意这个界限仅在不使用标示存在,-r 与 -o 的运行方式完全不同,我们在下文会分别看到他们的生成方式。
上图使用金块和红石块标注的位置按前文所说应分别为为 (0;0.5;5)即Y值为0.5 ,与(0.5;0;0),即X值为0.5。
有人可能注意到到目前位置的操作使用的选区都是正方体,那么如果不是呢?这样的话坐标系就会被拉伸,几何变换的结果也会随之被拉伸,这还是因为选区的范围为从-1到+1造成的。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsgwcvjzj311y0jlqe4.jpg
如上图,选区Y轴的长度为X轴与Z轴的两倍,金块标注的点(0;0.5;0)也会变化,虽然它在坐标系内的位置仍是相同的。在接下来的一章我们将会看到长方体选区对几何变换的影响。
IV.坐标范围
在不使用任何标示的情况下,WorldEdit会将当前的选区看做一个三维直角坐标系,坐标系原点为选区中心。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsgrz4kzj311y0jl7g7.jpg
如图,我用羊毛标出了三条坐标轴,WorldEdit使用的坐标轴系统与Minecraft的相同,即从西(负)到东(正)为X轴(红),从下到上为Y轴(黄),从北到南为Z轴(蓝)。
这个坐标系三条轴的界限为 -1 与 +1 ,也可以说生成的范围为 [-1;+1] ,注意这个界限仅在不使用标示存在,-r 与 -o 的运行方式完全不同,我们在下文会分别看到他们的生成方式。
上图使用金块和红石块标注的位置按前文所说应分别为为 (0;0.5;5)即Y值为0.5 ,与(0.5;0;0),即X值为0.5。
有人可能注意到到目前位置的操作使用的选区都是正方体,那么如果不是呢?这样的话坐标系就会被拉伸,几何变换的结果也会随之被拉伸,这还是因为选区的范围为从-1到+1造成的。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsgwcvjzj311y0jlqe4.jpg
如上图,选区Y轴的长度为X轴与Z轴的两倍,金块标注的点(0;0.5;0)也会变化,虽然它在坐标系内的位置仍是相同的。在接下来的一章我们将会看到长方体选区对几何变换的影响。
本帖最后由 LocusAzzurro 于 2021-6-13 16:25 编辑
V.变换方程-加减(移动)
接下来我们将会看到各种变换方程的效果,几何变换主要有三种,即移动,拉伸与旋转,首先我们来看一下相对简单的移动,同时观察一下长方体选区对变换的影响。
首先我们来看一个简单的移动,下图中我们有一个位于y=0位置的平面
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsifnrizj311y0jlwmq.jpg
我们希望将它向上移动0.5单位,我们需要使用的指令是:
复制代码
注意这里使用的是 - ,这是几何变换表达式的特性,因为我们改变的是变量本身,需要使用相反的运算符来达到效果。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsiknickj311y0jnai7.jpg
移动后的效果如上图。
它的运作方式是带入每个方块位置的坐标数值,将其按表达式进行变动,并将方块移动到计算出的坐标的新位置,接下来我们通过移动一个单个方块来更直观地来看看这一点:
首先,我们的方块所在位置为选区中心,即坐标系原点 (0;0;0)
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsi3r318j311y0jqtia.jpg
首先使用指令:
复制代码
将它向正X方向移动0.5单位,从下图可以看到方块成功被移动了。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsi5xl5oj311y0jnn6t.jpg
接下来我们将它向上移动0.5单位,使用的指令是:
复制代码
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsi8hzd2j311y0jkgvc.jpg
最后,我们来看一下更复杂点的物体的移动,一个球体,同时来看一下多个表达式的同时使用。
首先,下图为球体开始时的位置:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsidfqcpj311y0jj110.jpg
这里我们使用指令:
复制代码
将球体同时在两轴移动,可以看到指令中使用了分号来分隔两段表达式,下图为移动后球体的位置:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsiavdv0j311y0jl46t.jpg
V.变换方程-加减(移动)
接下来我们将会看到各种变换方程的效果,几何变换主要有三种,即移动,拉伸与旋转,首先我们来看一下相对简单的移动,同时观察一下长方体选区对变换的影响。
首先我们来看一个简单的移动,下图中我们有一个位于y=0位置的平面
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsifnrizj311y0jlwmq.jpg
我们希望将它向上移动0.5单位,我们需要使用的指令是:
- //deform y=y-0.5
注意这里使用的是 - ,这是几何变换表达式的特性,因为我们改变的是变量本身,需要使用相反的运算符来达到效果。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsiknickj311y0jnai7.jpg
移动后的效果如上图。
它的运作方式是带入每个方块位置的坐标数值,将其按表达式进行变动,并将方块移动到计算出的坐标的新位置,接下来我们通过移动一个单个方块来更直观地来看看这一点:
首先,我们的方块所在位置为选区中心,即坐标系原点 (0;0;0)
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsi3r318j311y0jqtia.jpg
首先使用指令:
- //deform x=x-0.5
将它向正X方向移动0.5单位,从下图可以看到方块成功被移动了。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsi5xl5oj311y0jnn6t.jpg
接下来我们将它向上移动0.5单位,使用的指令是:
- //deform y=y-0.5
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsi8hzd2j311y0jkgvc.jpg
最后,我们来看一下更复杂点的物体的移动,一个球体,同时来看一下多个表达式的同时使用。
首先,下图为球体开始时的位置:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsidfqcpj311y0jj110.jpg
这里我们使用指令:
- //deform x=x+0.3; y=y+0.3
将球体同时在两轴移动,可以看到指令中使用了分号来分隔两段表达式,下图为移动后球体的位置:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsiavdv0j311y0jl46t.jpg
本帖最后由 LocusAzzurro 于 2021-6-13 16:31 编辑
VI.变换方程-乘除(缩放)
看完了加减,接下来我们来看看乘除,他们对应的是几何变换中的缩放,即通过带有乘除的表达式我们可以达到拉伸与压缩形体的效果。
首先我们来看一下拉伸:下图我们的选区中有一个黑红相间的立方体,我们需要将它在X轴上进行拉伸,成为一个长方体。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsjwimshj311y0jmtjv.jpg
为了达到这个效果,我们使用指令:
复制代码
即将它在X轴上拉伸2倍,注意这里和之前的加减法异曲同工,拉伸使用的是除法,压缩使用的是乘法,拉伸后的效果如下:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsjtrd3xj311y0jl49t.jpg
接着我们来看看压缩:
我们需要将下图的长方体的高度压缩到一半。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsk1adytj311y0jkn6q.jpg
我们使用的指令是:
复制代码
这样就可以将它压缩为1/2,效果如下图:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsjywt14j311y0jiwo0.jpg
这样我们就可以对物体进行缩放,我们也可以使用多个表达式来在多轴上同时进行缩放,如果我们在三轴上同时按同比例缩放,我们就可以达到按比例放大和缩小的效果,我们来看下面的例子:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsk8jhn2j311y0jidv9.jpg
我们需要将上图的形状放大3倍,我们可以使用:
复制代码
可以看到同时使用了三个表达式,同时使用的是Java风格运算+赋值的方式。转换的结果如下图:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsk5ofnxj311y0jltkz.jpg
接下来我们来看一下几何变换中函数的使用。
VI.变换方程-乘除(缩放)
看完了加减,接下来我们来看看乘除,他们对应的是几何变换中的缩放,即通过带有乘除的表达式我们可以达到拉伸与压缩形体的效果。
首先我们来看一下拉伸:下图我们的选区中有一个黑红相间的立方体,我们需要将它在X轴上进行拉伸,成为一个长方体。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsjwimshj311y0jmtjv.jpg
为了达到这个效果,我们使用指令:
- //deform x=x/2
即将它在X轴上拉伸2倍,注意这里和之前的加减法异曲同工,拉伸使用的是除法,压缩使用的是乘法,拉伸后的效果如下:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsjtrd3xj311y0jl49t.jpg
接着我们来看看压缩:
我们需要将下图的长方体的高度压缩到一半。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsk1adytj311y0jkn6q.jpg
我们使用的指令是:
- //deform y=y*2
这样就可以将它压缩为1/2,效果如下图:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsjywt14j311y0jiwo0.jpg
这样我们就可以对物体进行缩放,我们也可以使用多个表达式来在多轴上同时进行缩放,如果我们在三轴上同时按同比例缩放,我们就可以达到按比例放大和缩小的效果,我们来看下面的例子:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsk8jhn2j311y0jidv9.jpg
我们需要将上图的形状放大3倍,我们可以使用:
- //deform x/=3; y/=3; z/=3
可以看到同时使用了三个表达式,同时使用的是Java风格运算+赋值的方式。转换的结果如下图:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsk5ofnxj311y0jltkz.jpg
接下来我们来看一下几何变换中函数的使用。
本帖最后由 LocusAzzurro 于 2021-6-13 16:34 编辑
VII.函数的使用
如同上文提到的,我们可以在我们的表达式中使用函数,我们来看一个简单的例子:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzslsxalsj311y0jn10k.jpg
如上图,y=0 平面,我们需要使这个平面变为余弦波型的曲面,为达到这个效果,我们可以使用cos() 余弦函数,使用的命令为:
复制代码
作用为在Y轴上加上正弦波的形状,结果如下:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzslp6jp4j311y0jm474.jpg
我们可以注意到曲面上有许多空位,这是因为WorldEdit计算时是计算并移动每个方块的,如同上文提到的。
除了正常的数学函数,WorldEdit还提供了两个特殊的函数,让我们可以简单地进行对角翻转与旋转,让我们来看一下。
VII.函数的使用
如同上文提到的,我们可以在我们的表达式中使用函数,我们来看一个简单的例子:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzslsxalsj311y0jn10k.jpg
如上图,y=0 平面,我们需要使这个平面变为余弦波型的曲面,为达到这个效果,我们可以使用cos() 余弦函数,使用的命令为:
- //deform y+=sin(4*x)/2
作用为在Y轴上加上正弦波的形状,结果如下:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzslp6jp4j311y0jm474.jpg
我们可以注意到曲面上有许多空位,这是因为WorldEdit计算时是计算并移动每个方块的,如同上文提到的。
除了正常的数学函数,WorldEdit还提供了两个特殊的函数,让我们可以简单地进行对角翻转与旋转,让我们来看一下。
本帖最后由 LocusAzzurro 于 2021-6-13 16:43 编辑
VIII.特殊函数旋转与翻转
WorldEdit提供了两个特殊的函数,swap(x,y) 与 rotate(x,y,a),二者的作用分别为交换两个变量的值,与在一个平面上旋转选区,让我们通过例子来了解:
首先是 swap(x,y)它可以交换选区内所有点的两个指定坐标,即可以交换X与Y,X与Z,或Y与Z,这样可以达到分别相对于x=y, x=z, y=z 三个斜面进行面对称转换的效果,在使用时写出要交换的两个坐标即可。
下图中有一个红色羊毛球
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsmfmjh2j311y0jlgwx.jpg
我们尝试使用指令:复制代码
交换x与z,效果如下
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsmcovqoj311y0jogx5.jpg
可以看到球移动到了另一边,我们实际完成是一个相对于平面x=z的对称转换,下图可以看到平面的大概位置,使用玻璃标注出:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsmabxq6j311y0jnk4j.jpg
接着我们来看一下旋转,使用的函数为rotate(x,y, a)
x与y分别为两个坐标轴方向,可以为x,y,z,共同确定了选区旋转的基准面,也就是方向,a为需要旋转的角,注意它的单位并非角度,而是弧度,也就是说需要使用pi/2(90度) ,pi/6(30度) (pi代表π,在WorldEdit中取值3.14159265358979323846)等作为值,并且值的正负代表了旋转方向,让我们通过在三个方向的旋转来了解它的运作方式:
首先这是我们的球体的起始状态,同时这里开启了F3模式来更清楚地了解旋转方向(红线指向方向为正X,蓝线正Z,绿线正Y),注意下面的三个旋转都是以下图的状态为基准的。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzslzrr62j311y0jl7fc.jpg
首先是XY平面的旋转,使用的指令为:复制代码
即顺时针45度,效果如下:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsm2q037j311y0jnal8.jpg
接下来是XZ面,逆时针45度,指令为复制代码
效果如下:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsm57qlmj311y0jjwpj.jpg
最后是YZ面,同样45度,指令:复制代码
结果如下:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsm7n2qtj311y0jkgws.jpg
VIII.特殊函数旋转与翻转
WorldEdit提供了两个特殊的函数,swap(x,y) 与 rotate(x,y,a),二者的作用分别为交换两个变量的值,与在一个平面上旋转选区,让我们通过例子来了解:
首先是 swap(x,y)它可以交换选区内所有点的两个指定坐标,即可以交换X与Y,X与Z,或Y与Z,这样可以达到分别相对于x=y, x=z, y=z 三个斜面进行面对称转换的效果,在使用时写出要交换的两个坐标即可。
下图中有一个红色羊毛球
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsmfmjh2j311y0jlgwx.jpg
我们尝试使用指令:
- //deform swap(x,z)
交换x与z,效果如下
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsmcovqoj311y0jogx5.jpg
可以看到球移动到了另一边,我们实际完成是一个相对于平面x=z的对称转换,下图可以看到平面的大概位置,使用玻璃标注出:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsmabxq6j311y0jnk4j.jpg
接着我们来看一下旋转,使用的函数为rotate(x,y, a)
x与y分别为两个坐标轴方向,可以为x,y,z,共同确定了选区旋转的基准面,也就是方向,a为需要旋转的角,注意它的单位并非角度,而是弧度,也就是说需要使用pi/2(90度) ,pi/6(30度) (pi代表π,在WorldEdit中取值3.14159265358979323846)等作为值,并且值的正负代表了旋转方向,让我们通过在三个方向的旋转来了解它的运作方式:
首先这是我们的球体的起始状态,同时这里开启了F3模式来更清楚地了解旋转方向(红线指向方向为正X,蓝线正Z,绿线正Y),注意下面的三个旋转都是以下图的状态为基准的。
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzslzrr62j311y0jl7fc.jpg
首先是XY平面的旋转,使用的指令为:
- //deform rotate(x,y,pi/4)
即顺时针45度,效果如下:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsm2q037j311y0jnal8.jpg
接下来是XZ面,逆时针45度,指令为
- //deform rotate(x,z,pi/4)
效果如下:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsm57qlmj311y0jjwpj.jpg
最后是YZ面,同样45度,指令:
- //deform rotate(y,z,pi/4)
结果如下:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsm7n2qtj311y0jkgws.jpg
本帖最后由 LocusAzzurro 于 2021-6-13 16:47 编辑
IX.源坐标的使用
看完了所有正常模式的转换,现在我们来关注一下 -r 标示,它的作用是使生成时使用源坐标,简单来说,就是将整个地图视作一个巨大的立体直角坐标系,虽然转换的范围依旧会被限制在选区中,但使用指令时可以带入实际的坐标进行(即F3画面上的XYZ坐标)运算。
这样说起来可能不好理解,让我们来看一个简单例子吧:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsobu76fj311y0jl7ex.jpg
如上图,我们的目标是将物体向上移动5格距离(实际的5格),我们可以使用源坐标模式来达到效果,使用指令:
复制代码
它的效果是使选区向上移动5单位,但由于使用了-r标示,1单位即为1格,所以为向上移动5格。输入指令效果如下,球体向上移动了5格:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzso8qphjj311y0jlwp8.jpg
IX.源坐标的使用
看完了所有正常模式的转换,现在我们来关注一下 -r 标示,它的作用是使生成时使用源坐标,简单来说,就是将整个地图视作一个巨大的立体直角坐标系,虽然转换的范围依旧会被限制在选区中,但使用指令时可以带入实际的坐标进行(即F3画面上的XYZ坐标)运算。
这样说起来可能不好理解,让我们来看一个简单例子吧:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzsobu76fj311y0jl7ex.jpg
如上图,我们的目标是将物体向上移动5格距离(实际的5格),我们可以使用源坐标模式来达到效果,使用指令:
- //deform -r y-=5
它的效果是使选区向上移动5单位,但由于使用了-r标示,1单位即为1格,所以为向上移动5格。输入指令效果如下,球体向上移动了5格:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzso8qphjj311y0jlwp8.jpg
本帖最后由 LocusAzzurro 于 2021-6-13 16:50 编辑
X.移动后源坐标的使用
最后,我们来看一下-o 标示,移动过的源坐标,它与之前的-r 标示十分相似,也是使用实际地图坐标长度来进行运算,但二者的区别是-r 完完全全使用的是真实的方块坐标,但-o 模式会将玩家使用命令时所在的位置(或者玩家的第一个选择点,如果使用了/toggleplace),作为三维直角坐标系的原点。
和刚才一样,我们来看一个例子:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsojmlt2j311y0jjaof.jpg
上图我们处于一个空心球体里,我们希望以所在位置为中心来拉伸空间,这样球体会在我们周围被拉伸。
我们使用的指令是:
复制代码
效果为在Y轴上进行两倍的拉伸,使用真实坐标(虽然拉伸的效果与不使用标示相同),并将玩家位置作为原点,输入后效果如下:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsogxnsqj311y0jkqi7.jpg
可以看到球体在Y轴被拉伸了2倍
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsoefaalj311y0jjk12.jpg
X.移动后源坐标的使用
最后,我们来看一下-o 标示,移动过的源坐标,它与之前的-r 标示十分相似,也是使用实际地图坐标长度来进行运算,但二者的区别是-r 完完全全使用的是真实的方块坐标,但-o 模式会将玩家使用命令时所在的位置(或者玩家的第一个选择点,如果使用了/toggleplace),作为三维直角坐标系的原点。
和刚才一样,我们来看一个例子:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsojmlt2j311y0jjaof.jpg
上图我们处于一个空心球体里,我们希望以所在位置为中心来拉伸空间,这样球体会在我们周围被拉伸。
我们使用的指令是:
- //deform -o y=y/2
效果为在Y轴上进行两倍的拉伸,使用真实坐标(虽然拉伸的效果与不使用标示相同),并将玩家位置作为原点,输入后效果如下:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsogxnsqj311y0jkqi7.jpg
可以看到球体在Y轴被拉伸了2倍
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzsoefaalj311y0jjk12.jpg
本帖最后由 LocusAzzurro 于 2021-6-13 16:55 编辑
XI.使用例子
最后我们来看一下两个简单的使用例子:
首先是一个圆柱体的旋转,我们需要将它逆时针在XY面旋转30度
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsp5nrl6j311y0jktj6.jpg
我们需要使用的指令就是:
复制代码
效果如下图:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsp89vdrj311y0jm13f.jpg
最后是一个物体的放大,是推荐使用来放大物体的方法:
首先下图是需要放大的物体,首先我们需要选择整个物体,建议只选取最小的可以包含整个物体的选区,推荐使用//sel extend 模式进行选择。
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzspdnxu6j311y0jkwn8.jpg
如下图,我们选择了整个物体
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzspghpjwj311o0jaajq.jpg
接下来我们使用//outset 来扩大选区,这样的好处的是可以简单扩大选区并使物体位于扩大后的选区中心,可以更好地控制扩大后物体的位置。如下图为扩大后的选区。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzspj2gs2j311y0jlam0.jpg
最后使用指令来拉伸物体即可:
复制代码
结果如下图:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzspliywbj311y0jnk4r.jpg
XI.使用例子
最后我们来看一下两个简单的使用例子:
首先是一个圆柱体的旋转,我们需要将它逆时针在XY面旋转30度
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezzsp5nrl6j311y0jktj6.jpg
我们需要使用的指令就是:
- //deform rotate(x,y,pi/6)
效果如下图:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzsp89vdrj311y0jm13f.jpg
最后是一个物体的放大,是推荐使用来放大物体的方法:
首先下图是需要放大的物体,首先我们需要选择整个物体,建议只选取最小的可以包含整个物体的选区,推荐使用//sel extend 模式进行选择。
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzspdnxu6j311y0jkwn8.jpg
如下图,我们选择了整个物体
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezzspghpjwj311o0jaajq.jpg
接下来我们使用//outset 来扩大选区,这样的好处的是可以简单扩大选区并使物体位于扩大后的选区中心,可以更好地控制扩大后物体的位置。如下图为扩大后的选区。
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezzspj2gs2j311y0jlam0.jpg
最后使用指令来拉伸物体即可:
- //deform x/=2;y/=2;z/=2
结果如下图:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezzspliywbj311y0jnk4r.jpg
本帖最后由 LocusAzzurro 于 2021-6-13 16:58 编辑
XII.相关资料与来源
【WorldEdit】【教程直播】创世神的64把木斧
作者 Az蓝色轨迹(本文作者)
http://tieba.baidu.com/p/3896008092
[//deform初步研究结果]
【WorldEdit】//generate 指令研究
作者 Az蓝色轨迹(本文作者)
http://tieba.baidu.com/p/4235806549
[部分理论基础]
XII.相关资料与来源
【WorldEdit】【教程直播】创世神的64把木斧
作者 Az蓝色轨迹(本文作者)
http://tieba.baidu.com/p/3896008092
[//deform初步研究结果]
【WorldEdit】//generate 指令研究
作者 Az蓝色轨迹(本文作者)
http://tieba.baidu.com/p/4235806549
[部分理论基础]
本帖最后由 LocusAzzurro 于 2021-6-13 16:59 编辑
XIII.后记
这又是令一个WorldEdit未被开发的新大陆,希望更多人能进行更深入的研究,成为这方面的领航者。
XIII.后记
这又是令一个WorldEdit未被开发的新大陆,希望更多人能进行更深入的研究,成为这方面的领航者。
那个弯折的效果蛮有趣的⊙▽⊙
待会去服务器试试
待会去服务器试试
WaterPast 发表于 2016-1-22 23:53
那个弯折的效果蛮有趣的⊙▽⊙
待会去服务器试试
额额额额
很好的教程,看来楼主花费了很大心思吧?
学习了,先去试试。
好像很厉害的样子0.0,瞬间涨姿势。
很好的教程,看来楼主花费了很大心思吧?
楼主辛苦了!
收藏下来慢慢看
感觉每次AZ发的WE指令研究都好高能,虽然认真看看得懂,但是头都晕了。。
WE再次给大神制造了新脑洞
这么厉害,顶上去报复渣渣=A=
学到了 待会儿去服务器试试
好高深啊,半天没看完。
功能很强大,不过我不是很会用
厉害啊,在下佩服
神一样的存在
LocusAzzurro 发表于 2016-1-22 21:09
V.变换方程-加减(移动)
接下来我们将会看到各种变换方程的效果,几何变换主要有三种,即移动,拉伸与旋转 ...
妈妈,我看不懂
看得懂的必须是大学生啊
hahahaadouawgds 发表于 2016-1-29 11:18
妈妈,我看不懂
看得懂的必须是大学生啊
高中就可以了
LZ太牛逼了!!!
好东西,前来学习
不错 挺好用的 一会去服务器试试去
WE对我来说还是太复杂了
膜拜大神
楼主,这个好牛!!!!收藏进包了。
表示仍然看不懂233
太强大
我就用简单的指令就好了,实在不行就{:10_527:}
WE的最近几次升级使WE的功能大大提升,效率也高了N倍,LZ辛苦钻研了,加油~~~
感觉WE的作用还是太深奥了
支持下LZ,毕竟做这个教程帖子也不是很容易
好详细 就是enn不说了
WorldEdit Wiki http://wiki.sk89q.com/wiki/WorldEdit/Expression_syntax#Functions 这个网站看不了了还有没有其他的地方可以知道
原来创世神还有这么多玩法,长知识了
太强了,赞赞赞赞赞赞赞赞赞
学到了 很有用 谢谢
长知识了(好晕啊。。。)
we还是一如既往的神奇
we还是一如既往的神奇
我的服务器用无论什么we,都没法用笔刷在指定地点刷,而是总是以人为圆心开始刷