通过 Assimp 加载的网格看起来变形了

Meshes loaded via Assimp look distorted

所以我正在尝试使用 assimp 和 DirectX11 加载和渲染网格。(我松散地遵循了 youtube 上的教程)问题是它看起来很奇怪和扭曲。我检查了我的网格 - 搅拌机和 assimp 查看器正确加载它们。 从 obj 文件渲染 suzanne 的结果: Suzanne from obj file

看起来索引缓冲区有点错误,但我在传播它时没有看到错误; 网格加载代码:

struct Vertex
{
   struct
   {
       float x;
       float y;
       float z;
   }Position;

};
Model::Model(const std::string & path)
    {
        Ref<Zephyr::VertexShader> VertexShader = Zephyr::VertexShader::Create("MinimalShaders.hlsl", "VertexShaderMain");

        AddBindable(VertexShader);

        AddBindable(Zephyr::PixelShader::Create("MinimalShaders.hlsl", "PixelShaderMain"));

        AddBindable(Zephyr::Topology::Create(Zephyr::Topology::TopologyType::TriangleList));

        std::vector<Zephyr::InputLayout::InputLayoutElement> InputLayout =
        {
            {"Position",Zephyr::InputLayout::InputDataType::Float3}
        };

        AddBindable(Zephyr::InputLayout::Create(InputLayout, VertexShader));

        Assimp::Importer Imp;
        auto model = Imp.ReadFile(path, aiProcess_JoinIdenticalVertices | aiProcess_Triangulate);

        const auto Mesh = model->mMeshes[0];

        std::vector<Vertex> Vertices;
        Vertices.reserve(Mesh->mNumVertices);

        for (unsigned int i = 0; i < Mesh->mNumVertices; i++)
        {
            Vertex buf;
            buf.Position = { Mesh->mVertices[i].x,Mesh->mVertices[i].y ,Mesh->mVertices[i].z };
            Vertices.push_back(buf);
        }

        std::vector<unsigned short> Indices;
        Indices.reserve(Mesh->mNumFaces * 3);
        

        for (unsigned int i = 0; i < Mesh->mNumFaces; i++)
        {
            const auto & face = Mesh->mFaces[i];

            if (face.mNumIndices != 3)
            {
                Zephyr::Log::Error("More than 3 indices per face ?!"); continue;
            }
                
            Indices.push_back(face.mIndices[0]);
            Indices.push_back(face.mIndices[1]);
            Indices.push_back(face.mIndices[2]);
        }

        AddBindable(Zephyr::VertexBuffer::Create(Vertices));
        BindIndexBuffer(Zephyr::IndexBuffer::Create(Indices));

    }

我的着色器很少

cbuffer CBuff
{
    matrix transform;
};

float4 VertexShaderMain(float3 position : Position) : SV_POSITION
{
    return mul(float4(position, 1.0), transform);

}

float4 PixelShaderMain() : SV_TARGET
{
  return float4(1.0,1.0,1.0,1.0);
}

我的管道正确呈现,f。前任。硬编码的多维数据集,但是当我尝试从文件加载多维数据集时,会发生这种情况: distorted cube

Assimp 打开文件并加载正确数量的顶点。指数的数量似乎还可以(对于立方体,有 12 个三角形和 36 个指数)

老实说,此时我不知道我做错了什么。我是否遗漏了一些明显的东西?

提前致谢

所以我想通了。问题是在其他一些文件中我已经定义了名为 Vertex 的结构。该结构还包含 uv,因此最终我的顶点缓冲区变得一团糟。愚蠢的错误。