在地图应用程序中,某些区域填充有某种图案。图案图案需要随相机旋转(即始终与相机平行)。纹理坐标的计算以及旋转(尝试)发生在顶点着色器中。
#pattern.vert
// расчет координат
v_coord.x = a_position.x*u_proj_scale/u_tex_size.x;
v_coord.y = 1.0 -a_position.y*u_proj_scale/u_tex_size.y;
//поворот
float uniformAngle = radians(u_rotation);
float cos_factor = cos(uniformAngle);
float sin_factor = sin(uniformAngle);
v_coord = vec2((v_coord.x - 0.5) , (v_coord.y - 0.5)) * mat2(cos_factor, sin_factor, -sin_factor, cos_factor);
令人惊讶的是,对于方形纹理,它可以工作。但是,如果重复纹理不是正方形,那么在旋转时,它会改变比例。(收缩或拉伸)。第一个图像显示了一个非正方形图案的地图区域,当旋转 - 0 度(没有不成比例)。第二个,当旋转 90 度时(不成比例可见)。
我找到了解决方案。