import * as THREE from 'three';
import * as BufferGeometryUtils from 'three/addons/utils/BufferGeometryUtils.js';
const renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera( 75, innerWidth / innerHeight, 0.1, 1000 );
camera.position.z = 10;
// create material and 2 sphere:
const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
const sphere_geo1 = new THREE.SphereGeometry( 2, 32, 32 );
// sphere_geo1.setAttribute('position', new THREE.BufferAttribute( new Float32Array([-5,0,0]), 3));
const sphere_geo2 = new THREE.SphereGeometry( 2, 32, 32 );
// merge spheres and add merged to scene:
var merged_geo = BufferGeometryUtils.mergeGeometries([sphere_geo1, sphere_geo2], false);
const merged = new THREE.Mesh( merged_geo, material );
scene.add(merged);
在合并之前,我尝试将位置设置为第一个球体(例如
x=-5
),并用于此setAttribute('position')
,但如果取消注释该行,sphere_geo1
似乎不会出现在该位置。我做错了什么?
我用r161
您需要遍历所有顶点才能改变位置。 检查此线程 - Three.js update boxGeometry 的网格位置属性。 我想这就是你所寻找的。因为球体几何会有很多三角形,你需要在 X 方向移动每个三角形。
如果通过
setAttribute('position'...)
设置几何体的位置,这在合并几何体中可能会出现问题。
尝试使用
translate
方法,然后移动整个几何体:
sphere_geo1.translate(-5, 0, 0);