Пожалуйста, потерпите меня, поскольку я никогда не занимался чем-либо, связанным с этим, и я занимался этим вопросом последние две недели .
Я разрабатываю программу, которая читает лица на 3D-модели.Каждая грань нарисована путем соединения серии из 3 или 4 вершин в координатах XYZ.Моя программа (или, по крайней мере, намерение) будет проходить через каждое лицо, накладывать изображение текстуры на лицо и сохранять изображение.Я могу обработать последние две части, но у меня возникают проблемы с отображением лица на двухмерную поверхность.У меня нет доступа к нормальным, что я считаю, помогает.(Вершины квадов всегда будут лежать в одной плоскости, поэтому квады не будут согнуты).
до
Потенциальные решения, о которых я думал (но понятия не имею, как реализовать):
- Используя 2 вершины, вычислите угловыеотклонение от оси (например, использование двух верхних вершин квадрата для вычисления вращения Y). После этого для всех трех осей я могу повернуть вершины на противоположные повороты, чтобы, надеюсь, сделать его плоским (я не знаю, как это сделать математически).Однако проблема, которую я вижу с этим решением, состоит в том, что координата x может быть изменена на 2 поворота (y и z), а не только на 1 (и то же самое относится к координатам y и z).
- Вместо повороталицо, я воссоздаю форму.Как и в решении 1, я использую две вершины.Вместо того, чтобы вычислять вращение, я вычисляю длину и наклон ege.Затем я могу нарисовать ту же линию в 2D-пространстве и повторить для других ребер.Я нахожу наклоны ребер, чтобы правильно определить углы на пересекающихся ребрах (подумайте о полярных координатах).У меня есть идея, как это сделать, но я не уверен, что это лучшее решение.
Ответы по коду принимаются, но, думаю, не обязательно.(VB, C #, JS, независимо от ваших предпочтений) Я хотел бы знать математику того, что я делаю.Тщательные объяснения приветствуются.