У меня есть серия рекламных щитов.Эффект, которого я хочу достичь, заключается в том, что при увеличении масштаба я хотел бы, чтобы спрайты оставались постоянными (поскольку они относительно далеко).Я только хочу, чтобы они двигались по направлению движения краев (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;
}