【问题标题】:Get the dimensions(sizes) of a 3d model with js用js获取3d模型的尺寸(大小)
【发布时间】:2018-08-01 13:20:07
【问题描述】:

我实际上在使用 three.js 进行 AR 项目,并且我处理一些 3d 模型,但我对模型的大小有一些问题。因为我希望它们都具有相同的尺寸,所以我需要为所有模型设置相同的尺寸。我首先尝试通过使用 boundingbox 和 boundingsphere 来解决这个问题,但它不起作用。

那么我如何获取尺寸以及如何设置尺寸?

【问题讨论】:

  • 你可以scale你的对象,如果你知道它的大小和想要的大小。
  • 你是对的!谢谢:)!

标签: javascript three.js 3d augmented-reality


【解决方案1】:

var size = new THREE.Box3().setFromObject( yourObject ).getSize(new THREE.Vector3())

【讨论】:

  • 谢谢,用这段代码我可以得到尺寸,但我如何设置尺寸?因为我的 3d 模型的大小不受这些变化的影响:/
  • 你必须采用那个尺寸..找到 .x、.y、.z 的最大值。然后做 yourObject.scale.multiplyScalar(desired size / the max) .. 那应该将您的模型缩放到您想要的大小。那有意义吗? (multiplyScalar 只是表示将 x,y,z 乘以某个数字)
  • 如何找到最大值?
  • Math.max(Math.abs(size.x),Math.abs(size.y),Math.abs(size.z))
【解决方案2】:

我需要别的东西,因为 manthrax 的代码很有趣,但有一些限制.. 以这段代码为例:

andy.scale.set(0.011, 0.011, 0.011);
                                andy.rotation.set(0, 0, 0);
                                andy.position.set(0,0,0);
                                var size = new THREE.Box3().setFromObject(andy).getSize(new THREE.Vector3())
                                console.log(size);

                                function moy(vect){
                                    return ((vect.x+vect.y+vect.z)/3);;
                                }

                                console.log(moy(size));

                                andy.scale.set(0.030, 0.030, 0.030);
                                console.log(moy(size));

如果我想改变“大小”的值,我该怎么做?

PS:andy 是我的 3d 模型

我解决了,我创建了我自己的box3:

                        andy.scale.set(0.011, 0.011, 0.011);
                        andy.rotation.set(0, 0, 0);
                        andy.position.set(0,0,0);
                        var box3d = new THREE.Box3();
                        var size = box3d.setFromObject(andy).getSize(new THREE.Vector3())
                        console.log(size);

                        function moy(vect){
                            return ((vect.x+vect.y+vect.z)/3);;
                        }

                        console.log(moy(size));

                        andy.scale.set(0.030, 0.030, 0.030);
                        box3d.setFromObject(andy).getSize(size);
                        console.log(moy(size));

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 2018-09-20
    • 2013-07-20
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多