Code Monkey home page Code Monkey logo

directx12_samples's People

Contributors

boxerprogrammer avatar cx20 avatar imagire avatar ryuichikawano avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

directx12_samples's Issues

10章で関数の命名に一貫性がありません

ほとんどのメンバ関数名が動詞から始まっているのに,一部のメンバ関数が動詞から始まっていません.

例えば,RecursiveMatrixMultiplyは,MultiplyMatrixRecursivelyなどの方が良いかもしれません.

本文でもRecursiveMatrixMultiplyとしているので,サンプルコードを変更するとすれば,第二版以降向けになると思います.

Chapter 7のdescTblRangeのコメントがコードと合っていません

D3D12_DESCRIPTOR_RANGE descTblRange[1] = {}; // テクスチャと定数の2つ

コメントと実際の要素数が合っていません.また,6章から7章に移るにあたって,descTblRangeを変更する,という説明が抜けているようです.
そのままでも動くので,8章で再びルートシグネチャ周りを更新する際にズレが発生して,混乱するかもしれません.

11章のシェーダーが巻き戻っているようです

11章までのシェーダはBasicVSとBasicPSが別ファイルに分かれていたのに,Chapter11/BasicVertexShader.hlslにBasicPSが復活しています.

法線の部分もボーンの計算が抜けているようですが,こちらは意図的なものでしょうか?

Chapter4からSetGraphicsRootSignatureの二重呼び出し

554		_cmdList->SetGraphicsRootSignature(rootsignature);
555
556		_cmdList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
557		_cmdList->IASetVertexBuffers(0, 1, &vbView);
558		_cmdList->IASetIndexBuffer(&ibView);
559
560		_cmdList->SetGraphicsRootSignature(rootsignature);

ご拝見したところ、
main.cppファイルで554行目と560行目は二回SetGraphicsRootSignatureを呼び出しましたが、
こちらは意図的なものでしょうか。

10.10.3のモーションがありません

書籍には,Chapter10/motion.vmdと書いていますが,そういったファイルがありません.

そもそも,motion/motion.vmdの間違いだと思いますが,そちらにもファイルがありません.

swizzlingの解説が不十分な気がします

2章で行列に関するswizzlingについては解説していますが,float3などの場合が抜けていて,そのまま7章で使っています.

swizzlingというキーワードは検索の際にも利用することがあると思うので,紹介しておいた方が良い気がします.

Chapter 6のサンプルコードでアルファブレンドが有効になっています

タイトルの通りですが,Chapter 8ではアルファブレンドが無効な前提で解説されています.

Chapter 6を読んだ限りでは,アルファブレンドを有効にする,という記述は無いようです.

Chapter 5,7,8ではアルファブレンドは無効になっているようなので,修正漏れでしょうか?

10.9のコードが書籍と異なります

書籍では,構造体名をVMDMotionとしていますが,サンプルコードではVMDKeyFrameとなっています.同様に,書籍ではMotionとなっている構造体がサンプルコードではKeyFrameとなっています.

7.6の変更点が不十分です

7.6 読み込んだ頂点データの描画,で点のデータを表示するのに変更点として,IASetPrimitiveTopologyのみ記載されていますが,パイプラインステートのPrimitiveTopologyTypeをD3D12_PRIMITIVE_TOPOLOGY_TYPE_POINTに変更しないと,PRIMITIVE_TOPLOGY_MISMATCH_PIPELINE_STATEという警告が出続けます.

この2つの違いについては,公式ドキュメントに書いてありました.

The primitive topology type. Note that the input-assembler primitive topology type (point, line, triangle, patch) is set within the PSO using the D3D12_PRIMITIVE_TOPOLOGY_TYPE enumeration. The primitive adjacency and ordering (line list, line strip, line strip with adjacency data, etc.) is set from within a command list using the ID3D12GraphicsCommandList::IASetPrimitiveTopology method.

Chapter 12のソースコード

P494の三つ目のソースコードで、ハンドルのポインタをずらすのに、
D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAVを使っていますが、
D3D12_DESCRIPTOR_HEAP_TYPE_RTVではないのでしょうか?

今回はD3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAVと
D3D12_DESCRIPTOR_HEAP_TYPE_RTVのIncrementSizeが
同じですので、動作できたが。

DOFのシェーダで深度に応じた縮小バッファが選択されていないように見えます

https://github.com/boxerprogrammer/directx12_samples/blob/master/Chapter14/PeraPixelShader.hlsl

122行目で
if (i - no < 0)continue;
となっていますが、これだと深度がいくつであろうと、retColor[0]は縮小バッファのうち一番大きなもの、retColor[1]はその次に大きなものになるように思いました。
これは、おそらく意図とは違っていて、深度が深いほど縮小バッファのうち小さいものを選びたいのではないでしょうか。
if (i - no < 0)
{
uvOfst.y += uvSize.y;
uvSize *= 0.5f;
continue;
}
が意図に合うのではないかと思います。

理解が間違っていたらすみません。

7.5.4のインデックスレイアウトがサンプルと異なります

サンプルコードでは,EDGE_FLGの行が削除されています.

HLSLにuint8が無いためと思われますが,BasicVSの方にもEDGE_FLGのセマンティクス名に対応するものが消えているので,第二版では何かしら調整しないと混乱を招きそうです.

vector::emplace_back()なのに一時オブジェクトを生成している

_motiondata[f.boneName].emplace_back(KeyFrame(f.frameNo, XMLoadFloat4(&f.quaternion),
XMFLOAT2((float)f.bezier[3]/127.0f,(float)f.bezier[7]/127.0f),
XMFLOAT2((float)f.bezier[11] / 127.0f, (float)f.bezier[15] / 127.0f)));

emplace_back()でvectorにオブジェクトを追加しているのに一時オブジェクトを生成しているのは冗長。(書籍中の該当コードはp378)

_ から始まる名前が使われている

__ (アンダースコア2つ)で始まる名前,_ の直後に大文字が来る名前,グローバル名前空間における _ で始まる名前は仕様でコンパイラの実装のために予約されているため,避けた方が良いです.

最初の実装から _dev などグローバル変数の目印として _ で始まる名前が使われています.

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

sprintf(toonFileName, "toon%02d.bmp", pmdMaterials[i].toonIdx + 1);

書籍中(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を読み込んだ際に発見しました。

一時オブジェクトが渡される関数が参照渡しになっている

KeyFrame(unsigned int fno, DirectX::XMVECTOR& q,const DirectX::XMFLOAT2& ip1,const DirectX::XMFLOAT2& ip2):

void RecursiveMatrixMultipy(BoneNode* node, DirectX::XMMATRIX& mat);

一時オブジェクトが渡されることを想定している関数のシグネチャが参照渡しになっています。 VS2017.15.5以降、デフォルトで有効になっている/permissive-オプションが有効な時、このコードは通りません。
const参照渡しに書き換えるべきです。

参考
https://docs.microsoft.com/ja-jp/cpp/build/reference/permissive-standards-conformance?view=vs-2019

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.