3D-графика: как думать о положении модели - PullRequest
0 голосов
/ 21 сентября 2010

Я новичок в графике. Я экспериментирую с OpenGL / JOGL.

У меня есть файл .obj, который я отображаю. Я с трудом размещаю его именно там, где я хочу, в мире. У меня есть самолет, на котором я хочу, чтобы он опирался, принимая во внимание размер, установленный во время выполнения модели. Простого преобразования недостаточно, потому что мне нужно учитывать размеры модели.

Даже тогда я не уверен, как перевести 0 в системе координат .obj в мировую систему координат.

Каков идиоматический шаблон для решения этой проблемы?

Ответы [ 2 ]

1 голос
/ 21 сентября 2010

Для простого перевода (в пошаговом режиме):

Возьмите позицию начала координат объекта в мировых координатах и ​​создайте из него матрицу перевода, сначала умножив начало координат на -1:

1 0 0 -xo
0 1 0 -yo
0 0 1 -zo
0 0 0  1

Это переместит объект так, что его происхождение совпадает с мировым происхождением.Итак, возьмите значение y плоскости, на которой вы хотите, чтобы объект опирался (предполагая, что y «вверх»), и добавьте это к вектору, вычисленному выше, чтобы ваша матрица стала:

1 0 0 -xo
0 1 0 (-yo + yp)
0 0 1 -zo
0 0 0  1

Это будет означать, чтоплоскость пересекает объект (при условии, что источник находится где-то внутри объекта).Теперь найдите ограничительную рамку объекта и возьмите минимальное значение y из источника объекта:

+------+ ymax
|      |
|      |
|   o  |
|      |
+------+ ymin

, где «o» - это источник.

Включите это в матрицу:

1 0 0 -xo
0 1 0 (-yo + yp + (yo - min))
0 0 1 -zo
0 0 0  1

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

0 голосов
/ 25 сентября 2010

Вы должны установить происхождение вашей модели у ее ног, и ок.под его центром тяжести.Таким образом, когда вы масштабируете его, его положение (относительно земли) не изменится.

Затем просто переведите его туда, где хотите, затем поверните, затем масштабируйте (в этом порядке)все готово.

...