rwobj.pyに以下の関数を作成してOBJデータの読み書きができるようにしてください。
また、作ったスクリプトはモジュールとして使えるようにしてください。
以下のdataはすべて自分で作ったポリゴンデータとします。
data = readObj(filename)
writeObj(data, filename)
readObj()とwriteObj()のテストは以下のように行います。
import sys data = readObj(sys.argv[1]) print data writeObj(data, sys.argv[2])
各種データをdataから取り出す関数
vs = getVertex(data)
ns = getNormal(data)
uv = getUV(data)
fs = getFace(data)
nn = getNormalNumber(data)
es = getEdge(data)
各種データをdataに戻す関数
putVertex(vs, data)
putNormail(ns, data)
putUV(uv, data)
putFace(fs, data)
putEdge(es, data)
Pythonのライブラリのことをモジュールと言います。
Pythonのスクリプトを所定のフォルダに保存しておくとモジュールとしてインポートできるようになります。
例えば、test.pyとrwobj.pyを同じフォルダに保存しておくとtest.pyの中で以下のようにしてrwobj.pyをインポートできます。
import rwobj data = rwobj.readObj(filename1) ... rwobj.writeObj(data, filename2)
以下のif文がモジュール内にあるとモジュールとして使うときは実行されないので モジュールのテスト用スクリプトを書いておくことができます。
if __name__ == '__main__': # テスト用の命令
#
mtllib マテリアルファイル名
g グループ名
usemtl マテリアル名
v X Y Z
vt U V
vn X Y Z
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 ...
with open(ファイル名) as fp: for line in fp: print line # -> 1行分の文字列
str = 'test1\ntest2\n' # 書き込む文字列 with open(ファイル名, 'w') as fp: fp.write(str)
data = {'vertex':[...], 'texture':[...], ...} for k,d in data.items(): # k -> キーワード('vertex', 'texture', ...) # d -> 値([...]...)
data = [1,2,3,4,5,6,7,8,9] for d in data[::3]: -> 1,4,7 for d in data[1::3]: -> 2,5,8 for d in data[2::3]: -> 3,6,9 data1 = [1, 2, 3] data2 = [4, 5, 6] data3 = [7, 8, 9] for x,y,z in zip(data1,data2,data3): print x,y,z # -> 1,4,7 -> 2,5,8 -> 3,6,9