OBJファイル読み込み

問題

  1. 以下のようなデータを読み込んで出力するPythonスクリプトを作成してください。
    (入力)
    ファイル名data1
    v 1 2 3
    v 4 5 6
    v 7 8 9
    v 10 11 12
    v 13 14 15
    
    (出力)
    print文で出力
    [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [10.0, 11.0, 12.0], [13.0, 14.0, 15.0]]
    
  2. 以下のようなデータを読み込んで出力するPythonスクリプトを作成してください。
    (入力)
    ファイル名data2
    v 1 2 3
    v 4 5 6
    v 7 8 9
    v 10 11 12
    v 13 14 15
    vn 16 17 18
    vn 19 20 21
    vn 22 23 24
    
    (出力)
    print文で出力
    [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [10.0, 11.0, 12.0], [13.0, 14.0, 15.0]]
    [[16.0, 17.0, 18.0], [19.0, 20.0, 21.0], [22.0, 23.0, 24.0]]
    
  3. 以下のようなデータを読み込んで出力するPythonスクリプトを作成してください。
    (入力)
    ファイル名data3
    f 1/1/1 2/2/2 4/4/3
    f 3/3/5 4/4/6 6/6/7 5/5/8
    
    (出力)
    一行目がフェースの頂点番号のリスト、 二行目がエッジのリストです。
    print文で出力
    [[0, 1, 3], [2, 3, 5, 4]]
    [[0, 1], [1, 3], [3, 0], [2, 3], [3, 5], [5, 4], [4, 2]]
    
  4. 以下のデータを読み込んで出力するPythonスクリプトを作成してください。
    (入力)
    OBJデータ をファイルに保存して、実行時にそのファイル名で読み込めるようにしてください。
    (実行方法)
    # mayapy スクリプト名.py データファイル名
    (出力)
    頂点のリスト(v)
    法線のリスト(vn)
    テクスチャ情報のリスト(vt)
    フェースのリスト(f)
    エッジのリスト(f)
    [[-0.500000, -0.500000, 0.500000], [0.500000, -0.500000, 0.500000], [-0.500000, 0.500000, 0.500000], [0.500000, 0.500000, 0.500000], [-0.500000, 0.500000, -0.500000], [0.500000, 0.500000, -0.500000], [-0.500000, -0.500000, -0.500000], [0.500000, -0.500000, -0.500000]]
    [[0.000000, 0.000000, 1.000000], [0.000000, 0.000000, 1.000000], [0.000000, 0.000000, 1.000000], [0.000000, 0.000000, 1.000000], [0.000000, 1.000000, 0.000000], [0.000000, 1.000000, 0.000000], [0.000000, 1.000000, 0.000000], [0.000000, 1.000000, 0.000000], [0.000000, 0.000000, -1.000000], [0.000000, 0.000000, -1.000000], [0.000000, 0.000000, -1.000000], [0.000000, 0.000000, -1.000000], [0.000000, -1.000000, 0.000000], [0.000000, -1.000000, 0.000000], [0.000000, -1.000000, 0.000000], [0.000000, -1.000000, 0.000000], [1.000000, 0.000000, 0.000000], [1.000000, 0.000000, 0.000000], [1.000000, 0.000000, 0.000000], [1.000000, 0.000000, 0.000000], [-1.000000, 0.000000, 0.000000], [-1.000000, 0.000000, 0.000000], [-1.000000, 0.000000, 0.000000], [-1.000000, 0.000000, 0.000000]]
    [[0.375000, 0.000000], [0.625000, 0.000000], [0.375000, 0.250000], [0.625000, 0.250000], [0.375000, 0.500000], [0.625000, 0.500000], [0.375000, 0.750000], [0.625000, 0.750000], [0.375000, 1.000000], [0.625000, 1.000000], [0.875000, 0.000000], [0.875000, 0.250000], [0.125000, 0.000000], [0.125000, 0.250000]]
    [[0, 1, 3, 2], [2, 3, 5, 4], [4, 5, 7, 6], [6, 7, 1, 0], [1, 7, 5, 3], [6, 0, 2, 4]]
    [[0, 1], [1, 3], [3, 2], [2, 0], [2, 3], [3, 5], [5, 4], [4, 2], [4, 5], [5, 7], [7, 6], [6, 4], [6, 7], [7, 1], [1, 0], [0, 6], [1, 7], [7, 5], [5, 3], [3, 1], [6, 0], [0, 2], [2, 4], [4, 6]]
    

Obj ファイルフォーマット

#
# から行末までコメントです。
mtllib マテリアルファイル名
マテリアルデータを記述したファイル名です。
g グループ名
グループの名前です。
次のg、またはファイル末尾までが1つのグループです。
グループ名が無いと、全体が一つのグループになります。
usemtl マテリアル名
このグループが使用するマテリアル名を指定します。
マテリアル名は、マテリアルファイルに記述してあります。
v X Y Z
頂点の座標値です。
vt U V
テクスチャの座標値です。
vn X Y Z
法線ベクトルの値です。
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 ...
フェイスの情報です。
3つの数値が / を区切りとして並びます。 この3つの数値が、フェイスの数だけ並びます。
各番号は、1 から始まります。
テクスチャ座標値番号頂点法線ベクトル番号は、省略可能です。

Contents