用cannon.js 的Trimesh导入glb模型,需要vertices和indeics数据,我怎么用three.js得到这些数据呢
时间: 2024-05-15 08:13:20 浏览: 200
使用Three.js和Cannon.js制作的层叠游戏.zip
使用Three.js加载GLB模型后,可以通过以下步骤获取vertices和indices数据:
1. 获取模型的Geometry或BufferGeometry对象。
```javascript
const loader = new THREE.GLTFLoader();
loader.load( 'model.glb', function ( gltf ) {
const geometry = gltf.scene.children[0].geometry; // 获取模型的Geometry或BufferGeometry对象
// ...
} );
```
2. 获取vertices数据。
如果模型是BufferGeometry类型,则可以直接访问`geometry.attributes.position`属性获取vertices数据。
```javascript
const vertices = geometry.attributes.position.array;
```
如果模型是Geometry类型,则需要遍历模型的顶点数组,将每个顶点的x、y、z坐标分别存入vertices数组中。
```javascript
const vertices = [];
const verticesCount = geometry.vertices.length;
for ( let i = 0; i < verticesCount; i ++ ) {
const vertex = geometry.vertices[i];
vertices.push( vertex.x, vertex.y, vertex.z );
}
```
3. 获取indices数据。
如果模型是BufferGeometry类型,则可以直接访问`geometry.index.array`属性获取indices数据。
```javascript
const indices = geometry.index.array;
```
如果模型是Geometry类型,则需要遍历模型的面(三角形)数组,将每个面的三个顶点的索引分别存入indices数组中。
```javascript
const indices = [];
const facesCount = geometry.faces.length;
for ( let i = 0; i < facesCount; i ++ ) {
const face = geometry.faces[i];
indices.push( face.a, face.b, face.c );
}
```
完成以上步骤后,你就可以使用获取到的vertices和indices数据创建Trimesh对象了。
阅读全文