我的目标是使用Python从nifty(.nii)格式获取.obj文件,并将其用于Unity。我知道“scikit-image”包有一个叫做“measure”的模块,其中实现了Marching cube算法。我将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:
Unity: