.objファイルから3Dオブジェクトを読み込み、特定のサイズにスケーリングするために、スケーリングと移動よりも行列の変更が望ましい各ベクトル)。 .obj解析関数から、オブジェクトの境界ボックスの幅、高さ、奥行き、中心を知ることができます。OpenGLを使って3Dオブジェクトをスケーリングして移動する
(-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());
XN、YNおよびZnキューブは、各軸と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全モデル:
(ときキューブの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軸に何かがうまくいかないということです。
model.Move(x_trans - model.GetX(), y_trans - model.GetY(), z_trans - model.GetZ());
移動機能やスケール機能の移動とは、モデル行列ではなく、座標の実際の配列をスケーリング深さは複数のタイルの長さです(x軸とy軸では完全に機能します)。
写真が状況を理解するのに役立つと私に言い聞かせます。