【问题标题】:Map image/texture to a predefined uneven surface (t-shirt with folds, mug, etc.)将图像/纹理映射到预定义的不平整表面(带褶皱的 T 恤、杯子等)
【发布时间】:2012-12-06 22:49:08
【问题描述】:

基本上我试图实现这一点:将任意图像强加到预定义的不平整表面。 (见下面的例子)。

-->

我在图像处理或 3D 算法方面没有太多经验,所以这是我目前能想到的最好的方法:

  1. 预定义一组坐标(假设我们有一个 10x10 的网格,我们有 100 个以 (0,0)、(0,10)、(0,20) 等开头的坐标。将会有9x9 = 81 个网格。
  2. 记录 T 恤图像上每个单独坐标的转换,例如(0,0) 变为 (51,31),(0, 10) 变为 (51, 35),依此类推。
  3. 将原始图像三角化为 81x2=162 个三角形(每个网格有 2 个三角形)。根据步骤 2 中得到的坐标变换对图像的每个三角形进行变换,并将其绘制在 T 恤图像上。

我遇到的问题/疑问:

  1. 我不知道如何平滑每个三角形,这样 T 恤上的图像才不会显得参差不齐。
  2. 有更好的方法吗?在继续实施之前,我想确保我没有在这里重新发明轮子。

谢谢!

【问题讨论】:

  • 您总是可以提高分辨率并创建更小的三角形:P 我认为您需要一种不同的算法来代替这种三角测量。剪切和撕裂的东西。
  • 您可以简单地使用从“T 恤坐标”到纹理坐标的样条插值。通过这种方式,您可以获得从 T 恤图像中的每个像素到纹理图像的平滑映射,并且可以简单地查找每个像素的纹理。但不适用于折痕或遮挡。

标签: image image-processing graphics 3d textures


【解决方案1】:

这称为数字图像变形。 1990 年代有一个 popular graphics text (可能来自某人的论文)。您还可以在 Dobb 博士的日记中找到 article

您的过程基本上是正确的。如果您逐个像素地工作,而不是尝试使用三角形,您将避免您面临的一些问题。扫描目标位图中的像素,并根据您所在的单元格应用局部变换以确定源位图中相应像素的坐标。复制那个像素。

为了获得更平滑的结果,您可以在浮点中进行坐标转换,并使用 bilinear interpolation 之类的东西对源图像中的像素值进行插值。

【讨论】:

    【解决方案2】:

    这并不是问题的真正解决方案,它只是一种解决方法:

    如果您有代表 T 恤的 3D 模型。 您可以使用 directX\OpenGL 并将您的图像作为 T 恤的纹理。 然后你可以要求它从任何角度渲染你想要的图片。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-14
      • 2017-01-20
      • 2021-08-20
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多