Я пытаюсь вырезать загруженную трехмерную модель пополам, используя MonoGame (что очень похоже на XNA). Мне не нужно делать это в режиме реального времени, поэтому производительность не является большой проблемой.Резка модели XNA пополам удалением вершин и индексов
Я получаю свои вершины и индексы, используя ModelMeshPart
как таковой.
Vector3[] vertices = new Vector3[part.NumVertices];
part.VertexBuffer.GetData<Vector3>(vertices);
short[] indices = new short[part.PrimitiveCount * 3];
part.IndexBuffer.GetData<short>(indices);
, а затем установить их с помощью
part.IndexBuffer.SetData<Vector3>(vertices);
part.VertexBuffer.SetData<short>(indices);
До этого, хотя я беру эти массивы и попытаться очистить все вершины (и индексы, относящиеся к ним), которые расположены позади центр Z места модели как таковой.
float centerZ = modelMesh.BoundingSphere.Center.Z;
for (int i = 0; i < indices.Length; i += 3)
{
short index0 = indices[i];
short index1 = indices[i + 1];
short index2 = indices[i + 2];
Vector3 vert0 = vertices[index0];
Vector3 vert1 = vertices[index1];
Vector3 vert2 = vertices[index2];
if (vert0.Z > centerZ && vert1.Z > centerZ && vert2.Z > centerZ)
{
vert0 = Vector3.Zero;
vert1 = Vector3.Zero;
vert2 = Vector3.Zero;
indices[i] = short.MinValue;
indices[i + 1] = short.MinValue;
indices[i + 2] = short.MinValue;
}
}
но в конце я получаю что-то похожее на это, а не на модель, разрезанную пополам. Я совершенно новичок в программировании игр, и мое понимание вершин и индексов по-прежнему крайне мало. Очевидно, что мне не хватает чего-то действительно фундаментального, любая помощь была бы искренне оценена.
Если вам не нужно делать это в режиме реального времени, можете ли вы сделать это в своем 3D-редакторе по выбору? Большинство инструментов имеют функцию среза, которая может регенерировать сетку для вас. Было бы намного проще. Желаю вам хорошо – MickyD