【发布时间】:2018-10-20 16:40:43
【问题描述】:
我有一个问题:
我有一个 3D 点数组。 如何在 3D 空间中绘制由 Vertices 给出的 2D 平面对象? 我想画线从 Points[0] 到 Points[1],从 Points[1] 到 Points[2] 等等…… 现在我有以下解决方案:
var geometry = new THREE.BufferGeometry();
var vertices = faceToTriangles( VerticesArray ); // my function
var uvs = new Float32Array([
0.0, 0.0,
1.0, 0.0,
1.0, 1.0,
0.0, 0.0,
1.0, 1.0,
0.0, 1.0
]);
geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
geometry.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );
var material = new THREE.MeshLambertMaterial( {color: 'red' } );
material.side = THREE.DoubleSide;
var mesh = new THREE.Mesh( geometry, material );
faceToTriangles():
function faceToTriangles( VerticesArray )
{
var Triangles = new Float32Array( (VerticesArray.length-2)*9 );
var i = 0;
for($v=1; $v < Face.Vertices3D.length-1; $v++)
{
Triangles[i++] = parseFloat(Face.Vertices3D[0].x);
Triangles[i++] = parseFloat(Face.Vertices3D[0].y);
Triangles[i++] = parseFloat(Face.Vertices3D[0].z);
Triangles[i++] = parseFloat(Face.Vertices3D[$v].x);
Triangles[i++] = parseFloat(Face.Vertices3D[$v].y);
Triangles[i++] = parseFloat(Face.Vertices3D[$v].z);
Triangles[i++] = parseFloat(Face.Vertices3D[$v+1].x);
Triangles[i++] = parseFloat(Face.Vertices3D[$v+1].y);
Triangles[i++] = parseFloat(Face.Vertices3D[$v+1].z);
}
return Triangles;
}
我前段时间写的,它在大多数情况下都有效。 它从一个对象制作一个三角形。但在某些情况下,函数 faceToTriangles() 工作不正确。它会生成超出对象的三角形。
如何正确制作? 如何在 3D 空间中显示 2D 平面对象(由顶点数组给出)? 也许不用转换成三角形?
(对不起我的英语)
【问题讨论】: