gpt4 book ai didi

graphics - 计算变换球体的 AABB

转载 作者:行者123 更新时间:2023-12-04 00:57:33 30 4
gpt4 key购买 nike

我有一个在对象空间中由中心点和半径表示的球体。球体通过变换矩阵变换到世界空间,变换矩阵可能包括缩放、旋转和平移。我需要为世界空间中的球体构建一个轴对齐的边界框,但我不知道该怎么做。

这是我目前的方法,适用于某些情况:

public void computeBoundingBox() {
// center is the middle of the sphere
// averagePosition is the middle of the AABB
// getObjToWorldTransform() is a matrix from obj to world space
getObjToWorldTransform().rightMultiply(center, averagePosition);

Point3 onSphere = new Point3(center);
onSphere.scaleAdd(radius, new Vector3(1, 1, 1));
getObjToWorldTransform().rightMultiply(onSphere);

// but how do you know that the transformed radius is uniform?
double transformedRadius = onSphere.distance(averagePosition);

// maxBound is the upper limit of the AABB
maxBound.set(averagePosition);
maxBound.scaleAdd(transformedRadius, new Vector3(1, 1, 1));

// minBound is the lower limit of the AABB
minBound.set(averagePosition);
minBound.scaleAdd(transformedRadius, new Vector3(-1,-1,-1));
}

但是,我怀疑这是否总是有效。它不应该因非均匀缩放而失败吗?

最佳答案

通常,变换后的球体将是某种椭球体。为它获得一个精确的边界框并不难;如果你不想通过所有的数学:

  • 请注意 M是您的变换矩阵(缩放、旋转、平移等)
  • 阅读 S 的定义下面
  • 计算 R如最后所描述的
  • 计算 x , y , 和 z基于 R 的边界如最后所述。


  • 一般的圆锥曲线(包括球体及其变换)可以表示为对称的 4x4 矩阵:齐次点 p在圆锥内 Sp^t S p < 0 .用矩阵 M 变换你的空间会变换 S 矩阵如下(下面的约定是点是列向量):
    A unit-radius sphere about the origin is represented by:
    S = [ 1 0 0 0 ]
    [ 0 1 0 0 ]
    [ 0 0 1 0 ]
    [ 0 0 0 -1 ]

    point p is on the conic surface when:
    0 = p^t S p
    = p^t M^t M^t^-1 S M^-1 M p
    = (M p)^t (M^-1^t S M^-1) (M p)

    transformed point (M p) should preserve incidence
    -> conic S transformed by matrix M is: (M^-1^t S M^-1)

    圆锥曲线的对偶适用于平面而不是点,由 S 的倒数表示;对于平面 q(表示为行向量):
    plane q is tangent to the conic when:
    0 = q S^-1 q^t
    = q M^-1 M S^-1 M^t M^t^-1 q^t
    = (q M^-1) (M S^-1 M^t) (q M^-1)^t

    transformed plane (q M^-1) should preserve incidence
    -> dual conic transformed by matrix M is: (M S^-1 M^t)

    因此,您正在寻找与变换的圆锥曲线相切的轴对齐平面:
    let (M S^-1 M^t) = R = [ r11 r12 r13 r14 ]  (note that R is symmetric: R=R^t)
    [ r12 r22 r23 r24 ]
    [ r13 r23 r33 r34 ]
    [ r14 r24 r34 r44 ]

    axis-aligned planes are:
    xy planes: [ 0 0 1 -z ]
    xz planes: [ 0 1 0 -y ]
    yz planes: [ 1 0 0 -x ]

    要找到与 R 相切的 xy 对齐平面:
      [0 0 1 -z] R [ 0 ] = r33 - 2 r34 z + r44 z^2 = 0
    [ 0 ]
    [ 1 ]
    [-z ]

    so, z = ( 2 r34 +/- sqrt(4 r34^2 - 4 r44 r33) ) / ( 2 r44 )
    = (r34 +/- sqrt(r34^2 - r44 r33) ) / r44

    类似地,对于 xz 对齐的平面:
          y = (r24 +/- sqrt(r24^2 - r44 r22) ) / r44

    和 yz 对齐的平面:
          x = (r14 +/- sqrt(r14^2 - r44 r11) ) / r44

    这为您提供了变换球体的精确边界框。

    关于graphics - 计算变换球体的 AABB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368961/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com