从最小最大向量和Matrix3x4计算边界框

时间:2020-07-21 09:47:27

标签: javascript math 3d geometry

我有两个Vector3实例,它们代表模型的尺寸(最小和最大矢量)。 我有一个来自Matrix3x4的对象,该对象由4个Vector3实例(向右,向前,向上矢量和位置)组成;

我正在尝试使用上面的值绘制边界框,但似乎无法计算世界上每个点的绝对位置。这是我的盒子类:

export default class Box {
    constructor(min, max) {
        this._position = undefined;
        this.heading = 0;
        this.min = min;
        this.max = max;

        this.lines = ['AB', 'AD', 'AE', 'BC', 'BF', 'CD', 'CG', 'DH', 'EH', 'EF', 'FG', 'GH'];

        this.points = {
            A: this.min,
            B: new Vector3(this.min.x, this.max.y, this.min.z),
            C: new Vector3(this.min.x, this.max.y, this.max.z),
            D: new Vector3(this.min.x, this.min.y, this.max.z),
            E: new Vector3(this.max.x, this.min.y, this.min.z),
            F: new Vector3(this.max.x, this.max.y, this.min.z),
            G: this.max,
            H: new Vector3(this.max.x, this.min.y, this.max.z),
        };

        this.worldPoints = {};
    }

    set position(pos) {
        this._position = new Vector3(pos.x, pos.y, pos.z);
    }

    get position() {
        return this._position;
    }

    calculateWorldPoints() {
        if (this.position) {
            for (const point in this.points) {
                this.worldPoints[point] = this.position.add(this.points[point]);
            }
        }

        return this;
    }

    getLines() {
        const lines = [];

        for (const line of this.lines) {
            lines.push({
                start: this.worldPoints[line.charAt(0)],
                end: this.worldPoints[line.charAt(1)],
            });
        }

        return lines;
    }
}

我想要实现类似下图的效果,其中边框随对象旋转:

enter image description here

编辑:

我设法在模型周围显示了边界框,但仍然无法了解如何旋转它。我需要旋转一个角度(以度为单位)。目前,它始终指向0度角。

这是当前外观:

enter image description here

0 个答案:

没有答案