当前位置: 首页 > 知识库问答 >
问题:

three.js - threejs如何把obj模型设置到屏幕中心?

宁兴修
2024-12-05

threejs加载obj模型 然后缩放1000被后能看到模型,但是特别特别小,稍微旋转一下就找不到了,如何调整,
希望让模型显示在屏幕中间,然后坐标轴在模型上,现在感觉模型像是在太阳系的冥王星这个位置,太远了

共有1个答案

章景同
2024-12-05

思路

1.加载模型并计算边界盒: 使用 THREE.Box3 对象来计算模型的边界盒,并获取模型的中心点和尺寸。

const loader = new THREE.OBJLoader();
loader.load('path/to/model.obj', (obj) => {
    const box = new THREE.Box3().setFromObject(obj);
    const center = box.getCenter(new THREE.Vector3());
    const size = box.getSize(new THREE.Vector3());

    // 将模型移动到原点
    obj.position.sub(center);

    // 计算缩放比例
    const maxDim = Math.max(size.x, size.y, size.z);
    const scale = 1 / maxDim;
    obj.scale.set(scale, scale, scale);

    // 将模型添加到场景中
    scene.add(obj);

    // 调整相机位置
    const cameraDistance = maxDim * 2;
    camera.position.set(0, 0, cameraDistance);
    camera.lookAt(0, 0, 0);
});

2.调整相机和控件: 确保相机和控件的设置能够适应模型的显示。

const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.target.set(0, 0, 0);
controls.update();

3.渲染循环: 在渲染循环中更新控件。

function animate() {
    requestAnimationFrame(animate);
    controls.update();
    renderer.render(scene, camera);
}
animate();

完整代码

// 加载OBJ模型并调整位置和缩放
const loader = new THREE.OBJLoader();
loader.load('path/to/model.obj', (obj) => {
    const box = new THREE.Box3().setFromObject(obj);
    const center = box.getCenter(new THREE.Vector3());
    const size = box.getSize(new THREE.Vector3());

    // 将模型移动到原点
    obj.position.sub(center);

    // 计算缩放比例
    const maxDim = Math.max(size.x, size.y, size.z);
    const scale = 1 / maxDim;
    obj.scale.set(scale, scale, scale);

    // 将模型添加到场景中
    scene.add(obj);

    // 调整相机位置
    const cameraDistance = maxDim * 2;
    camera.position.set(0, 0, cameraDistance);
    camera.lookAt(0, 0, 0);
});

// 设置相机和控件
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.target.set(0, 0, 0);
controls.update();

// 渲染循环
function animate() {
    requestAnimationFrame(animate);
    controls.update();
    renderer.render(scene, camera);
}
animate();
 类似资料:
  • null 这是这个问题的视频 下面是我如何切换屏幕的代码: 从游戏第一次打开到主菜单: GamesCreen:

  • 问题内容: 请看下面的代码。我只发布代码的重要部分。 activity_game.xml Game.java OnSwipTouchListener.java 注意-我不拥有此类代码。它由另一位SO成员编写。 现在,我正在尝试使“整个活动”处于启用状态。请查看以了解我的操作方式。但是问题是,它对任何触摸事件都没有反应!代码没有错,因为我通过将侦听器设置为来使用了touch事件。 我试图使整个活动处

  • 我有一个大小的图像(宽度=1444*高度=760)。现在我想在imageview中显示它,以设置imageview的重量和高度,我为dimens.xml创建不同的文件,如: dimens.xml dimens.xml(hdpi) dimens.xml(mdpi) dimens.xml(xhdpi) dimens.xml(xxhdpi) dimens.xml(xxxhdpi) dimens.xml(

  • 问题内容: 如何从一个活动屏幕导航到另一个活动屏幕?在第一个屏幕中,我有一个按钮,如果我单击该按钮,则必须移至另一个“活动”屏幕。 问题答案:

  • 我正在学习Flutter,我从最基本的开始。我没有使用MaterialApp。设置整个屏幕背景颜色的好方法是什么? 以下是我目前掌握的情况: 我的一些问题是: 设置背景色的基本方法是什么 谢谢你的帮助!

  • 维护字体和颜色样式的最佳实践是什么。我制作了一个colors.xml文件,用于更改按钮等单独元素的颜色,但我不确定Android希望开发人员如何组织他们的样式。 例如,我希望所有屏幕都有相同的背景色。我该怎么做?我是否需要为每个活动布局xml指定一些内容?还是其他地方?我该如何完成它?

  • 调整屏幕的亮度 导航至 Settings(设定)应用程式,找到并轻触 Display(显示)。 轻触Adjust brightness(调节屏幕亮度)。 选择并轻触所需的亮度。 您可以通过调暗手表屏幕的亮度来延长电池的使用寿命。 打开/关闭 Always-on screen(保持启用屏幕) 您可选择是否想让屏幕暗淡地显示时间,或未使用手表时将屏幕完全关闭。 通过 M600 更改设定 导航至设置应用

  • Threejs所谓模型,如果你使用过三维软件,就是你三维软件中常说的三维模型,当然了,对于大多数前端程序员而言,不了解计算机图形学的情况下,没有使用过任何三维软件的情况下,并没有三维模型的概念。从Three.js角度来说,Threejs模型对象就是由Threejs几何体Geometry和Threejs材质Material构成,材质主要设置三维模型的颜色等外观样式,几何体主要是通过顶点坐标数据表达三