投影图像到非平面表面的算法是否存在?

5

有没有一种算法可以将图像投影到非平面(变形)表面上?

该表面并非变形过多,而是由高质量、耐用的磨砂纸覆盖的光滑表面。我有一个三维模型。如何使用投影仪为其贴上纹理呢?projection

我想要编写一款能够在Windows下用C/C++/C#编程语言编写的程序,该程序可以利用投影仪为任何给定的三维模型表面贴上纹理。

我需要一个包含相关算法或开源库的算法。


5
你是在尝试模拟如果有人将普通的电影投影仪对准这个表面会看起来怎样?还是在尝试调整你所投影的内容,以尝试消除表面变形? - Jason Orendorff
3个回答

3

是的,有一个算法。除非你真的想自己实现它,否则让现有的3D图形实现为你完成这项工作可能更容易 - OpenGL和DirectX都可以让你将纹理应用到3D模型的表面上。NeHe教程包括一个使用OpenGL的示例来说明基本思路。


此外,具体的OpenGL调用是 glTexGen(..., GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR) - Drew Hall

1

标准纹理库使用的算法并不清楚,而且它可能不是真正的投影,因此如果精度很重要,您可能需要自己完成这个过程(或者研究特定库使用的具体算法)。

基本算法很简单。基本上,您只需要找到从投影点发出的线与表面相交的位置。更详细地说:

  1. 确定您的投影点
  2. 决定从您的投影点发出一堆线,以便在扭曲表面上获得所需的分辨率
  3. 确定这些线与表面的交点(确切的方法将取决于您的表面表示)
  4. 假设您的平面图像放置在投影点和扭曲表面之间的某个位置,并找到线与平面表面的交点,并将该值分配给扭曲表面上的位置。

另一方面,如果您的表面是用数学方式描述的,则可能存在一个简单的方程式,例如,如果您将平面映射到球体上。


0
它被称为图像畸变校正。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接