рисование модели на склоне - PullRequest
0 голосов
/ 19 января 2011

Мои модели выровнены по оси.

Я знаю нормаль поверхности, на которой хочу их нарисовать; Как вычислить вращение или матрицу вращения, которую я должен использовать, чтобы нарисовать модель перпендикулярно поверхности?

1 Ответ

3 голосов
/ 20 января 2011

Что ж, если u - это вектор повышения единицы, а n - нормаль к поверхности единицы, то вам нужно вращение, которое превращает u в п . (Это вращение не уникально: вы можете составить любое вращение примерно за u до него и любое вращение около n после него.)

Как вычислить это вращение? Ну, это зависит от того, с какой структурой или API вы работаете, и как представлены ротации. Достойная структура имеет вызов API для этого, например, в Unity 3D есть Quaternion.FromToRotation.

Если у вас нет вызова API для этого, тогда вы можете решить это для себя. Любое вращение может быть представлено в виде ось-угол , скажем ( a , θ). Здесь θ - угол между векторами u и n (который можно вычислить, используя правило косинуса : u · n = | u | | n | cos θ), а a - ось, перпендикулярная обоим векторам: a = u × n . (Есть два особых случая: когда u = n будет выполняться нулевое вращение, а если u = - n , любая половина вращение вокруг любого вектора, перпендикулярного к u .)

Если вы используете OpenGL, вы можете позвонить glRotate.

И если у вас даже этого нет ... ну, вам не нужно задавать этот базовый вопрос! Но см. Википедию , чтобы узнать, как превратить представление оси в угол в матричное представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...