【问题标题】:Handling .obj files: Why is it possible to have more vertextextures (vt) than vertices (v)?处理 .obj 文件:为什么顶点纹理 (vt) 可能比顶点 (v) 多?
【发布时间】:2015-03-02 20:41:28
【问题描述】:

我正在使用 C++ 编写一个 .obj 处理程序。导入数据应该不是问题,但我不明白为什么 .obj(例如从搅拌机导出)具有比“v”整体更多的“vt”条目。如果有人能给我解释一下,我会很高兴的!

谢谢!

【问题讨论】:

    标签: .obj wavefront


    【解决方案1】:

    位置、法线和纹理坐标的数量可能不同,因为两个顶点可能在一个空间共享一个坐标,但在另一个空间不同。

    想象一个盒子(8 个顶点)在纹理空间中使用 6 个不同的矩形(每个面一个) -> 即 6*4=24 个纹理坐标。

    编辑: 一个盒子的常见 uv-map 如下所示(14 个纹理坐标)。我注释了三个不同的顶点:ABC。请注意,在一个盒子中,每个顶点都与三个面相邻,这在 uv-map 中也必须为真。 C 获得一个与三个面相邻的纹理坐标,但 B 必须被复制,A 必须复制三倍才能这样做。

    【讨论】:

    • 谢谢 BeyelerStudios,不知道我是否明白你的意思。一个盒子有 8 个 3D 点(我们的顶点)。我应用的纹理适合所有 6 种形状。在这种情况下,一个面由 4 个顶点定义。如果我想找到一个顶点的 rgb 值,我可以选择多个?对不起,我想我误会你了:(
    • 啊,我理解你!事实上,纹理不需要是一体的,这会导致 vtexture 多于顶点。谢谢!
    • 这是一个很好的解释,你应该把它添加到维基百科。暂时不解释了:)!
    【解决方案2】:

    我找到了问题的根源。我过早地优化了我的程序,并且没有意识到纹理坐标可能比顶点坐标的数量更大,因为纹理是按面映射而不是按顶点映射的,因此每个顶点可能有许多纹理坐标映射到它.希望有人能从我的错误中吸取教训。

    我发现奇怪的事情是在运行我的 .obj 解析器之前初始化 sf::RenderWindow 导致没有抛出错误消息,并且崩溃报告的区域与实际发生的完全不同。

    【讨论】:

      【解决方案3】:

      LWO 格式的命名会引起很多混乱。标有“v”的线实际上是定义点而不是顶点。 定义面后,这些点将转换为顶点,这为立方体提供了 24 个顶点,但只有 8 个点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多