SDF 形状目录
可视化参考: 伊尼戈·奎莱斯 — 3D 距离函数
什么是 SDF?
*有符号距离函数(SDF)*返回空间中任意一点到形状最近表面的距离——内部为负,表面上为零, 外部为正。该距离将作为力曲线的输入:离表面越近,力越大;离得越远,力越小,直至为零。
SDF形状由导航模块使用(气泡形状)。
形状通过一个 primitive 和一个 parameters 块的描述:
{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}
基本形状
| 图元 | 参数 | 说明 |
|---|---|---|
sphere | r(半径) | 最简单的形状 |
ellipsoid | a(以 vec3 表示的半轴半径) | 近似 SDF;对力的计算较为准确 |
box | b(以 vec3 表示的半边长) | 与坐标轴对齐 |
rounded_box | b(半边长)、r(圆角半径) | 总尺寸 = b + r |
box_frame | b(半边长)、e(边厚) | 长方体的线框轮廓 |
plane | n(法向量,vec3)、h(沿 n (方向的偏移) | 无限半空间;n 必须已归一化 |
胶囊体与圆柱体
| 图元 | 参数 | 说明 |
|---|---|---|
capsule | a、b(端点位置,vec3)、r(半径) | 半球形端盖 |
capsule_vertical | h(半高)、r(半径) | Y 轴的简写形式 |
capped_cylinder | a、b(轴端点,vec3)、r(半径) | 平面端盖 |
capped_cylinder_vertical | h(半高)、r(半径) | Y 轴的简写形式 |
环面系列
| 图元 | 参数 | 说明 |
|---|---|---|
torus | r1(主半径)、r2(管半径) | XZ 平面内的甜甜圈形状 |
capped_torus | sc(帽尖方向,vec2)、r1、r2 | 圆弧;sc = (cos θ, sin θ) |
link | le(半长)、r1(环半径)、r2(管半径) | 链环形状 |
圆锥体
| 图元 | 参数 | 说明 |
|---|---|---|
cone | c(角度,vec2 (sin α, cos α))、h(高度) | 在顶点处截断的无限圆锥 |
capped_cone | a、b(端点,vec3)、r1(底面半径)、r2(顶面半径) | 圆台 |
rounded_cone | a、b(端点,vec3)、r1、r2 | 带球形端盖的圆台 |
solid_angle | c(角度,vec2)、r(半径) | 被圆锥截取的球体 |
特殊形状
| 图元 | 参数 | 说明 |
|---|---|---|
vesica_revolved | a、b(轴,vec3)、w(宽度) | 透镜状 |
rhombus | la、lb(半对角线)、h(拉伸半高)、r(圆角) | 菱形截面 |
pyramid | h(高度) | 方形底面 |
octahedron | r(内切半径) | 正八面体 |
hexagonal_prism | r(外接圆半径)、h(半高) | 沿 Y 轴 |
triangular_prism | w(半宽)、h(半高) | 沿 Z 轴 |
参数类型
标量参数(r、h、e 等)为普通数值。
向量参数(a、b、n)作为对象:{ "x": 0.0, "y": 0.0, "z": 0.0 }。
Vec2 参数(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 } }
胶囊体:
{
"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 } }
圆台(截锥):
{
"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
}
}
如果提供了不受支持的图元,服务将回退为 基于原点距离的类球形计算。