【问题标题】:How to change ortho matrix size in shader如何在着色器中更改正交矩阵大小
【发布时间】:2020-10-10 20:27:54
【问题描述】:

我尝试缩放正交投影矩阵,但它似乎没有缩放其尺寸。我正在使用正交投影进行定向照明。但是如果主相机在地面上,我想让我的正交矩阵范围更大。

例如,如果相机为零,则 orho 矩阵为 glm::ortho(-10.0f , 10.0f , -10.0f , 10.0f , 0.01f, 4000.0f)

但是如果相机在 y 方向上移动 400,我希望这个矩阵像 glm::ortho(-410.0f , 410.0f , -410.0f , 410.0f , 0.01f, 4000.0f)

但我想通过矩阵乘法或加法在着色器中执行此操作

【问题讨论】:

    标签: opengl matrix glsl glm-math projection-matrix


    【解决方案1】:

    Orthographic Projection 矩阵可以通过以下方式计算:

    r = right, l = left, b = bottom, t = top, n = near, f = far
    
    X:    2/(r-l)         0               0               0
    y:    0               2/(t-b)         0               0
    z:    0               0               -2/(f-n)        0
    t:    -(r+l)/(r-l)    -(t+b)/(t-b)    -(f+n)/(f-n)    1
    

    例如在 glsl 中:

    float l = -410.0f;
    float r =  410.0f;
    float b = -410.0f;
    float t =  410.0f;
    float n =  0.01f;
    float f =  4000.0f;
    
    mat4 projection = mat4(
        vec4(2.0/(r-l),     0.0,          0.0,         0.0),
        vec4(0.0,           2.0/(t-b),    0.0,         0.0),
        vec4(0.0,           0.0,         -2.0/(f-n),   0.0),
        vec4(-(r+l)/(r-l), -(t+b)/(t-b), -(f+n)/(f-n), 1.0)
    );
    

    此外,您还可以缩放正交投影矩阵:

    c++

    glm::mat4 ortho = glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, 0.01f, 4000.0f);
    
    float scale = 10.0f / 410.0f;
    glm::mat4 scale_mat = glm::scale(glm::mat4(1.0f), glm::vec3(scale, scale, 1.0f));
    glm::mat4 ortho_new = ortho * scale_mat;
    

    gsl

    float scale = 10.0 / 410.0;
    mat4 scale_mat = mat4(
        vec4(scale, 0.0,   0.0, 0.0),
        vec4(0.0,   scale, 0.0, 0.0),
        vec4(0.0,   0.0,   1.0, 0.0),
        vec4(0.0,   0.0,   0.0, 1.0)
    );
    
    mat4 ortho_new = ortho * scale_mat;
    

    【讨论】:

    • 谢谢。有没有其他解决方案,比如与另一个矩阵相乘?
    • @aramok 我已经扩展了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多