Open ai2playgame opened 4 years ago
https://github.com/boxerprogrammer/directx12_samples/blob/6947b401e7de8acfc12f764e11b7f433c33f94d2/Chapter8/main.cpp#L712
書籍中(p312)では、PMDファイルから 0xff のトゥーン番号を読み取った時、 toon/toon00.bmp をトゥーンテクスチャとして利用するとあります。ですが現在の実装は、以下の2点の問題から不適切だと考えます。
0xff
toon/toon00.bmp
pmdMaterials[i].toonIdx = 0xffの時、toonFileNameが toon256.bmpとなる 暗黙にint型に変換されることから、0xff + 1 をunsigned charの範囲にまるめて0とすることが出来ていません。明示的にunsigned charにキャストする必要があります。
0xff + 1
そもそもtoon00.bmpというファイルが存在しない 本レポジトリ中にも、MikuMikuDance(x64)をDLする際に付属するトゥーンテクスチャにも、toon00.bmp というファイルは存在しません。 本実装ではトゥーンテクスチャの読み込みに失敗した場合はダミーで生成したグレーグラデーションテクスチャを代わりに利用する実装になっているため、エラーになることはありませんが……
toon00.bmp
このIssueは、トゥーン番号に 0xff を使用している巡音ルカ.bmpを読み込んだ際に発見しました。
これ,unsigned charの変数にいったん結果を格納してたら0になるんですけど,可変長引数にそのまま渡しているのでintとしての値がそのまま入っちゃいますね.
https://github.com/boxerprogrammer/directx12_samples/blob/6947b401e7de8acfc12f764e11b7f433c33f94d2/Chapter8/main.cpp#L712
書籍中(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を読み込んだ際に発見しました。