【问题标题】:Three.js Center 3d ModelThree.js 中心 3d 模型
【发布时间】:2019-05-19 05:27:14
【问题描述】:

这是我第一次在 stackoverflow 上写作……这几天我正在尝试使用 JavaScript 库 Three.js(实际上是版本号 r99),我正确输入了 3D 模型,但是当我看到它时加载是从后面看到的,而不是在视口上居中,我该如何解决?

代码是这样的:

<script>

var scene = new THREE.scene();

var camera = new THREE.PerspectiveCamera ( 50, window.innerWidth / window.innerHeight, 1, 1000);

camera.position.z = 15;

var render = new THREE.WebGLRenderer();
renderer.setSize ( window.InnerWidth, window.InnerHeight );
document.body.appendChild (renderer.domElement);
window.addEventListener('resize', function(){
var width = window.innerWidth;
var height = window.innerHeight;
renderer.setSize( width, height );
camera.aspect = width / height;
camera.updateProjectMatrix();
});

controls = new THREE.OrbitControls ( camera, renderer.domElement );

var loader = new THREE.ObjectLoader();
loader.load("/models/teschio.json",function (obj)
{
scene.add( obj );
});

var animate = function (){
requestAnimateFrame ( animate );
renderer.render (scene, camera);
}
animate();

</script>

这是当前的线框屏幕: actual wireframe

提前感谢您的任何回答。

【问题讨论】:

    标签: javascript three.js center viewport 3d-model


    【解决方案1】:

    类似这样的:

    var loader = new THREE.ObjectLoader();
    loader.load("/models/teschio.json",function (obj)
    {
      var box = new THREE.Box3().setFromObject( obj );
      var center = new THREE.Vector3();
      box.getCenter( center );
      obj.position.sub( center ); // center the model
      obj.rotation.y = Math.PI;   // rotate the model
      scene.add( obj );
    });
    

    【讨论】:

    • 效果很好,你救了我……非常感谢。您向我展示的这些属性如何构成 3d 对象中心?
    • @Dario THREE.Box3() 是 AABB(轴对齐边界框)。您可以从已加载的对象中设置它。然后使用.getCenter() 方法得到它的中心。然后简单地从对象的默认位置减去中心的向量。您可以阅读documentation 中的所有内容 :) 如果答案解决了您的问题,请将其标记为已接受 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2014-07-24
    • 2017-01-28
    • 2021-02-26
    相关资源
    最近更新 更多