Для простого перевода (ступенчато):
Возьмите позицию происхождения объекта в мировой системе координат и создать матрицу перевода из этого, первого умножения координат на -1:
1 0 0 -xo
0 1 0 -yo
0 0 1 -zo
0 0 0 1
Это приведет к перемещению объекта, чтобы его происхождение совпадало с мировым происхождением. Так возьмите у значения плоскости вы хотите, чтобы объект почивать на (при условии, что у является «вверх») и добавить, что к вектору вычисленного выше, так что вашим матриц становится:
1 0 0 -xo
0 1 0 (-yo + yp)
0 0 1 -zo
0 0 0 1
Это будет означать, что плоскость пересекает объект (предполагая, что происхождение находится где-то внутри объекта). Теперь найти ограничительную рамку объекта и принять минимальное значение у от начала координат объекта:
+------+ ymax
| |
| |
| o |
| |
+------+ ymin
где «о» происхождение.
Включите эту опцию в матрице:
1 0 0 -xo
0 1 0 (-yo + yp + (yo - min))
0 0 1 -zo
0 0 0 1
Я думаю, что это должно положить объект лежит на плоскости. Прошло некоторое время с тех пор, как я сделал такие вещи, поэтому у меня могут быть некоторые признаки неправильного пути - так что дважды проверьте числа и будьте готовы экспериментировать.