Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: cannot figure out opengl viewport, orthographic projection, aspect ratio issues.

  1. #1
    Intern Newbie
    Join Date
    Aug 2012
    Posts
    48

    cannot figure out opengl viewport, orthographic projection, aspect ratio issues.

    I'm still having a real difficult time sorting out opengl's glViewport, orthographic projection matrix and aspect ratio getting them to work together to get the effect that I want.

    I understand that glViewport maps opengl NDC cube to whatever size you pass in to glviewport from left, bottom, top, right.

    I create my glViewport and orthographic projection like this.

    Code :
        int width = 320;
        int height = 480;
        point3 eye, center;
        vec3 up;
        vmathP3MakeFromElems(&eye, 0, 0, -20);
        vmathP3MakeFromElems(&center, 0, 0, -1);
        vmathV3MakeFromElems(&up, 0, 1, 0);
        vmathM4MakeLookAt(&v_mat, &eye, &center, &up);
     
        vmathM4MakeOrthographic(&p_mat, 0, width, 0, height, 1, 100);
        glViewport(0, 0, width, height);

    I don't currently move the view position because I want 0,0 to be in the lower left, width to go from 0-width from left to right and height to go from 0-height from bottom to top.

    What I just can't wrap my head around is how to use the aspect ratio. Not to mention when I try to do the resize function.

    Code :
        vmathM4MakeOrthographic(&p_mat, 0, w / aspect, 0, h, 1, 100);
        glViewport(0, 0, w, h);

    the above code what I would like to do is keep the height fixed and scale the width.

    I'd like to have a design resolution say 320x480 view that's always centered and if I have a fixed height the width scales out horizontally or fixed width and have the top and bottom stretch like the image below.



    There's the view projection matrix, the glviewport and orthographic projection that all just seem to be a bit much to wrap my head around it all.

    how can I achieve the look that I am going for?

  2. #2
    Intern Contributor
    Join Date
    Feb 2016
    Posts
    64
    You should just use glViewport with fixed width and height values, and the origin would be calculated from the actual window size (origin = (window_size-fixed_size)/2 would do it).

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •