Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不更改位置的情况下缩放网格?_Javascript_Three.js_Scale - Fatal编程技术网

Javascript 如何在不更改位置的情况下缩放网格?

Javascript 如何在不更改位置的情况下缩放网格?,javascript,three.js,scale,Javascript,Three.js,Scale,在这个场景中,我有27个网格,每个网格都有一个关联的编号。数字最大的一个将具有1级刻度。其余的值将依次小于1 接下来我想让它相应地爬过每个环。我的问题发生在每个网格的位置更改时 事实上,它被缩放到了应有的大小,但它改变了位置。我在挣扎,因为有几个屏幕在堆叠 我只需要你攀爬并保持在与本例相同的位置: 美国各州都在扩大规模,但仍保持其地位。我认为它们会缩放到图形的中心 我创建了网格(每个网格都称为“市政网格”) for(var s=0;s

在这个场景中,我有27个网格,每个网格都有一个关联的编号。数字最大的一个将具有1级刻度。其余的值将依次小于1

接下来我想让它相应地爬过每个环。我的问题发生在每个网格的位置更改时

事实上,它被缩放到了应有的大小,但它改变了位置。我在挣扎,因为有几个屏幕在堆叠

我只需要你攀爬并保持在与本例相同的位置:

美国各州都在扩大规模,但仍保持其地位。我认为它们会缩放到图形的中心

我创建了网格(每个网格都称为“市政网格”)

for(var s=0;s
因为网格位置不在其中心,或者不在您想要的任何参考位置:如果您创建的几何体的平均顶点
x
分量超过100,则其可见位置将是其真实位置加上(100,0,0)。如果未指定网格的位置(默认情况下为(0,0,0)),则网格将精确地显示为(100,0,0)。例如,将其缩放0.5将导致平均位置为(100,0,0)*.5=(50,0,0),使网格明显改变其位置

需要做的是:

  • 从所有顶点减去中心的坐标。顶点位于几何体内部,因此一旦完成,就需要设置
    geometry.verticesNeedUpdate=true

  • 然后将中心坐标添加到网格,以进行补偿

因此,生成的网格将定位在其中心,而不会移动

定义中心有三种不同的可能性:

  • Three.js可以使用
    geometry.center()
    Three.GeometryUtils.center(geometry)
    根据边界框的中心自动将网格居中
  • 您可以通过第一次遍历顶点来计算质心,以获得它们的平均坐标
  • 您可能既不需要布丁框的中心,也不需要质心,而是一个自定义中心。例如,如果您正在缩放“人物”网格,并希望他们的脚以任意比例接触地面:在水平面上,您希望的中心可以是两个中心之一,但其垂直坐标必须是找到的最低垂直坐标(脚的最底部)

当然,如果您的网格是从3D编辑器软件导入的,您也可以在其中进行导入

因此,它们通常是在改变刻度之前。我原谅我的无知,但我不明白。我知道我必须移动局部坐标0,0,0的所有网格点。我这样做了:市政[I].position.x=offsetArray[I].x;市政[i]。位置。y=offsetArray[i]。y市政[i]。位置。z=offsetArray[i]。z;//offsetArray[i]0,0,0是每个网格的局部。在我为每个网格应用比例并最终执行后,我将所有内容放入0,0,0中:市政[i]。translate.x=0;市政[i].translate.y=0;市政[i].translate.z=0;但现在它处于同样的位置。我做错了什么?。对不起,我想你不明白。请原谅我的无知。此问题已在本次聊天中解决,请随意查看。