2014-12-27 4 views
1

Я пытаюсь получить сетку, чтобы пересечь цепь через сферу. Я взял изображение, которое обернуто вокруг сферы, и покрасил путь, по которому я хочу, чтобы сетка следовала. Затем я вычислил все (u, v) точки пути. Используя точки (u, v), я конвертирую в сферические координаты, чтобы получить сетку на сфере, и установите вращения вокруг осей X и Y rot.x и rot.y, так что сетка касается касательной сферы и обращена к северному полюсу сферы. Моя проблема заключается в том, чтобы сетка была направлена ​​в направлении, в которое она движется. Третья переменная вращения, rot.z, используется для установки заголовка сетки. В настоящее время я получаю точки (u, v) с 5-го по 14-й пункт, и беру среднее значение углов высоты сегмента линии текущей точки и каждого из 10 будущих очков. Это работает, но два недостатка в том, что заголовок колеблется очень часто, а также заголовок имеет тенденцию быть неточным при резком повороте. Что такое хороший метод расчета заголовка сетки?Правильная ориентация 3D-сетки на точку в направлении ее заголовка

ответ

1

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

vec3 direction = tangent; 
vec3 up = normal; 
vec3 right = cross(direction,up); 

mat3 m; 
m[0] = right; 
m[1] = up; 
m[2] = direction; 
+0

В этом проблема: вычисление вектора направления в вашем методе или установка угла поворота в моем. Поскольку я имею дело со сферой, я бы посмотрел на касательную плоскость, а не на линию. Ячейка ориентирована так, что я использую '' rot.x'' и '' rot.y'', чтобы убедиться, что сетка находится на касательной плоскости (поэтому я мог вычислить вектор '' up''), но я ' m пытается получить соответствующее направление, основанное на точках, которые собирается сетка. –

+0

В чем проблема? В касательной плоскости имеются бесконечные возможные векторы. Это не должно быть так сложно найти;). – dari

+0

В принципе, у меня есть список из 5000 (u, v) точек, которые составляют путь, который проходит. Учитывая индекс '' i'' пути, я просматриваю точки '' i + 5'' '' i + 14'' и суммирует '' arctan2 (v2-v1, u2-u1) ''. Это работает, но это приводит к тому, что угол сетки много прыгает, и я пытаюсь найти способ сделать изменение угла более плавным. –

Смежные вопросы