Моя цель - получить файл .obj из отличного формата (.nii) с помощью python, чтобы открыть его в Unity. Я знаю, что в пакете scikit-image есть модуль под названием «measure», в котором реализован алгоритм Marching cube. Я применяю алгоритм маршевого куба к своим данным и получаю ожидаемые результаты:
verts, faces, normals, values = measure.marching_cubes_lewiner(nifty_data, 0)
Затем я могу построить данные:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(verts[:, 0], verts[:,1], faces, verts[:, 2],
linewidth=0.2, antialiased=True)
plt.show()
Я искал функции для сохранения данных (вершины, нормали граней, значения) как .obj, но не нашел. Таким образом, я решил построить его сам.
thefile = open('test.obj', 'w')
for item in verts:
thefile.write("v {0} {1} {2}\n".format(item[0],item[1],item[2]))
for item in normals:
thefile.write("vn {0} {1} {2}\n".format(item[0],item[1],item[2]))
for item in faces:
thefile.write("f {0}//{0} {1}//{1} {2}//{2}\n".format(item[0],item[1],item[2]))
thefile.close()
Но когда я импортирую данные в Unity, я получил следующий результат:
Итак, мои вопросы следующие:
- Что я делаю не так в процессе создания .obj?
- Есть ли модуль или функция, которые делают это лучше?
- Можно ли вообще делать то, что я хочу?
Спасибо.
Еще примеры:
Python:
Единство: