|
sprintf(toonFileName, "toon%02d.bmp", pmdMaterials[i].toonIdx + 1); |
書籍中(p312)では、PMDファイルから 0xff のトゥーン番号を読み取った時、 toon/toon00.bmp をトゥーンテクスチャとして利用するとあります。ですが現在の実装は、以下の2点の問題から不適切だと考えます。
-
pmdMaterials[i].toonIdx = 0xffの時、toonFileNameが toon256.bmpとなる
暗黙にint型に変換されることから、0xff + 1 をunsigned charの範囲にまるめて0とすることが出来ていません。明示的にunsigned charにキャストする必要があります。
-
そもそもtoon00.bmpというファイルが存在しない
本レポジトリ中にも、MikuMikuDance(x64)をDLする際に付属するトゥーンテクスチャにも、toon00.bmp というファイルは存在しません。
本実装ではトゥーンテクスチャの読み込みに失敗した場合はダミーで生成したグレーグラデーションテクスチャを代わりに利用する実装になっているため、エラーになることはありませんが……
このIssueは、トゥーン番号に 0xff を使用している巡音ルカ.bmpを読み込んだ際に発見しました。
directx12_samples/Chapter8/main.cpp
Line 712 in 6947b40
書籍中(p312)では、PMDファイルから
0xffのトゥーン番号を読み取った時、toon/toon00.bmpをトゥーンテクスチャとして利用するとあります。ですが現在の実装は、以下の2点の問題から不適切だと考えます。pmdMaterials[i].toonIdx = 0xffの時、toonFileNameが toon256.bmpとなる
暗黙にint型に変換されることから、
0xff + 1をunsigned charの範囲にまるめて0とすることが出来ていません。明示的にunsigned charにキャストする必要があります。そもそもtoon00.bmpというファイルが存在しない
本レポジトリ中にも、MikuMikuDance(x64)をDLする際に付属するトゥーンテクスチャにも、
toon00.bmpというファイルは存在しません。本実装ではトゥーンテクスチャの読み込みに失敗した場合はダミーで生成したグレーグラデーションテクスチャを代わりに利用する実装になっているため、エラーになることはありませんが……
このIssueは、トゥーン番号に
0xffを使用している巡音ルカ.bmpを読み込んだ際に発見しました。