Как уменьшить поле зрения в матрице проекции (увеличить), не увеличивая размер некоторых квадратов с биллбордом? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть серия рекламных щитов.Эффект, которого я хочу достичь, заключается в том, что при увеличении масштаба я хотел бы, чтобы спрайты оставались постоянными (поскольку они относительно далеко).Я только хочу, чтобы они двигались по направлению движения краев (x, y), когда я увеличиваю центральную точку фокусировки.Когда поле зрения меняется, я звоню:

_projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(fieldOfView), _screenAspect, 0.2f, 4.2f);

Мой вершинный шейдер для четырехугольников с биллбордом выглядит так:

attribute vec4 aPos;
attribute vec4 aUV; // third component is the size

uniform mat4 projMat;
uniform mat4 modelViewMat;

void main(void) {
    // determine initial size
    float size = aUV.z;

    // compute vertex position so quad is always camera-facing
    vec2 offset = aUV.xy * size;

    vec4 pos = modelViewMat * aPos;
    pos.xy += offset;

    gl_Position = projMat * pos;
    // fix subpixel flickering by adding slight screenspace size
    gl_Position.xy += aUV.xy * max(0.0, gl_Position.z) / 100.0;
}
...