У меня проблема:
У меня есть массив 3D очков.
Как нарисовать 2D, плоский объект, заданный вершинами в 3D пространстве?
Я хочу провести линию от Точек [0] до Точек [1], от Точек [1] до Точек [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 () работает некорректно. Он генерирует треугольники, выходящие за пределы объекта.
Как сделать это правильно?
Как отобразить двухмерный плоский объект (заданный массивом вершин) в трехмерном пространстве?
Может быть, без преобразования в треугольники?
(простите за мой английский)