2010-02-18 3 views
5

Есть ли какой-либо алгоритм для проецирования изображений на не-плоскую (деформированную) поверхность?Есть ли какой-либо алгоритм для проецирования изображений на неровную поверхность?

Это не деформируется слишком много. Это действительно стеклянная поверхность, покрытая высококачественной прочной калькой. У меня есть трехмерная модель. Как я могу текстурировать его с помощью проектора? projection

Я хочу написать программу в C \ C++ \ C# для Windows, которая сможет текстурировать любую поверхность, заданную трехмерной моделью, с использованием проектора.

Мне нужен алгоритм или библиотеки с открытым исходным кодом, содержащие алгоритмы.

+5

Вы пытаетесь имитировать, как это выглядело бы, если бы кто-то указал обычный кинопроектор на этой поверхности? Или вы пытаетесь настроить то, что вы проецируете, чтобы попытаться отменить деформации на поверхности? –

ответ

1

Не совсем понятно, какой алгоритм будет использовать стандартная библиотека текстурирования, и это, вероятно, не истинная проекция, поэтому, если точность важна, вам нужно сделать это самостоятельно (или провести некоторое исследование того, какие конкретные алгоритмы используется для данной библиотеки).

Базовый алгоритм прост. В основном вам просто нужно найти, где линия, исходящая от вашей проекционной точки, пересекает вашу поверхность. Более подробно:

  1. Принятие решения о точке проекции
  2. Решают на кучу линий, исходящих от вашей точки проекции, что даст вам разрешение вам нужно на деформированные поверхности
  3. Определите, где эти линии пересекаются вашу поверхность (точный метод будет зависеть от вашего поверхностного представления)
  4. Предположим, что ваше плоское изображение помещено где-то между точкой проецирования и искаженной поверхностью и найдите пересечение линии с плоской поверхностью и присвойте это значение местоположению на извращенной поверхность.

С другой стороны, если ваша поверхность описана математически, для этого может быть простое уравнение, как это было бы, например, если бы вы отображали плоскость в сферу.

3

Да, есть алгоритм. Если вы не действительно хотите реализовать его самостоятельно, то, вероятно, проще позволить существующей реализации 3D-графики выполнить эту работу для вас - и OpenGL, и DirectX позволят вам применить текстуру к поверхности 3D-модели. Учебники NeHe включают в себя example базовой идеи с использованием OpenGL.

+0

Чтобы добавить к этому конкретному вызову OpenGL, 'glTexGen (..., GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)'. –

0

Это называется коррекция искажения изображения.