Показать сообщение отдельно
Старый 11.12.2010, 04:49   #1
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Как найти UV координаты новой точки на триангле.

Значит, задача была поставленна в таком виде.

Есть три вершины, образующие треугольную грань, для каждой из которых известны её 3d коорлинаты и UV координаты текстуры.
Есть вершина внутри грани(лежит в её плоскости ) с известными 3d координатами.
КАК найти, какие будут у этой вершины UV?

                     B
                     .
                    / \
                   /   \
                  /     \
                 /   .D  \
                /         \
               .-----------.
             A              C
Решено было так.

Vector3 A = new Vector3(1, 0, 0);        Vector2 Auv = new Vector2(0, 0);
Vector3 B = new Vector3(10f, 4f, 4f);    Vector2 Buv = new Vector2(1, 0);
Vector3 C = new Vector3(0, 6f, 13f);     Vector2 Cuv = new Vector2(0.5f, 1);
Vector3 D = new Vector3(4, 3, 5); 
Vector3 N = Vector3.Normalize(Vector3.Cross(B - A, C - A)); 
float AreaABC = Vector3.Dot(N, Vector3.Cross(B - A, C - A));
float AreaPBC = Vector3.Dot(N, Vector3.Cross(B - D, C - D));
float AreaPCA = Vector3.Dot(N, Vector3.Cross(C - D, A - D)); 
float b = AreaPCA / AreaABC;float a = AreaPBC / AreaABC;
float c = 1.0f - a - b; 
Vector2 Duv = a * Auv + b * Buv + c * Cuv;
Внимание вопрос. Что сдесь вообще происходит?)
Понял что решение идет через барицентрические координаты.
Впринцепе можно это представить в формате кода блитза, тогда я сам все пойму
(Offline)
 
Ответить с цитированием