繁体   English   中英

如何使用 Direct X11 将纹理 map 到默认立方体

[英]How to map a texture to the default cube utilising the Direct X11 XAML UWP, C++?

我是相对较新的 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 模板的人都能看到我来自哪里,欢迎所有贡献。 谢谢。

如果您在ThrowIfFailedthrow上设置断点,您会看到CreateInputLayout的 HRESULT 为E_INVALIDARG Direct3D 调试层会告诉您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 视频格式,它对如何使用它们有特殊规则,您需要牢记Direct3D 硬件功能级别

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM