Для простого перевода (в пошаговом режиме):
Возьмите позицию начала координат объекта в мировых координатах и создайте из него матрицу перевода, сначала умножив начало координат на -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
Я думаю, что это должно положить ваш объект на плоскость.Прошло много времени с тех пор, как я делал подобные вещи, поэтому у меня могли быть некоторые признаки неправильного направления - так что перепроверьте цифры и будьте готовы к экспериментам.