首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >顶点着色器中的Direct3D11错误的顶点变换

顶点着色器中的Direct3D11错误的顶点变换
EN

Stack Overflow用户
提问于 2016-11-28 09:36:31
回答 1查看 128关注 0票数 1

我正在尝试运行D3D 11渲染系统来加载和渲染FBX文件,但我在顶点着色器中转换顶点时遇到问题。

我不认为有什么问题,在Visual Studio图形调试器中,我可以看到在输入汇编阶段传递到管道的网格是正常的,但在顶点着色器转换都爆发并渲染错误之后,如果有人能告诉我哪里出了问题,我将不胜感激。

View of the Input Assembler Stage

View of the Vertex Shader Output

这是顶点着色器代码

代码语言:javascript
运行
复制
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;
}

这是矩阵初始化的代码

代码语言:javascript
运行
复制
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_);
EN

回答 1

Stack Overflow用户

发布于 2016-11-29 17:56:06

从评论中看,问题实际上可能是矩阵的行-主/列-主差异。如果矩阵在CPU端被转置,那么原始的HLSL代码可能会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40835991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档