在按钮上旋转 3D 对象单击 Three.js

深渊

当用户单击以下按钮时,我必须旋转一个立方体:左、右、前和后。当用户单击左侧时,立方体应该旋转,使其左侧位于相机前面。它是一种类似建筑物的结构,用户希望从四个方向看到建筑物。

请查看示例小提琴(评论中给出的链接)

刹车盘

好吧,有几件事:

  1. 您正在使用面法线来确定方向。但是当您手动设置几何体时,面法线尚未设置。所以在你推完所有的脸之后,你需要调用

    geo.computeFaceNormals();
    
  2. 我不知道为什么,但你把每张脸都加了两次。可能,您想从两侧看到面孔。为此,请DoubleSide在您的材料定义中指定

    new THREE.MeshPhongMaterial({ color: 0x6a4bea, side: THREE.DoubleSide }),
    

    您的方法为建筑物的一侧产生了 2 个不同的法线。例如,你有2面标有right正常(0,0,1)和2面标有right正常(0,0,-1),不说清楚在哪个方向建筑物的右侧壁面对。当然,如果手动设置面,则需要注意索引顺序,因此所有面都面向“外部”。

  3. 现在,有了正确的法线,我们就能够确定用户应该从哪里看建筑物的方向或位置。我没有旋转建筑物,而是重新定位了cameracontrols.target

    var vector = selectedFace.normal.clone();
    var center = myMesh.geometry.boundingSphere.center.clone();
    
    var camPos = new THREE.Vector3().addVectors(center, vector.setLength(50));
    
    camera.position.copy(camPos);
    controls.target.copy(center);
    

    (距离也可以根据物体的大小动态确定。)

这是更新的、有效的 JSFiddle:https ://jsfiddle.net/0z3z6y7w/80/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在three.js中绕其y轴旋转3D对象

THREE.js-旋转旋转3D球

A-Frame - Raycast Three.JS 3D 对象

three.js以相同的视角显示3d对象

在Three.js中链接3d对象

如何围绕Three.js工作空间中的随机3d对象/网格/ 3d线的轴线旋转网格组?

实现单击和拖动以旋转3D对象-vue.js

我正在尝试将(THREE.mesh)3d对象围绕已经在轴上旋转的另一个对象旋转。有指针吗?

在Three.js中任意位置的特定轴上旋转对象-包括网格外部

使用three.js从2D旋转到3D

三种js对象3D旋转

逐步“显示” Three.js中的3d对象-我这样做对吗?

在three.js中概述一个3d对象

如何将图像转换为3D对象-three.js

初始加载时,在Three.JS Canvas中适合3D对象(Collada文件)

拖动以更改Three.js场景中3D模型对象的位置

如何在three.js中的3D对象上放置透明的颜色蒙版?

Three.JS如何为场景中导入的3D对象设置动画?

在three.js / Autodesk 3D Viewer(Autodesk Forge Viewer)中调整对象的大小

在 Three.js 中为 3D 对象的特定部分添加事件侦听器

如何使用three.js从随机点制作3D对象?

如何沿其在three.js中指向的方向向前移动3d对象

在球体上旋转玩家相机(javascript/three.js)

使用Three.js在本地轴上旋转相机X

在一个3D对象OpenGL ES 2.0上旋转后更新视图

如何在对象上旋转THREE.PerspectiveCamera

在three.js中旋转对象

Three.js 3D多维数据集在重新初始化时旋转得越来越快

使用鼠标位置在3D空间中选择对象(THREE.js R99)