簡體   English   中英

Direct3D11頂點着色器中的頂點變換錯誤

[英]Direct3D11 wrong vertex transformations in vertex shader

我正在嘗試運行D3D 11渲染系統來加載和渲染FBX文件但我在頂點着色器中轉換頂點時遇到了問題。

我不認為有什么問題,在Visual Studio圖形調試器中,我可以看到傳遞給管道的網格在輸入匯編程序階段是正常的,但是在頂點着色器轉換之后所有突發並渲染出錯,如果有人可以告訴我出了什么問題我會很感激這些信息。

輸入匯編程序階段的視圖

頂點着色器輸出的視圖

這是頂點着色器代碼

cbuffer MatrixBuffer
{
    matrix worldMatrix;
    matrix viewMatrix;
    matrix projectionMatrix;
};

struct VertexInputType
{
    float4 position : POSITION;
    float3 normal : NORMAL;
    float2 uv : TEXCOORD;
};

struct PixelInputType
{
    float4 position : SV_POSITION;
    float3 normal : NORMAL;
    float2 uv : TEXCOORD;
};

PixelInputType TextureVertexShader(VertexInputType input)
{
    PixelInputType output;

    output.position = mul(input.position, worldMatrix);
    output.position = mul(output.position, viewMatrix);
    output.position = mul(output.position, projectionMatrix);

    output.normal = input.normal;
    output.uv = input.uv;

    return output;
}

這是矩陣初始化的代碼

float lFieldOfView = 3.141592f * 0.4f;
float lScreenAspect = static_cast<float>(width_) / static_cast<float>(height_);

DirectX::XMMATRIX lProjection = MatrixDirectX::XMMatrixPerspectiveFovLHlFieldOfView, lScreenAspect, 1.0f, 10000.0f);
DirectX::XMStoreFloat4x4(&lMatrixBuffer.projectionMatrix, lProjectionMatrix);

DirectX::XMMATRIX lWorldMatrix = DirectX::XMMatrixIdentity();
DirectX::XMStoreFloat4x4(&lMatrixBuffer.worldMatrix, lWorldMatrix);

DirectX::XMFLOAT3 lookAtPos(0.0f, 0.0f, 0.0f);
DirectX::XMFLOAT3 eyePos(0.0f, 0.0f, -50.0f);
DirectX::XMFLOAT3 upDir(0.0f, 1.0f, 0.0f);
DirectX::FXMVECTOR lLookAtPos = DirectX::XMLoadFloat3(&lookAtPos);
DirectX::FXMVECTOR lEyePos    = DirectX::XMLoadFloat3(&eyePos);
DirectX::FXMVECTOR lUpDir     = DirectX::XMLoadFloat3(&upDir);

DirectX::XMMATRIX lViewMatrix = DirectX::XMMatrixLookAtLH(lEyePos, lLookAtPos, lUpDir);
DirectX::XMStoreFloat4x4(&lMatrixBuffer.viewMatrix, lViewMatrix);

D3D11_BUFFER_DESC lBufferDesc = { 0 };
lBufferDesc.ByteWidth      = sizeof(MatrixBufferType);
lBufferDesc.Usage          = D3D11_USAGE_DYNAMIC;
lBufferDesc.BindFlags      = D3D11_BIND_CONSTANT_BUFFER;
lBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;

D3D11_SUBRESOURCE_DATA lMatrixBufferData;
lMatrixBufferData.pSysMem = &lMatrixBuffer;

hResult = D3DDevice_->CreateBuffer(&lBufferDesc, &lMatrixBufferData, &D3DMatrixBuffer_);

從評論看來,問題實際上可能是矩陣行 - 主要/列 - 主要差異。 如果矩陣將轉換到CPU端,原始的HLSL代碼可能會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM