在 DX11 中从 .obj 文件渲染模型

Render a model from a .obj file in DX11

提问人:Lotar 122 提问时间:10/25/2023 最后编辑:genpfaultLotar 122 更新时间:10/25/2023 访问量:34

问:

我正在编写一个 DX11 应用程序,它从 .obj 文件渲染模型。我不在乎纹理坐标/法线等。 我只想要垂直点,这样我就可以画模型了。我已经设置好了一切,所以我有一个旋转的立方体,我想用 3D 模型替换它。

这是我想出的:

struct Vertex
{
    float x;
    float y;
    float z;
};
std::vector<Vertex> LoadOBJ3D(const std::string& filename)
{
    std::vector<Vertex> vertices;

    std::ifstream file(filename);
    if (!file.is_open())
    {
        std::cerr << "Failed to open OBJ file: " << filename << std::endl;
        return vertices;
    }

    std::string line;
    while (std::getline(file, line))
    {
        std::istringstream iss(line);
        std::string token;
        iss >> token;

        if (token == "v")
        {
            Vertex vertex;
            iss >> vertex.x >> vertex.y >> vertex.z;
            vertices.push_back(vertex);
        }
    }

    file.close();
    return vertices;
}

但是当我把它变成一个平面的浮点数组并将其作为顶点传递时,屏幕上会出现一堆三角形,其形状类似于我的模型。

这就是它的样子。

screenshot

应该是猫麦克斯韦

C++ DirectX-11 波前

评论

3赞 Botje 10/25/2023
您是否知道 OBJ 文件还包含由这些顶点组成的面列表?为什么你要自己滚动,而不是使用久经考验和值得信赖的assimp库?
2赞 Botje 10/25/2023
另外,绘图代码在哪里?
0赞 Lotar 122 10/26/2023
好的,我已经使用了人脸数据,现在它正确呈现,如果你把它变成一个答案,我会把它@Botje
0赞 Botje 10/27/2023
不,只是让它成为一个自我回答。
0赞 Chuck Walbourn 10/28/2023
虽然您可以使用像“Assimp”这样的东西,如果您只想读取 Wavefront OBJ 文件,这是一个非常重量级的解决方案。有关独立阅读器的示例,请参阅 GitHub

答: 暂无答案