欢迎光临散文网 会员登陆 & 注册

WorldEdit的//g指令-高级用法

2018-02-20 15:05 作者:YueLeng_M  | 我要投稿


本篇教程主要讲解的是//g在生成形状时对坐标系的旋转、伸缩的变换操作,及对方块数据值的高级应用。

因此本篇教程是建立在会基础使用//g指令的基础上的,如果你还不会使用//g指令可以先到MCBBS的教程上学习。(最下方相关链接)

变量

在//g中默认有一些变量:x、y、z、data、type。

你也可以设定一个自己的变量

例:r=sqrt(x^2+y^2) 这样你就获得了一个变量 r ,它的值还可以根据x、y的值的不同而改变。

伸缩变换

伸缩和平移

利用伸缩变换我们可以对坐标系的某个或几个轴进行伸长或缩短。

比如我们可以将一个圆压成一个椭圆、同理也可以将一个球压缩为椭球。

举例:

//g -c stone x^2+z^2<=16^2&&y==0

这是一个在y=0平面上以16为半径的圆。

当我们对X轴进行压缩可以得到:

//g -c planks (x=2*x);x^2+z^2<=16^2&&y==1

这是一个y=1平面上的半长轴长为16,半短轴长为8的椭圆。

可以看到我们的指令只多了一个 (x=2*x); 这一部分他的作用是让X坐标都缩小到原来的1/2。

我们也可以同时改变多个轴,比如我们可以同时再加入 (y=y-5); 这样整个图形就会向y轴正方向上平移5个单位。

这时部分玩家可能已经意识到了,这样的变换是有顺序的,也就是对于同一个轴的变换,先平移再伸缩先伸缩再平移是不一样的。

也可能有观众还不明白,这里先卖个关子,讲一下变换的合并,可以有助于顺序的理解。

对于 (x=x+5);(x=2*x); 这样对同一个轴多长变换的式子我们可以对其进行合并,上述的式子可以合并为 (x=2*x+10); 也就是遵循从左到右的变换顺序,可以将上一个式子的变换带入下一个式子。即(x=2*(x+5)); 。

因此变换的顺序就显现出来了。

 (x=x+5);(x=2*x); 变为 (x=2*x+10); 

 (x=2*x);(x=x+5); 变为 (x=2*x+5);

旋转变换

与伸缩变换的格式差不多,旋转变换的格式是 rotate(轴1, 轴2, 弧度);

这里的 轴1 和 轴2 是x、y、z中不同的两个,顺序无所谓,其作用是标记一个旋转的平面。

例如:rotate(x,y,pi/4); 的意思是将xy平面绕z轴旋转45°,至于旋转的方向可以记为:逆着旋转轴的正方向看,以顺时针旋转。

图例://g -h -c stone rotate(x,y,pi/4);(20-sqrt(x^2+z^2))^2+y^2<5^2

同样你也可以旋转多次,先绕z轴转,再绕y轴转……

于是又出现了顺序难题——旋转变换与伸缩变换之间的影响

这里举例两个操作:

  1. 顺时针旋转90°

  2. 向上平移3格

情况①:先旋转后平移。

情况②:先平移后旋转。

红色为变换前,蓝色为情况①,绿色为情况②

可以看到,旋转的结果虽然相同,但最终位置截然不同。

无论是哪一种变换其直接影响的是内部的坐标系。因此对于接下来附加的坐标判断语句也有影响。

根据坐标的数据值变化

我们可以用 data=(number); 来设定方块的数据值,也可以利用判断语句来玩点花样。

例:

//g -h -c wool data=(y<0?0:1);(20-sqrt(x^2+z^2))^2+y^2<5^2


同样变换之间会收到影响


//g -h -c wool data=(y<0?0:1);rotate(x,y,pi/4);(20-sqrt(x^2+z^2))^2+y^2<5^2
//g -h -c wool rotate(x,y,pi/4);data=(y<0?0:1);(20-sqrt(x^2+z^2))^2+y^2<5^2

还有一个 type=(); 可以供我们使用

例:

//g -h -c wool type=(y<0?42:57);(20-sqrt(x^2+z^2))^2+y^2<5^2


注:此时指令中原本的羊毛并没有显现出来,这是因为在判断语句对选区内的全部方块总会返回true或false,因此不会有空位置留给羊毛。

同样判断语句内可以使用逻辑符号连接,例:type=(x<0||z<0?42:57);

应用

部分来自官方wiki

//g -h -c 35:14 rotate(x,z,y*pi/32);(x=x+17);(z=0.7*z);x^2+z^2<8^2

//g -h -c 35:15 rotate(x,z,y*pi/32);(x=x-17);(z=0.7*z);x^2+z^2<8^2
//g -h log (0.5+sin(atan2(x,z)*8)*0.2)*(sqrt(x*x+z*z)/0.5)^(-2)-1.2 < y
//g wool data=(32+15/2/pi*atan2(x,y))%16; (0.75-sqrt(x^2+y^2))^2+z^2 < 0.25^2

相关链接

  • //generate 指令研究基础 http://www.mcbbs.net/thread-535283-1-1.html

  • 官方wiki //generate页面 http://wiki.sk89q.com/wiki/WorldEdit/Generation#Arbitrary_shapes

WorldEdit的//g指令-高级用法的评论 (共 条)

分享到微博请遵守国家法律