FIX:world to screen calculation was error

jira: none
Change-Id: I13f978e4c15882c271ffe6c6fc5fbcf69482a224
This commit is contained in:
zhou.xu 2024-07-09 19:52:43 +08:00 committed by Lane.Wei
parent 379238772e
commit 0e88cb8858

View File

@ -701,9 +701,7 @@ void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_
return; return;
Transform3d world_to_eye = camera.get_view_matrix(); Transform3d world_to_eye = camera.get_view_matrix();
Transform3d world_to_screen = camera.get_projection_matrix() * world_to_eye;
const std::array<int, 4>& viewport = camera.get_viewport(); const std::array<int, 4>& viewport = camera.get_viewport();
struct Owner struct Owner
{ {
int obj_idx; int obj_idx;
@ -782,17 +780,14 @@ void GLCanvas3D::Labels::render(const std::vector<const ModelInstance*>& sorted_
ImGuiWrapper& imgui = *wxGetApp().imgui(); ImGuiWrapper& imgui = *wxGetApp().imgui();
// render info windows // render info windows
Matrix4d world_to_screen = camera.get_projection_matrix().matrix() * world_to_eye.matrix();
for (const Owner& owner : owners) { for (const Owner& owner : owners) {
Vec3d screen_box_center = world_to_screen * owner.world_box.center(); Vec4d temp_center(owner.world_box.center().x(), owner.world_box.center().y(), owner.world_box.center().z(), 1.0);
float x = 0.0f; Vec4d temp_ndc = world_to_screen * temp_center;
float y = 0.0f; Vec3d screen_box_center = Vec3d(temp_ndc.x(), temp_ndc.y(), temp_ndc.z()) / temp_ndc.w();
if (camera.get_type() == Camera::EType::Perspective) {
x = (0.5f + 0.001f * 0.5f * (float)screen_box_center(0)) * viewport[2]; float x = 0.5f * (1 + screen_box_center(0)) * viewport[2];
y = (0.5f - 0.001f * 0.5f * (float)screen_box_center(1)) * viewport[3]; float y = 0.5f * (1 - screen_box_center(1)) * viewport[3];
} else {
x = (0.5f + 0.5f * (float)screen_box_center(0)) * viewport[2];
y = (0.5f - 0.5f * (float)screen_box_center(1)) * viewport[3];
}
if (x < 0.0f || viewport[2] < x || y < 0.0f || viewport[3] < y) if (x < 0.0f || viewport[2] < x || y < 0.0f || viewport[3] < y)
continue; continue;