Я использую WPF 3D, но думаю, что этот вопрос должен относиться к любому наложению трехмерной текстуры.
Предположим, у меня есть модель коровы, и я хочу нарисовать круглое пятно на корове (и я хочу делать это динамически - предположим, я не знаю местоположение пятна до выполнения). Я мог бы сделать это, раскрасив вершины (вершинам назначается цвет в зависимости от их расстояния от центра пятна), но если модель достаточно низкополигональная, это даст круг с довольно неровными краями.
Я мог бы сделать это с помощью пиксельного шейдера, где шейдер окрашивает каждый пиксель в зависимости от его расстояния от центра пятна. Но предположим, что у меня нет доступа к пиксельным шейдерам (поскольку меня нет в WPF).
Итак, мне кажется, что я хочу динамически создать текстуру с круговым узором и текстурировать корову с ее помощью.
Вопрос в следующем: как я могу узнать, какой трехмерной координате в пространстве модели соответствует заданная координата xy на изображении текстуры?
То есть, предположим, что я уже текстурировал свою модель простой белой текстурой - я установил координаты текстуры, выполнил наложение текстуры, но еще не получил изображения текстуры. Итак, у меня есть это изображение размером 1000x1000 (или что-то еще) в пикселях, которое красиво накладывается на корову в соответствии с некоторыми хорошими координатами текстуры, которые были установлены на модели заранее. Я понимаю, что когда 3D-оборудование начинает рисовать заданный треугольник, оно использует координаты текстуры вершин треугольника, чтобы найти соответствующую треугольную область изображения, а затем интерполирует по поверхности треугольника, чтобы заполнить отображаемые пиксели модели с помощью цвета из этой треугольной области изображения.
Как мне пойти другим путем? Как я могу сказать, что для данной точки xy на моем изображении текстуры и с учетом координат текстуры, которые уже были установлены в модели, какова трехмерная координата в пространстве модели, которой этот пиксель изображения будет соответствовать после того, как произойдет наложение текстуры ?
Если бы у меня была такая функция, я мог бы раскрасить свое изображение карты текстуры так, чтобы все точки (в трехмерном пространстве) на определенном расстоянии от центральной точки круга на корове получали один цвет, а все точки за пределами этого расстояния получали бы другой. цвет, и я получу красивое четкое круглое пятно на корове, даже с относительно низкополигональной моделью. Звучит правильно?
Я понимаю, что, учитывая координаты текстуры для вершин каждого треугольника, я могу пройти по треугольникам в моей модели, найти соответствующий треугольник на изображении текстуры и выполнить свою собственную интерполяцию по пикселям текстуры в этом треугольнике путем интерполяции через трехмерную плоскость, определяемую точками вершин. И это звучит не слишком сложно. Но я просто пытаюсь понять, есть ли какая-то стандартная концепция / функция 3D, где я могу просто вызвать готовую функцию, чтобы дать мне координаты пространства модели для данной текстуры xy.