From c2c11c689f421711d64daca7895800ee905ae739 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Tue, 20 Dec 2022 08:48:39 +0800 Subject: [PATCH] [UI][FIX] Fix thumbnail camera position --- FinalProject/modelthumbnailwidget.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/FinalProject/modelthumbnailwidget.cpp b/FinalProject/modelthumbnailwidget.cpp index 2c0f140..64308e5 100644 --- a/FinalProject/modelthumbnailwidget.cpp +++ b/FinalProject/modelthumbnailwidget.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "modelthumbnailwidget.h" @@ -56,7 +57,18 @@ void ModelThumbnailWidget::initializeGL() { fragmentShader.dispose(); _object.setModel(_model->copyToCurrentContext()); - _camera.setPosition(glm::vec3(0.0f, 0.0f, 7.0f)); + _object.updateBoundary(); + + // Move the camera to the right position + float viewportWidth = width(); + float viewportHeight = height(); + float fovy = _camera.fovy(); + float fovx = 2.0f * atanf(tanf(fovy / 2.0f) * viewportWidth / viewportHeight); + float objectHeight = _object.boundary().topControlPoint().y - _object.boundary().bottomControlPoint().y; + float objectWidth = _object.boundary().topControlPoint().x - _object.boundary().bottomControlPoint().x; + float distance = std::max(objectHeight / (2 * tan(fovy / 2)), objectWidth / (2 * tan(fovx / 2))); + glm::vec2 center = _object.boundary().centerPoint(); + _camera.setPosition(glm::vec3(center, _object.boundary().topControlPoint().z + distance + 3.0f)); } void ModelThumbnailWidget::paintGL() {