Skip to content

Commit e7c9c5d

Browse files
committed
render_opengl: Make camera translation represent center of viewport, not top-left
1 parent c7daf0f commit e7c9c5d

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

engine/modules/render_opengl/src/gl_renderer.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use argus_render::common::{AttachedViewport, Matrix4x4, RenderCanvas, Transform2
3131
use argus_render::constants::*;
3232
use argus_render::twod::get_render_context_2d;
3333
use argus_resman::Resource;
34-
use argus_util::math::Vector2u;
34+
use argus_util::math::{Vector2f, Vector2u};
3535
use argus_wm::*;
3636
use std::ffi::CStr;
3737
use std::ptr;
@@ -58,7 +58,7 @@ impl GlRenderer {
5858

5959
let gl_mgr = WindowManager::instance().get_gl_manager()
6060
.expect("Failed to get OpenGL manager");
61-
61+
6262
self.state.gl_context =
6363
Some(gl_mgr.create_context(window, 3, 3, context_flags).unwrap());
6464
self.state.gl_context.as_ref().unwrap().make_current(window)
@@ -400,17 +400,19 @@ fn recompute_2d_viewport_view_matrix(
400400
let center_x = (viewport.left + viewport.right) / 2.0;
401401
let center_y = (viewport.top + viewport.bottom) / 2.0;
402402

403-
let cur_translation = &transform.translation;
403+
let mut adj_transform = transform.clone();
404+
adj_transform.translation.x += (viewport.right - viewport.left) / 2.0;
405+
adj_transform.translation.y += (viewport.bottom - viewport.top) / 2.0;
404406

405407
let anchor_mat_1 = Matrix4x4::from_row_major([
406408
1.0,
407409
0.0,
408410
0.0,
409-
-center_x + cur_translation.x,
411+
-center_x + adj_transform.translation.x,
410412
0.0,
411413
1.0,
412414
0.0,
413-
-center_y + cur_translation.y,
415+
-center_y + adj_transform.translation.y,
414416
0.0,
415417
0.0,
416418
1.0,
@@ -424,11 +426,11 @@ fn recompute_2d_viewport_view_matrix(
424426
1.0,
425427
0.0,
426428
0.0,
427-
center_x - cur_translation.x,
429+
center_x - adj_transform.translation.x,
428430
0.0,
429431
1.0,
430432
0.0,
431-
center_y - cur_translation.y,
433+
center_y - adj_transform.translation.y,
432434
0.0,
433435
0.0,
434436
1.0,
@@ -440,10 +442,10 @@ fn recompute_2d_viewport_view_matrix(
440442
]);
441443

442444
let view_mat =
443-
transform.get_translation_matrix() *
445+
adj_transform.get_translation_matrix() *
444446
anchor_mat_2 *
445-
transform.get_rotation_matrix() *
446-
transform.get_scale_matrix() *
447+
adj_transform.get_rotation_matrix() *
448+
adj_transform.get_scale_matrix() *
447449
anchor_mat_1;
448450

449451
*dest = compute_proj_matrix(resolution.x, resolution.y) * view_mat;

0 commit comments

Comments
 (0)