这是命令结构合成器,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
Structure-synth - 用于创建 3D 结构的应用程序
概要
结构合成
商品描述
Structure Synth 是一个用于从一组用户指定的创建 3D 结构的应用程序
规则。 生成的结构可以在集成的 OpenGL 查看器中查看或导出
到各种格式。 该程序的灵感来自 Chris Coyne 的 CFDG 语法,以及
Mark Lentczner 和 John Horigan 的无上下文 GUI。
状态, 转型 AND 行动
结构合成器是关于状态的。 状态描述了当前坐标系和
当前的着色模式。 坐标系决定了位置、方向和
在当前状态下绘制的所有对象的大小。
状态通过转换进行修改。 例如我们可以移动坐标系一
通过应用变换在 x 方向上的单位:{ x 1 }。 同样我们可以旋转
坐标系绕 x 轴 90 度,通过应用:{ rx 90 }。 国家是
解析时自动组合,即 { x 1 x 1 } 等于 { x 2 }。
状态可以与规则调用结合以创建操作。 { x 2 } 框是一个例子
转换后跟规则调用。 'box' 是一个内置规则。 不出意外,这
rule 在当前坐标系中绘制一个位于 (0,0,0) -> (1,1,1) 的框。
迭代 动作:
可以应用迭代操作,这是使用乘法符号完成的:
例如 3 * { x 2 } 框将等于创建三个动作:
{ x 2 } 框
{ x 4 } 框
{ x 6 } 框
颜色 转换:
与空间变换类似,也可以变换当前的
渲染颜色。 Structure Synth 使用 HSV(色调、饱和度和值)来表示
颜色 - 这可能不像 RGB 颜色模型那么熟悉,但提供了一个稍微
习惯后更直观的表示(至少有些人是这样
声明 - 就我个人而言,我仍然觉得用红色、绿色和蓝色来思考更容易
成分)。 使用“色调”、“饱和度”和
“值”运算符。
下一个示例演示了用于绘制图形的迭代操作和颜色转换
漂亮的彩色立方体:
10 * { x 1 色调 36 } 10 * { y 1 sat 0.9 } 10 * { z 1 b 0.9 } 框
这是另一个演示不同类型转换的示例:
10 * { x 2 } 框
1 * { y 2 } 10 * { x 2 rx 6 } 盒子
1 * { y 4 } 10 * { x 2 色调 9 } 框
1 * { y 6 } 10 * { x 2 s 0.9 } 框
内建的 规则:
Box 是 Structure Synth 中基元(内置规则)的一个示例。 这
其他内置规则有:Sphere、Dot、Grid、Line、Cylinder、Mesh、CylinderMesh。
MAKING 规则
自定义规则是创建复杂复杂结构的关键。 规则是
使用“规则”关键字创建。 规则的使用方式与任何内置原语相同。
规则最重要的方面是,它们能够调用自己。 看一看
在以下示例中:
R1
规则 R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } 球体
}
请注意,此规则递归调用自身。 它永远不会终止 - 然而
Structure Synth 的默认最大递归深度为 1000 次递归。 这个值可以
使用“set maxdepth xxx”命令进行更改。 另一种强制终止的方法是
使用“set maxobjects xxx”关键字,这使得 Structure Synth 可以跟踪
绘制的对象数。
添加 一些 随机性:
现在,为了让事情变得有趣,我们可能想要创建一些不那么静态的东西
- 通过添加一些随机性。 在 Structure Synth 中,这是通过创建多个
同一规则的定义:
R1
规则 R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } 球体
}
规则 R1 {
{ x 0.9 rz -6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } 球体
}
请注意,“R1”规则有两个定义。 现在,每当 Structure Synth 构建器需要
调用“R1”规则,它会随机选择一个定义。
参考
行动:
终止标准:
集 最大深度 [整数]:
在 [整数] 次迭代(代)后中断。 这也将作为一个上
所有规则的递归限制。
集 最大对象 [整数]:
在创建 [integer] 对象后,构造终止。
其他:
集 种子 [整数]:
允许您设置随机种子。 这使得复制创作成为可能。
集 背景 [颜色]:
允许您设置背景颜色。 颜色被指定为解析的文本字符串
使用 Qt 的颜色解析,允许标准的 HTML RGB 规范(例如#F00
或#FF0000),还有SVG 关键字名称(例如red 甚至lightgoldenrodyellow)。
违反的规则 修饰符:
md / 最大深度 [整数]:
规则退休。设置规则的最大递归。 规则不会执行
达到此限制后的任何操作。
md / 最大深度 [整数] > 【规则名称】:
带有替换的规则退休。设置规则的最大递归。 后
已达到此限制 [rulename] 将执行此规则。
w / 重量 [漂浮]:
不明确的规则。如果定义了多个同名规则,则随机生成一个
根据此处指定的权重选择定义。 如果没有重量
指定,使用默认权重 1。
转换:
几何变换:
x [漂浮]:
X 轴平移。 float 参数是以本地单位为单位测量的偏移量
坐标系。
y [漂浮]:
Y 轴平移。 如上。
z [漂浮]:
Z 轴平移。 如上。
rx [漂浮]:
绕 x 轴旋转。 'float' 参数是以度为单位指定的角度。
旋转轴以局部坐标系中的单位立方体为中心:即
是旋转轴包含从 (0, 0.5, 0.5) -> (1, 0.5, 0.5) 的线段。
ry [漂浮]:
绕 y 轴旋转。 如上。
rz [漂浮]:
绕 z 轴旋转。 如上。
s [漂浮]:
调整局部坐标系的大小。 请注意,调整大小的中心是
位于本地系统中单位立方体的中心(在 (0.5,0.5,0.5))。
s [f1] [f2] [f3]:
调整局部坐标系的大小。 如上所述,但每个都有单独的比例
尺寸。
m [f1] ... [f9]:
将指定的 3x3 旋转矩阵应用于变换矩阵
当前状态。 关于参数顺序:[f1],[f2],[f3] 定义了第一行
矩阵。
外汇: 围绕 x 轴镜像局部坐标系。 如上镜像平面
以立方体为中心。
飞: 围绕 y 轴镜像局部坐标系。
fz: 围绕 z 轴镜像局部坐标系。
色彩空间变换:
h / 色调 [漂浮]:
将“浮动”值添加到当前状态的色调颜色参数。 色调是
从 0 到 360 测量并循环换行 - 即 400 的色调等于
40.
周六 [漂浮]:
将 'float' 值与当前的饱和度颜色参数相乘
状态。 饱和度是从 0 到 1 测量的,并被限制在这个区间(即
大于 1 的值设置为 1)。
b / 亮度 [漂浮]:
将“浮动”值与当前的亮度颜色参数相乘
状态。 亮度的测量范围为 0 到 1,并被限制在这个区间内。 注意
该参数有时称为“V”或“值”(颜色空间通常是
称为HSV)。
a / 阿尔法 [漂浮]:
将 'float' 值与当前状态的 alpha 颜色参数相乘。
Alpha 从 0 到 1 测量并被限制在这个区间。 一个 alpha 值
XNUMX 是完全透明的,而 alpha 值为 XNUMX 是完全不透明的。
颜色 [颜色]:
此命令将颜色设置为绝对颜色(大多数其他转换是
当前状态的相对修改)。 颜色被指定为文本字符串
使用 Qt 的颜色解析进行解析,允许使用标准的 HTML RGB 规范
(例如#F00 或#FF0000),还有SVG 关键字名称(例如红色或什至
浅金黄色)。
绘图基元:
箱: 实心盒
网格: 线框框
球:
圆形的东西(到目前为止,这个原语有一些问题——例如椭圆体是
不工作。)
线: 沿 x 轴,以 y,z 平面为中心。
观点: 以坐标系为中心。
三角形:
创建自定义多边形。 指定坐标如下:
三角形[0,0,0;1,0,0;0.5,0.5,0.5]
网: 原型网格
圆筒:
对称轴将是当前的 x 轴。 [未实现]
管: 多边形圆柱体(将在坐标系变换时平滑绘制)。
[未实现]
预处理器 命令:
#定义 变量名 值:
将每次出现的 'varname' 替换为 'value'。 值可能包含空格。
对于 语境 免费 / 差价合约 用户:
Structure Synth 中的 EisenScript 语法与 CFDG 有很多共同点。
然而,有一些重要的区别:
语境 灵敏度:
CFDG 脚本可以被视为一种语法,其中产生式规则是
在规则之间进行选择时,独立于它们的上下文 - 或者换一种说法
CFDG 对系统的历史一无所知。 这个“无上下文”
CFDG 的属性在 EisenScript 中被故意省略,只是为了实用
原因:有些结构在没有某种方法的情况下很难创建
在一定次数的递归后更改规则。
这款 '起始规则' 声明:
在 CFDG startrules 中被明确指定。 在 EisenScript 中,一个更通用的
使用方法:可以在规则定义中使用的语句,也可以是
用于顶级作用域,所以为了指定一个启动规则,只需编写
规则名称。
终止 标准:
当生成的对象太小时,CFDG 递归会自动终止
可见。 这是一个非常优雅的解决方案,但在一个
动态 3D 世界,用户可以在其中使用相机移动和缩放。 几个选项
存在于 Structure Synth 中以终止渲染。
转型 订购:
在 CFDG 转换(CFDG 称为调整)中,大括号中是
不按出现的顺序应用,如果相同的多次变换
类型,实际只执行最后一个。 对于变换
另一方面,CFDG 中的方括号的顺序很重要。 在结构中
合成转换顺序总是很重要的:应用转换
从最右边的开始。
例
下面是一个 EisenScript 示例:
/*
样品环。
*/
设置最大深度 100
r1
36 * { x -2 ry 10 } r1
规则 r1 最大深度 10 {
2 * { y -1 } 3 * { rz 15 x 1 b 0.9 h -20 } r2
{ 是 1 小时 12 一个 0.9 接收 36 } r1
}
规则 r2 {
{ s 0.9 0.1 1.1 Hue 10 } box // 注释
}
规则 r2 w 2 {
{ 色调 113 sat 19 a 23 s 0.1 0.9 1.1 } 框
}
使用 onworks.net 服务在线使用结构合成器