SDF(Signed-distance-field: 有向距离场)(3): 空间划分原理(源码解释)

下面这是SDF常用的三个函数:

// intersect(求交)
vec2 mult(vec2 tA, vec2 tB) {
    if(tA.x > tB.x) return tA;
    return tB;
}
// union(合并)
vec2 add(vec2 tA, vec2 tB) {
    if(tA.x < tB.x) return tA;
    return tB;
}
// difference(差异)
vec2 subtract(vec2 tA, vec2 tB) {
    tB.x = -tB.x;
    if(tA.x > tB.x) return tA;
    return tB;
}

这三个函数用于计算一个空间点位于一个一个空间分布函数所描述的空间的"里面"还是外面,如果是"里面",那这个点所对应的空间分布函数所描述的空间的对应位置就可见。

那么,他们的原理是什么呢?

先从2D平面说起。一个2D平面,默认是无限大的,但是一条这个平面上的直线可以将它分为两个部分,也就是两个空间。如果直线定义了正方向,那么这两部分各自就有了正负空间这个称呼。

这个2D空间中的一个圆或者一个三角形,是由曲线围起来的一片区域:一个封闭空间,这时候,我们就可以断定一个2D平面上的点在这个封闭空间里面还是外面。

这里可以规定在这个区域里为负值,在其外面就为正值。

接着看3D空间。在3D空间里,原本3D空间是无限延伸的。而一个3D空间中的平面(当然也有曲面,这里先只看平面),将3D空间划分为两部分,我们都知道3D空间中的平面需要一个法线n(nx,ny,nz)来描述

可以认为法线的方向上的空间为正空间,反之为负空间。例如一个球体或者长方体,球体是个封闭空间是

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值