最近研究了下WorldEdit的//generate命令,发现这个简直就是一个神器,这个贴将会说明一些关于这个指令的基础用法,注意事项以及一些实例。
在此也欢迎各位进行讨论,插楼灌水适量~
第一章 基本知识
首先 以一个WE Wiki上的例子讲解这个命令的基础
这个石头的物体是用一个指令生成的【对你没看错是一个
生成需要先选择一个选区,然后输入指令
命令为 //g stone (0.75-sqrt(x^2+y^2))^2+z^2 < 0.25^2
下面讲解这个命令的组成
//g
主命令//generate的缩写
stone
石头,即生成物体所用的材料
(0.75-sqrt(x^2+y^2))^2+z^2 < 0.25^2
方程表达式,也是这个命令的核心部分
//genenrate 命令可以以一个方程表达式来生成物体,任何你可以用一个(或多个,后面会讲到)的方程来表达的物体
这个命令的语法为
//generate (-h/-r/-o) <block> <expression>
//generate : 主命令 也可写作//g 或 //gen
(-h/-r/-o) : 生成选项,不必须,3选一
-h比较重要,可以生成空心物体
-r会使用MC坐标,默认使用 -1/1 坐标,后面讲解
-o会将玩家输入命令的位置作为原点(0,0,0)生成物体,默认为选区中心)
<block> : 生成所用方块,可以是id(比如 1),也可以是方块名称(比如 stone)
<expression> : 方程式,以下重点讲解
----------------------------------------------
第二章 方程式
(0.75-sqrt(x^2+y^2))^2+z^2 < 0.25^2
这个就是使用的方程式,由于LZ学历有限,就不多做解释
但是这里要讲解写WE方程式方法及几个重点
写法
数字:按正常写,小数点用点表示,支持正负号
运算符号:
加减乘除分别为 + - * /
次方为 ^ 例: 2^2 表示2的2次方
括号:只支持圆括号
逻辑:(使用多个方程时的重点)
&& 代表逻辑与门
|| 代表逻辑或门
比较:
大于与小于: < >
小于等于:<=
大于等于:>=
等于:==
不等于:!=
其他function如 sqrt(平方根)等也能正常使用
具体列表可以看这里
http://wiki.sk89q.com/wiki/WorldEdit/Expression_syntax#Functions
写方程需要注意的地方
2x 3y 等需要写成 2*x 3*y
最后,非常重要的一个
这些方程并不是等式,它们是不等式
原因是因为WE在生成的物体是一个区域,不是一个面或一条直线
这里举一个例子
这里的是一个等式,表达了一条直线
这里的是一个不等式,表示了一个区域(蓝色部分)
WE可以识别的是不等式,这跟WE的算法有关
在生成物体时,WE会分析选择区域内的每个方块,将坐标代入计算,如果坐标满足不等式,则生成,反之则不生成
总结下来
1.WE中的运算符号和正常写法有些不同
2.只能使用不等式,不能使用等式
3.乘号不能省略
------------------------------------------
第三章 球?椭球?
了解了方法之后,现在做一个简单的应用
一个直径1的球体
大家都知道球体的方程
x^2+y^2+z^2=1
但是WE只识别不等式,所以应该写成
x^2+y^2+z^2<1
之所以是小于,因为球体表面用等式表达,用来表达内部的空间自然使用小于
加上其他的就是 //g 1 x^2+y^2+z^2<1
这里的1代表石头,可以使用其他材料
这个就是结果
你们肯定发现不对了,因为这明明是一个椭球
但是 WE确实是用生成球体的不等式生成的
原因就是选择区域不是一个正方体
这个是很重要的一个变量
WE生成物体所使用的三维空间为选择区域,但是这个三维空间的坐标界限为-1和+1,原点默认为选择区域的中心
如图所示
这3条石头代表x y z 轴, WE的x轴对应MC的x轴,WE的y轴对应MC的y轴,WE的z轴对应MC的z轴,每个坐标上界限为-1和1,3条石头的交叉点为原点
这样的后果就是不同轴的比例不是1:1:1,造成了刚才的球体被拉长成了椭球
现在我们选择了一个方形的选区,也就是说,不同轴的比例是1:1:1了
正如前面说过,一个球体出现了
总结下来就是
1.表达立体图形的内部空间要使用 <
2.生成规则图形时,选区要为正方体才会正确生成,不然会被拉长或者压扁
3.WE的3条轴与MC的相同,并不是直角坐标系内的xyz轴方向
4.每条轴上的最大值为1,最小值为-1
5.原点为选择区域的中心-
-----------------------------------
球体的方程 x^2+y^2+z^2=1
------------------------------------------
第四章 正方体
大家知道,用一个不等式大部分情况下只能生成有弧度的东西,比如球体
那像正方体有棱有角的怎么生成呢?
【别跟我提直接//set只是举个例子,有本事你用//set弄出个4面体
这里是准备好的框子
这里LZ找到的方法是,先确定正方体6个面所属的平面,然后用< > 决定区域(这里需要有些3D分析能力),找到6个不等式
然后将它们用 逻辑与门 && 连起来,意思就是找到这6个区域共有的区域,那个区域就是我们的正方体了
这里用2D的正方形举个栗子
因为WE的空间限定于-1与1之间,先放大
对了这个软件叫GeoGebra 是一个免费的作图软件
这个是我们需要的正方形 4个点为 (0.5,0.5)(-0.5,0.5)(0.5,-0.5)(-0.5,-0.5)
我们先找到它的4条边所属的直线以及表示这些直线的方程
x=0.5
x=-0.5
y=0.5
y=-0.5
然后一一转换成不等式,这里转换的是 x=0.5 因为这个不等式的区域和其他3个不等式的区域的交集为最后的正方形,所以它的区域肯定要包括那个正方形,所以不等式为 x<0.5
这样把4个方程转为不等式,它们的交集就是我们需要的正方形了~ 也就是图上最深的那部分
现在让我们回到MC
如果我们需要一个边长为1,在选区中心的正方体那么它的6个点将会是
(0.5,0.5,0.5) (0.5,-0.5,0.5) (-0.5,0.5,0.5) (0.5,0.5,-0.5) (0.5,-0.5,-0.5) (-0.5,-0.5,-0.5)
它的6个面所属的平面的方程将会是
x=0.5
x=-0.5
y=0.5
y=-0.5
z=0.5
z=-0.5
可以看出除了多出z之外没什么变化
转换成不等式
x<0.5
x>-0.5
y<0.5
y>-0.5
z<0.5
z>-0.5
这6个不等式的空间区域的交集就是那个正方体了
我们用&&表示逻辑与门,就是交集,这样就可以把6个不等式连起来
x<0.5 && x>-0.5 && y<0.5 && y>-0.5 && z<0.5 && z>-0.5
最后的指令就是
//g 1 x<0.5 && x>-0.5 && y<0.5 && y>-0.5 && z<0.5 && z>-0.5
输入命令,正方体出现了~
利用这个方法可以生成几乎任何有棱角的物体
基本步骤就是
1.找到它的所有顶点的坐标
2.找到它所有面所属的平面的方程(利用3个属于一个平面的点的坐标可以算出平面的方程)
3.将方程转化为不等式
4.将不等式写成WE的格式
5.用&&连接然后输入
关于有弧度的物体,比如球基本都是一个方程就能解决,LZ的学历也没达到那么高,这里就不再详细说明
---------------------------------
这里是一个实际的应用
4面体 Tetrahedron
图片来自维基
为了方便取坐标这里使用 stella octangula进行参考,将要生成的是黄色的那个,它的4个顶点为一个正方体8个顶点中的4个
取得的坐标为
(-1,-1,1)
(-1,1,-1)
(1,-1,-1)
(1,1,1)
通过计算得到4个面所属平面的方程
4x + 4y +4z + 4=0
-4x + 4y +4z + -4=0
-4x + 4y +-4z + 4=0
4x + 4y +-4z + -4=0
写成WE格式 这里的大于小于需要有些3D的思考能力,实在不行一个一个试
4*x + 4*y +4*z + 4>0
-4*x + 4*y +4*z -4<0
-4*x + 4*y +-4*z + 4>0
4*x + 4*y +-4*z -4<0
最后的命令
//g 1 4*x + 4*y +4*z + 4>0 &&-4*x + 4*y +4*z -4<0&&-4*x + 4*y +-4*z + 4>0&&4*x + 4*y +-4*z -4<0
生成的效果
引用:http://tieba.baidu.com/p/2714393353?pid=41908521437&cid=0#41908521437
