Closed griffon-9 closed 12 years ago
pull requestありがとうございます。
回答ありがとうございます。
1の件に関してですが、私がこの問題に遭遇したのは長く愛用させていただいていたpymeshio 1.8.6から思い切ってpymeshio 2.5.5へ移行しようとしたときでした。
pymeshio 1.8.6のexport_pmdで製作していたモデルデータをpymeshio 2.5.5のexport_pmdで出力しようとしたところ、面が反転する現象が起こりました。 不審に思いPMDエディタで確認したところ、各頂点の法線は外側を向いているのに面だけが反転しているかのような出力結果に思えました。 また、pymeshio 2.5.5のexport_pmxで出力した場合には、少なくとも面が反転するという結果にはなりませんでした。
これらのことから調査を進めたところpymeshio 1.8.6からpymeshio 2.5.5の間でVertexArrayに格納する面の頂点インデックスの格納順が変更されているように見受けられました。また、export_pmx.pyとexport_pmd.pyで頂点インデックスの出力順が異なっているように見受けられます。
export_pmx.pyは以下のように実装されています。
# 面
for i in indices:
assert(i<vertexCount)
for i in range(0, len(indices), 3):
# reverse triangle
model.indices.append(indices[i+2])
model.indices.append(indices[i+1])
model.indices.append(indices[i])
一方でexport_pmd.pyはこのようになっています。
# 面
for i in indices:
assert(i<vertexCount)
for i in range(0, len(indices), 3):
# reverse triangle
model.indices.append(indices[i])
model.indices.append(indices[i+1])
model.indices.append(indices[i+2])
PMDとPMXで頂点順序が異なる仕様、という訳ではないだろうと思いましたので、新しいexport_pmx.pyの実装にexport_pmd.pyをそろえるのが妥当ではないか、と考えた次第です。
再度確認してみたところご指摘のとおりexport_pmdでは面が裏返っておりました。 pmxの方しか確認してませんでした・・・ 一部pmxとpmdで共用の部分があるので、pmx修正時に巻き込まれて壊れしまったようです。 mergeさせていただきます。