跳转至主要内容

SDF-模具目录

视觉参考: 伊尼戈·奎莱斯 — 3D 距离函数

什么是带符号距离函数(SDF)?​

一个带符号的距离函数可计算空间中任意一点到 该形状最近表面之间的距离——在内部为负值,在表面上为零, 在外部为正值。该距离将作为力曲线的输入:离表面越近, 作用力越大;距离越远,则不产生作用力。

SDF 形式由导航模块(气泡形式)使用。

一个形式由一个 primitive 以及一个 parameters-块描述:

{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}

基本形式​

原始的参数注意事项
spherer (半径)最简单的形式
ellipsoida (哈尔巴赫半径作为 vec3)近似SDF;适用于力
boxb (半轴伸长率以 vec3 表示)轴平行
rounded_boxb (半扩展), r (拐角半径)总膨胀量 = b + r
box_frameb (半扩展), e (坎滕迪克)一个盒子的金属网轮廓
planen (法线向量 vec3), h (沿...偏移 n)无穷半空间; n 必须恢复正常

胶囊和圆柱体​

原始的参数注意事项
capsulea, b (端点位置以 vec3 形式表示), r (半径)半球形盖帽
capsule_verticalh (半高), r (半径)Y轴的简写形式
capped_cylindera, b (轴端点作为 vec3), r (半径)平头端盖
capped_cylinder_verticalh (半高), r (半径)Y轴的简写形式

托鲁斯家族​

原始的参数注意事项
torusr1 (主半径), r2 (管半径)XZ平面上的环形结构
capped_torussc (方向向量 vec2), r1, r2博根; sc = (cos θ, sin θ)
linkle (半身像), r1 (环半径), r2 (管半径)链节形状

凯格尔​

原始的参数注意事项
conec (角度作为 vec2 (sin α, cos α)), h (高度)顶端被截断的无穷锥
capped_conea, b (端点为 vec3), r1 (基半径), r2 (尖端半径)截头圆柱体
rounded_conea, b (端点为 vec3), r1, r2带球形帽的截头圆柱体
solid_anglec (角度以 vec2 为单位), r (半径)被圆锥体截断的球体

奇异的形态​

原始的参数注意事项
vesica_revolveda, b (轴作为 vec3), w (Breite)Linsenform
rhombusla, lb (半对角线), h (挤出件的半高), r (Abrundung)菱形横截面
pyramidh (高度)二次基
octahedronr (内切圆半径)正八面体
hexagonal_prismr (圆周半径), h (半高)沿Y轴
triangular_prismw (半宽), h (半高)沿着Z
参数类型

Skalare 参数 (r, h, e 等)都是简单的数值。 向量参数(a, b, n) 是对象: { "x": 0.0, "y": 0.0, "z": 0.0 }. Vec2-Parameter (c, sc) 是对象: { "x": 0.707, "y": 0.707 }.

JSON示例​

库格尔:

{ "primitive": "sphere", "parameters": { "r": 0.05 } }

椭球体(在X和Z方向上更宽):

{ "primitive": "ellipsoid", "parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } } }

框:

{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }

圆角框:

{ "primitive": "rounded_box", "parameters": { "b": { "x": 0.30, "y": 0.02, "z": 0.30 }, "r": 0.01 } }

Kapsel:

{
"primitive": "capsule",
"parameters": {
"a": { "x": 0.0, "y": -0.03, "z": 0.0 },
"b": { "x": 0.0, "y": 0.03, "z": 0.0 },
"r": 0.04
}
}

平面(沿+X方向的边界):

{ "primitive": "plane", "parameters": { "n": { "x": 1.0, "y": 0.0, "z": 0.0 }, "h": 0.0 } }

环面:

{ "primitive": "torus", "parameters": { "r1": 0.08, "r2": 0.02 } }

截锥体(Frustum):

{
"primitive": "capped_cone",
"parameters": {
"a": { "x": 0.0, "y": -0.05, "z": 0.0 },
"b": { "x": 0.0, "y": 0.05, "z": 0.0 },
"r1": 0.04, "r2": 0.01
}
}

如果指定了不受支持的基元,该服务将根据 到原点的距离,采用类似球面的计算方式。