Javascript Threejs:如何挤出球体的单个面?

Javascript Threejs:如何挤出球体的单个面?,javascript,3d,three.js,Javascript,3d,Three.js,我想从Three.js中的球体挤出一个面: 选择面: 挤出面: 这在Three.js中可能吗?怎么做 我没有真正的球体,而是二十面体几何。我想应该是一样的。这是我的目标: earth = new THREE.Mesh(new THREE.IcosahedronGeometry(80, 2), m_earth); scene.add(earth); 由于地球物体有一个.geometry.faces数组,我想我可以用它们来操纵这个物体。因为我对Three.js还很陌生,所以我不知道如何选择和操

我想从Three.js中的球体挤出一个面:

选择面:

挤出面:

这在Three.js中可能吗?怎么做

我没有真正的球体,而是二十面体几何。我想应该是一样的。这是我的目标:

earth = new THREE.Mesh(new THREE.IcosahedronGeometry(80, 2), m_earth);
scene.add(earth);
由于地球物体有一个
.geometry.faces
数组,我想我可以用它们来操纵这个物体。因为我对Three.js还很陌生,所以我不知道如何选择和操作它

谢谢你的帮助


欧元dit:我不希望用户能够选择或操纵人脸。我只想在three.js代码中向内挤出二十面体几何的一个特定面。

你在写这个问题时付出了很多努力,这是一件非常好的事情,但它太宽泛了。选择面是一个单独的问题,用鼠标控制面是一个单独的问题,手动操作几何体进行拉伸(实际上使用geometry.faces等)需要相当多的努力,如果仍然需要,还需要一个或两个问题。一般来说,几何操作变得非常困难,而且速度非常快,不适合简单的问答格式。好吧,那么它的公式化不够好。我不想用鼠标选择它,也不想手动操作它。我只想用代码挤出一个面,但我不知道如何…
var geometry=new THREE.icoshedronbuffergeometry(5,0);geometry.attributes.position.array[45]*=0.8;//重复[45]。。。[53]。
@WestLangley很好的提示(很好地使用了球体的正常属性),但请注意(对于OP/future读者,我知道你知道你的东西:D),这样的代码只是移动面,而不是在3D建模意义上挤压面。您必须为拉伸面的侧面添加额外的面。请注意,在这种情况下,“面”实际上由两个面(三角形)组成。为了简化此任务,3D建模应用程序比现成的three.js包含更多关于模型的信息,如高阶多边形、边以及这些边上的连接。在three.js生成的二十面体几何中,解决两个共面三角形的特殊情况是完全可能的,如果没有这一切,但最终会编写一段代码,而这段代码完全不能扩展到更一般的情况,也没有什么教育价值。也就是说,今天晚些时候我会发布代码。