Буферная геометрия и каркас

Можно ли иметь каркасный чертеж для THREE.BufferGeometry? Я не думаю, что Threejs поддерживает это, вы можете изменить _gl.TRIANGLES на _gl.LINES (или LINES_STRIP) в источнике Threejs, и результат будет довольно странным.

http://oi40.tinypic.com/15tsux.jpg(геометрия буфера находится внизу)

Существует также старая проблема на GitHub, где не предусмотрено решение https://github.com/mrdoob/three.js/issues/1275

Что необходимо сделать, чтобы включить поддержку каркасов с THREE.BufferGeometry? Я хотел бы дать шанс в его реализации, но я не уверен, что нужно сделать.

2 ответа

Решение

Я трачу некоторое время на него (в настоящее время для неиндексированных треугольников), и это довольно просто.

var wireframe_pos = new Float32Array( positionArray.length * 2 );
for( var ii = 0; ii < positionArray.length; ii += 9 ) {
  wireframe_pos[ ii * 2 ] = positionArray[ ii ];
  wireframe_pos[ ii * 2 + 1 ] = positionArray[ ii + 1 ];
  wireframe_pos[ ii * 2 + 2 ] = positionArray[ ii + 2 ];

  wireframe_pos[ ii * 2 + 3 ] = positionArray[ ii + 3 ];
  wireframe_pos[ ii * 2 + 4 ] = positionArray[ ii + 4 ];
  wireframe_pos[ ii * 2 + 5 ] = positionArray[ ii + 5 ];

  wireframe_pos[ ii * 2 + 6 ] = positionArray[ ii + 3 ];
  wireframe_pos[ ii * 2 + 7 ] = positionArray[ ii + 4 ];
  wireframe_pos[ ii * 2 + 8 ] = positionArray[ ii + 5 ];

  wireframe_pos[ ii * 2 + 9 ] = positionArray[ ii + 6 ];
  wireframe_pos[ ii * 2 + 10 ] = positionArray[ ii + 7 ];
  wireframe_pos[ ii * 2 + 11 ] = positionArray[ ii + 8 ];

  wireframe_pos[ ii * 2 + 12 ] = positionArray[ ii + 6 ];
  wireframe_pos[ ii * 2 + 13 ] = positionArray[ ii + 7 ];
  wireframe_pos[ ii * 2 + 14 ] = positionArray[ ii + 8 ];

  wireframe_pos[ ii * 2 + 15 ] = positionArray[ ii ];
  wireframe_pos[ ii * 2 + 16 ] = positionArray[ ii + 1 ];
  wireframe_pos[ ii * 2 + 17 ] = positionArray[ ii + 2 ];
}

attributes[ "position" ] = { itemSize: 3, array: wireframe_pos, numItems: wireframe_pos.length };

Хотя, если честно, я не совсем доволен этим решением, поскольку массив позиций в два раза больше оригинала. Это кажется слишком тяжелым. Любые предложения для лучшего подхода?

По сути, необходима утилита для преобразования буферных геометрий в формате сетки в линейные буферные геометрии.

Другие вопросы по тегам