Как вывести матрицу для рендеринга в указанной c области экрана - PullRequest
0 голосов
/ 18 апреля 2020
private void DrawTexture(Texture source, RenderTexture target, RectInt position)
{
    if (source == null || target == null || m_DrawTextureShader == null)
        return;


    if (m_DrawTextureMateral == null)
        m_DrawTextureMateral = new Material(m_DrawTextureShader);

    // Construct transformation matrix
    // column major
    //
    // r-l  0   0   l
    // 0   t-b  0   b
    // 0    0   0   -1
    // 0    0   0    1

    float l = position.x * 2.0f / target.width - 1;
    float r = (position.x + position.width) * 2.0f / target.width - 1;
    float b = position.y * 2.0f / target.height - 1;
    float t = (position.y + position.height) * 2.0f / target.height - 1;
    var mat = new Matrix4x4();
    mat.m00 = r - l;
    mat.m03 = l;
    mat.m11 = t - b;
    mat.m13 = b;
    mat.m23 = -1;
    mat.m33 = 1;

    m_DrawTextureMateral.SetMatrix(Shader.PropertyToID("_ImageMVP"), GL.GetGPUProjectionMatrix(mat, true));

    Graphics.Blit(source, target, m_DrawTextureMateral);
}


//the corresponding shader code
//_ImageMVP is the matrix we just set above
v2f_img vert (appdata_img v)
{
    v2f_img o;
    o.pos = mul(_ImageMVP, v.vertex);
    o.uv = v.texcoord;

    return o;
}

fixed4 frag (v2f_img i) : SV_Target
{
    return tex2D(_MainTex, i.uv);
}

привет, парни. Я хочу выяснить происхождение вышеприведенной матрицы. Функция "drawtexture" создает матрицу (названную _ImageMVP) для рисования четырехугольника в указанном месте RTT, фактически квад заполнен экран с четырьмя вершинами, который состоит из четырех вершин ((0,0f, 0,0f, 0,1f), (0,0f, 1,0f, 0,1f), (1,0f, 1,0f, 0,1f), (1,0f, 0,0f, 0.1f) , Кажется, что эта матрица может быть преобразованием области просмотра, а затем предварительно умножена на некоторую матрицу смещения (от 0 ~ 1 до c пробел -1 ~ 1, потому что диапазон нашей вершины равен 0 ~ 1) , как результат, матрица достигает цели вышеупомянутой функции, но я думаю, но я не понимаю, как получить коэффициенты этой матрицы, особенно l, r, t, b, простите меня плохо в математике, я ' Мы добавили некоторые комментарии к коду на случай путаницы. Пожалуйста, скажите мне c математические шаги, которые нужно решить, заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...