2016-07-09 8 views
1

EDIT:私は深度 - ステンシルビューを設定していません、問題がありますか?カメラの位置を変更すると、一部の頂点の色が消えます

私はtutorialに従おうとしていますが、カメラ位置をXMMatrixLookAtLHに変更すると、いくつかの頂点の色が消えます。私は未定義の振る舞いをしているように感じます。彼らは作成しても、頂点シェーダにレイアウトされて

ConstantBuffer cb; 
cb.world = DirectX::XMMatrixIdentity(); 
cb.view = XMMatrixLookAtLH({ 4.0f, 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.0f, 1.0f, 0.0f, 0.0f }); 
cb.projection = DirectX::XMMatrixPerspectiveFovLH(XM_PI/2.0f, (float)windowWidth/(float)windowHeight, 0.1f, 110.0f); 

レイアウトが順番に正確である:ここでは

ConstantBufferに詰め世界、ビューおよび投影行列の作成です。私はそれらを転置する。私も alignas(16)で構造体を宣言しようとしましたが、何の効果もありませんでした。ここで

は、バッファの私の創造である:私は作成時に、それを初期化していますチュートリアル、と比較すると

ZeroMemory(&bd, sizeof(D3D11_BUFFER_DESC)); 
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; 
bd.ByteWidth = sizeof(cb); 
bd.CPUAccessFlags = 0; 
bd.MiscFlags = 0; 
bd.StructureByteStride = 0; 
bd.Usage = D3D11_USAGE_DEFAULT; 

ZeroMemory(&initialData, sizeof(D3D11_SUBRESOURCE_DATA)); 
initialData.pSysMem = &cb; 

hr = device->CreateBuffer(&bd, &initialData, &constBuffer); 

deviceContext->VSSetConstantBuffers(0, 1, &constBuffer); 

。私はそれを初期化しようとしましたが、それは何も変更されませんでした。私は彼らのバージョンをコンパイルすることができませんでしたので、

cbuffer ConstantBuffer : register(b0) 
{ 
    matrix world; 
    matrix view; 
    matrix projection; 
} 

struct PixelInputType 
{ 
    float4 pos:SV_POSITION; 
    float4 color:COLOR; 
}; 

PixelInputType main(float4 pos : POSITION, float4 color : COLOR) 
{ 
    PixelInputType output = (PixelInputType)0; 
    output.pos = mul(pos, world); 
    output.pos = mul(output.pos, view); 
    output.pos = mul(output.pos, projection); 
    output.color = color; 
    return output; 
} 

それは、チュートリアルのそれとは非常に異なっている:

は、ここに私の頂点シェーダです。ビューの変換についてコメントしようとしましたが、意図したとおりに機能しました。

また、NSightを使用してフレームをデバッグしようとしましたが、それはの現在のですが、色は失われています。

このような現象を引き起こす原因は何もわかりません。私はx64でコンパイルしています。私は可読性のチェックを削除しましたが、すべての呼び出しにはHRESULTを返します。失敗した場合、チェッカーは常にスローします。キューブは、チュートリアルとまったく同じように、原点を中心にしています。

EDIT:ビューポートMinDepthMaxDepthはそれに応じて0.01と1に設定されています。 (1、1)

enter image description here

位置から:ここ

(0、4、0)の位置からのスクリーンショットである

enter image description here

答えて

1

それはによって引き起こさですニアプレーンクリッピング。あなたは近く/遠い面を勉強する必要があります。

D3Dの初期化時にニアプレーンを定義します。

// Initialize the Direct3D object. 
result = m_D3D->Initialize(screenWidth, screenHeight, VSYNC_ENABLED, hwnd, FULL_SCREEN, SCREEN_DEPTH, SCREEN_NEAR); 

編集:以下のリンクから詳細を読むことができます。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb206341(v=vs.85).aspx

+0

基本的に、ズームアウトするだけです。あなたはオブジェクトに近すぎて、カメラスコープから外れているので、いくつかのポリゴンは描画されません。面の近くの値を変更すると、クリッピングが始まる距離から変更できます。より詳細な情報を得るためのリンク例を追加します。 –

+0

はい、MinDepthをゼロに近い値に変更し、結果にどのように影響するかを確認してください。また、カメラを少し遠くに置くこともできます。 –

+0

うーん、おそらくあなたはこのような問題を抱えています。受け入れられた答えを確認してください。 http://gamedev.stackexchange.com/questions/113803/does-direct3d-11-enable-z-clipping-discard-by-default –

関連する問題