【问题标题】:Simple Texture Mapping for a generic triangle mesh通用三角形网格的简单纹理映射
【发布时间】:2021-10-10 21:40:07
【问题描述】:

假设我们有一个没有法线和纹理坐标信息的三角形网格。 (基本上是一个只有顶点和面元素的 OBJ 文件)。

目标是使用 Opengl 和用 C 编写的程序展示一些不错的东西。 计算每个三角形的法线很容易...

但是纹理映射呢? 谁能推荐我一个简单的算法/文档/资源来将图像的归一化 UV 坐标映射到三角形的通用网格?

(For a mesh with a single triangle it is easy, ex:  [0][0], [1][0], [0][1]) 

结果不一定是完美的,如果没有 UV 展开和 UV 接缝,即使是专业软件也无法做到这一点。

【问题讨论】:

    标签: opengl 3d textures polygon uv-mapping


    【解决方案1】:

    我知道的唯一算法是2D屏幕坐标(屏幕空间):

    我已经回答了类似这个here的问题,关注textureCoords2D vertices之间的转换算法(即texturePos = (vPos - 0.5) * 2

    编辑

    注意;以下是一个理论:

    可能有一个带有 3D 空间的方法。最终,这些变换会导致顶点以 2D 屏幕坐标呈现。

    local space --> world space --> view space --> NDC space --> screen coordinates

    使用上面的一般约定和 3 个矩阵(ModelViewProjection),

    并且由于顶点最终会在 2D 空间中,您可以创建某种形式的算法来使用逆矩阵将纹理坐标回溯到 3D 空间并移动从那里开始。

    顺便说一句,这仍然不是一个已定义和完美的算法(也许有,将来有人会在这里编辑和添加算法......

    【讨论】:

    • 你本可以在评论中写出来...如果我问了这个问题并且没有添加任何资源,那只是因为我找不到任何东西。
    • 求一个通用的算法是很难找到的,因为算法适用于特定的上下文或情况,它们可能不是普遍适用的,有时甚至是与其他密切相关但不是100%的问题。无论如何,我会尽我所能编辑问题给你一个更详细的答案
    • textureCoordinates 没有算法的关键原因之一是因为它们与verticesnormals 没有关系密切(信息不足派生)而normals 是每个顶点或每个三角形的基础(如果由三个顶点组成的三角形被认为是一个平面,则可以使用基本向量数学来计算法线)。
    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多