Я пытаюсь загрузить 3D-объект из файла .obj, чтобы масштабировать его до определенного размера, чтобы переместить его на определенную координату (я предпочитаю изменять его матрицу, чем масштабирование и перемещение каждый вектор). Из функции разбора .obj я знаю ширину, высоту, глубину и центр ограничивающего прямоугольника объекта.Масштабирование и перемещение 3d-объекта с openGL
Чтобы сделать это ясно, у меня есть карта плиток с (-1,0, 0, 1,0) до (1,0, 0, -1,0) и для моделирования всего, что я использую obj-файл куба (с длиной 40,0). Ясно, что перед печатью мне пришлось масштабировать куб.
Моя проблема заключается в том, что я продолжаю отказываться от правильного перемещения куба на оси z. Масштабирование было сделано таким образом:
model.Scale(xn * x_unit/model.GetWidth(), yn * y_unit/model.GetHeight(), zn * z_unit/model.GetDepth());
где х, уп и гп являются количество плиток куб будет растягиваться на каждой оси и x_unit, y_unit и z_unit являются длина каждой плитки в этой оси (это функция работает отлично)
для того, чтобы переместить куб до нужного места, я вычислил сумму перевода в каждой оси (предполагается, что центр куба находится на 0, 0, 0):
x_trans = (((xn - (2.0f/x_unit))/2.0f) * model.GetOriginalWidth())/xn;
y_trans = (0.5f * model.GetOriginalHeight());
z_trans = ((zn - (2.0f/z_unit))/2.0f) * model.GetOriginalDepth()/zn;
И transalting все модель:
model.Move(x_trans - model.GetX(), y_trans - model.GetY(), z_trans - model.GetZ());
Функция Move и функция перемещает Масштаб и масштабирует матрицу модели, а не реальный массив координат:
void Graphic3dModelPart::Move(float dx, float dy, float dz)
{
model_ = glm::translate(model_, glm::vec3(dx, dy, dz));
mvp_ = projection_ * view_ * model_;
}
void Graphic3dModelPart::Scale(float sx, float sy, float sz)
{
model_ *= glm::scale(glm::mat4(), glm::vec3(sx, sy, sz));
mvp_ = projection_ * view_ * model_;
}
Однако проблема заключается в том, что по оси Z что-то пойдет не так (когда куба глубина более одной длины плитки (по оси x и оси y она отлично работает).
Если фотографии помогут понять ситуацию, скажите мне, и я загружу.