boxerprogrammer / directx12_samples

書籍「DirectX12の魔導書」のサンプルプログラム
MIT License
259 stars 68 forks source link

トゥーンテクスチャ読み込み周りの実装の不具合 #24

Open ai2playgame opened 4 years ago

ai2playgame commented 4 years ago

https://github.com/boxerprogrammer/directx12_samples/blob/6947b401e7de8acfc12f764e11b7f433c33f94d2/Chapter8/main.cpp#L712

書籍中(p312)では、PMDファイルから 0xff のトゥーン番号を読み取った時、 toon/toon00.bmp をトゥーンテクスチャとして利用するとあります。ですが現在の実装は、以下の2点の問題から不適切だと考えます。

  1. pmdMaterials[i].toonIdx = 0xffの時、toonFileNameが toon256.bmpとなる 暗黙にint型に変換されることから、0xff + 1 をunsigned charの範囲にまるめて0とすることが出来ていません。明示的にunsigned charにキャストする必要があります。

  2. そもそもtoon00.bmpというファイルが存在しない 本レポジトリ中にも、MikuMikuDance(x64)をDLする際に付属するトゥーンテクスチャにも、toon00.bmp というファイルは存在しません。 本実装ではトゥーンテクスチャの読み込みに失敗した場合はダミーで生成したグレーグラデーションテクスチャを代わりに利用する実装になっているため、エラーになることはありませんが……

このIssueは、トゥーン番号に 0xff を使用している巡音ルカ.bmpを読み込んだ際に発見しました。

ryutorion commented 4 years ago

これ,unsigned charの変数にいったん結果を格納してたら0になるんですけど,可変長引数にそのまま渡しているのでintとしての値がそのまま入っちゃいますね.