Meshlab,Rvcg,openCVwithPython

  • Meshlab
    • 3Dオブジェクトを操作させてくれるGUIWindows,Mac,Linux OK(ダウンロード)
    • 複数の3Dオブジェクトファイルを置換もできる(PLY,Obj等)
    • ファイルフォーマット変換は
      • あるファイルフォーマットで読み込んで、File -> Export Mesh As -> 保存ファイルの拡張子を選択
  • Rvcg
    • RvcgはPLY形式での書き出し、読み込みが可。
    • Objファイルだったら、Meshlabで変換して以下のようにする
    • テクスチャ(3dオブジェクトの表面に模様を描くには、模様を乗せたpngファイルとかが必要で、PLYファイルにはそのファイル名(パス込み)が書かれているので、それがないとワーニングが出る
install.packages("Rvcg")
library(Morpho) # 使うことが多い
library(rgl)
testobj <- vcgPlyRead("texturedknot.ply")
edges <-vcgNonBorderEdge(testobj)
lines3d(t(testobj$vb[1:3,])[c(edges$vert1[1],edges$vert2[2]),],col=2,lwd=3)
## plot barycenters of adjacent faces
bary <- barycenter(testobj)
points3d(bary[c(edges$face1[1],edges$face2[1]),])
shade3d(testobj, col=3)
    • PLYファイル書き出し
data(humface)
vcgPlyWrite(humface,filename = "humface")
  • OpenCV with python
    • pythonOpenCVを使えば "dae"フォーマットファイルでの書き出しができる
    • Meshlabではdaeファイルが読み込めるので
    • plyファイルで吐き出せば、Rに読み込ませられる
import numpy as np
import mcubes

# Create a data volume (30 x 30 x 30)
X, Y, Z = np.mgrid[:10, :10, :10]
# たくさんの3次元座標に「値」をつける
u = (X-5)**2 + (Y-5)**2 + (Z-5)**2 - 2**2
np.shape(u)
print X
print Y
print u
# Extract the 0-isosurface
# 指定した値0の等高面をマーチングキューブする
vertices, triangles = mcubes.marching_cubes(u, 0)
vertices_xyz = np.transpose(vertices)
print vertices
print triangles
# Export the result to sphere.dae
mcubes.export_mesh(vertices, triangles, "sphere.dae", "MySphere")
  • Meshlabのコマンドライン
    • meshlabserverというのがコマンド。パスを通したり、と言ったことはやらないといけないけれど、基本的には以下のコマンド
> meshlabserver -i hoge.obj -o hoge.ply
  • Rで読み込む
testobj <- vcgPlyRead("hoge.ply")