Search Unity

Offset the render position of second camera scissor viewport rect

Discussion in 'General Graphics' started by botove, Jan 22, 2020.

  1. botove

    botove

    Joined:
    Apr 10, 2015
    Posts:
    52
    Hi. Looking for help to offset the render result of second camera scissor rect. So need to take circle area from second camera and render it on top of main, but with possibility to position this piece. I use this code for changing projection matrix and simple circle/distance discard post effect shader to get the area i want from second camera.

    Code (CSharp):
    1. public static void SetScissorRect(Camera cam, Rect r)
    2.      {
    3.          if (r.x < 0)
    4.          {
    5.              r.width += r.x;
    6.              r.x = 0;
    7.          }
    8.          if (r.y < 0)
    9.          {
    10.              r.height += r.y;
    11.              r.y = 0;
    12.          }
    13.          r.width = Mathf.Min(1 - r.x, r.width);
    14.          r.height = Mathf.Min(1 - r.y, r.height);
    15.          cam.rect = new Rect(0, 0, 1, 1);
    16.          cam.ResetProjectionMatrix();
    17.          Matrix4x4 m = cam.projectionMatrix;
    18.          cam.rect = r;
    19.          Matrix4x4 m2 = Matrix4x4.TRS(new Vector3((1 / r.width - 1), (1 / r.height - 1), 0), Quaternion.identity, new Vector3(1 / r.width, 1 / r.height, 1));
    20.          Matrix4x4 m3 = Matrix4x4.TRS(new Vector3(-r.x * 2 / r.width, -r.y * 2 / r.height, 0), Quaternion.identity, Vector3.one);
    21.          cam.projectionMatrix = m3 * m2 * m;
    22.      }
    The question is what i need to do to move the position of this area when render it on top of main camera? Cause now it renders on position it was taken from. (1 and 2 on picture is cameras)

    camera.PNG
     
    Last edited: Jan 24, 2020
  2. botove

    botove

    Joined:
    Apr 10, 2015
    Posts:
    52
    edited the whole thread to make my point more clear. still looking for a solution