【发布时间】:2015-03-02 20:41:28
【问题描述】:
我正在使用 C++ 编写一个 .obj 处理程序。导入数据应该不是问题,但我不明白为什么 .obj(例如从搅拌机导出)具有比“v”整体更多的“vt”条目。如果有人能给我解释一下,我会很高兴的!
谢谢!
【问题讨论】:
我正在使用 C++ 编写一个 .obj 处理程序。导入数据应该不是问题,但我不明白为什么 .obj(例如从搅拌机导出)具有比“v”整体更多的“vt”条目。如果有人能给我解释一下,我会很高兴的!
谢谢!
【问题讨论】:
位置、法线和纹理坐标的数量可能不同,因为两个顶点可能在一个空间共享一个坐标,但在另一个空间不同。
想象一个盒子(8 个顶点)在纹理空间中使用 6 个不同的矩形(每个面一个) -> 即 6*4=24 个纹理坐标。
编辑: 一个盒子的常见 uv-map 如下所示(14 个纹理坐标)。我注释了三个不同的顶点:A、B 和 C。请注意,在一个盒子中,每个顶点都与三个面相邻,这在 uv-map 中也必须为真。 C 获得一个与三个面相邻的纹理坐标,但 B 必须被复制,A 必须复制三倍才能这样做。
【讨论】:
我找到了问题的根源。我过早地优化了我的程序,并且没有意识到纹理坐标可能比顶点坐标的数量更大,因为纹理是按面映射而不是按顶点映射的,因此每个顶点可能有许多纹理坐标映射到它.希望有人能从我的错误中吸取教训。
我发现奇怪的事情是在运行我的 .obj 解析器之前初始化 sf::RenderWindow 导致没有抛出错误消息,并且崩溃报告的区域与实际发生的完全不同。
【讨论】:
LWO 格式的命名会引起很多混乱。标有“v”的线实际上是定义点而不是顶点。 定义面后,这些点将转换为顶点,这为立方体提供了 24 个顶点,但只有 8 个点。
【讨论】: