Javascript 在Three.js中控制自定义几何图形的缩放
我有一个自定义对象,它是两个网格的减法。此减法创建类似于帧的对象Javascript 在Three.js中控制自定义几何图形的缩放,javascript,three.js,3d,csg,threecsg,Javascript,Three.js,3d,Csg,Threecsg,我有一个自定义对象,它是两个网格的减法。此减法创建类似于帧的对象 createFrame(x,y,z){ const frameMesh=new THREE.Mesh(new THREE.BoxGeometry(1,1,1)); frameMesh.scale.set(x,y,z); const smallerFrameMesh=frameMesh.clone() smallerFrameMesh.scale.set(x-4,y-4,z); //减法 const frameGeometry=fr
createFrame(x,y,z){
const frameMesh=new THREE.Mesh(new THREE.BoxGeometry(1,1,1));
frameMesh.scale.set(x,y,z);
const smallerFrameMesh=frameMesh.clone()
smallerFrameMesh.scale.set(x-4,y-4,z);
//减法
const frameGeometry=fromCSG(toCSG(frameGeometry).subtract(toCSG(smallerFrameMesh));
const frame=new THREE.Mesh(frameGeometry,new THREE.MeshStandardMaterial(0xffffff));
frame.geometry.computeVertexNormals();
frame.userData.isFrame=true;
返回框;
}
现在,每当大小发生变化时,我都会动态缩放此帧。问题是使用.scale
只能使对象拉伸,而我希望它保持帧的宽度(在本例中为4)
是否可以指定对象应如何缩放(如编写我自己的缩放函数实现),或者是否有一个属性/方法可用于保留“空白”与“对象”部分?提前感谢。通过将每个顶点的位置相乘,scale()
方法可以对每个顶点进行相等的变换。因此,如果帧的内边缘位于x=6
,而外边缘位于x=10
,则将其缩放2将得到内:x=12
,外:x=20
,使帧宽8个单位
为了缓解这种情况,您可以将框架分为4个不同的框:顶部、底部、左侧和右侧。如果要在x轴上缩放,可以拉伸顶部和底部,只需移动左右边缘即可。这样可以保持厚度为4:
如果要在y轴上缩放,可以进行反转。您可以拉伸左右框,然后移动顶部和底部,使它们对齐。这就是我想实现的。问题是,我有多个这样的“帧”(比如说至少20个),需要缩放,每个帧的缩放方式不同,这就是为什么我考虑重写它的缩放函数,这样我就可以操纵它处理顶点的方式。我想我没有任何机会独自做这件事,所以你的解决方案可能是唯一的。