【问题标题】:How to map a texture to the default cube utilising the Direct X11 XAML UWP, C++?如何使用 Direct X11 XAML UWP、C++ 将纹理映射到默认立方体?
【发布时间】:2021-01-01 10:31:48
【问题描述】:

我是相对较新的 C++/DX11 - 尽管我一直在研究这个主题以使自己跟上进度。 无论如何,我的问题是使用默认的 DX11 XAML UWP 模板(我使用的是 VS 2017)- 我无法将纹理应用到网格上。但是,我已经进行了一些挖掘,并在官方 MS 文档中找到了非常有用的资源 我不太确定如何在我的 Sample3DSceneRenderer.cpp 中实现我的纹理加载代码。

    // After the vertex shader file is loaded, create the shader and input layout.
auto createVSTask = loadVSTask.then([this](const std::vector<byte>& fileData) {
    DX::ThrowIfFailed(
        m_deviceResources->GetD3DDevice()->CreateVertexShader(
            &fileData[0],
            fileData.size(),
            nullptr,
            &m_vertexShader
            )
        );

    static const D3D11_INPUT_ELEMENT_DESC vertexDesc [] =
    {
        { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
        { "COLOR", 0, DXGI_FORMAT_AYUV, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    };

    DX::ThrowIfFailed(
        m_deviceResources->GetD3DDevice()->CreateInputLayout(
            vertexDesc,
            ARRAYSIZE(vertexDesc),
            &fileData[0],
            fileData.size(),
            &m_inputLayout
            )
        );
});

我发现通过从特定枚举列表中选择某些值(此处的值设置为“DXGI_FORMAT_AYUV”)我可以更改立方体的颜色,但我知道通常需要这种类型的 UV 映射过程的事情,但我不确定我是否必须定义该过程,或者它是否已经在着色器代码中处理。 (抱歉任何错误信息,我还在学习DX11)

这是我从中获取逻辑的文档: https://docs.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-resources-textures-how-to

我专门尝试从文件创建 WIC 纹理。

希望任何熟悉默认 DX11 UWP 模板的人都能看到我来自哪里,欢迎所有贡献!谢谢。

【问题讨论】:

    标签: c++ uwp textures loading wic


    【解决方案1】:

    如果您在ThrowIfFailed 中的throw 上设置断点,您会看到来自CreateInputLayout 的HRESULT 是E_INVALIDARGDirect3D Debug Layer 会告诉您DXGI_FORMAT_AYUV 不是顶点颜色支持的格式:

    D3D11 ERROR: ID3D11Device::CreateInputLayout: Element[1]'s format (AYUV)
    cannot be used with the Input Assembler.
    [ STATE_CREATION ERROR #153: CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT]
    

    DXGI_FORMAT_AYUV 是一种 DirectX 视频格式,其中有 special rules 说明它们的使用方式,您需要牢记Direct3D Hardware Feature level

    IOW:在掌握基本的 DirectX 11 之前,不要乱用视频格式。

    关于使用 WIC 创建纹理,请参阅WICTextureLoader 模块。

    您应该查看支持 DirectX 和 DirectX+XAML 应用模型的 UWP 的 DirectX11 的 DirectX Tool Kit

    【讨论】:

    • 非常感谢!仍处于学习阶段,来自 C 语言背景。
    猜你喜欢
    • 2016-12-21
    • 2014-01-09
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多