如何在零件枢轴处旋转重复纹理的部分?

时间:2017-01-06 12:49:35

标签: opengl glsl shader fragment-shader 2d-games

我目前正在制作飞行游戏,它完全在片段着色器中处理基于perlin的岛渲染,因此我可以根据需要缩小。我现在想渲染像草一样的小细节作为着色器中的对象,因为使用四边形渲染它们在较大的缩放级别上会表现得过于沉重。

我唯一的问题是,我似乎无法弄清楚如何处理相机旋转,因此我的物体总是像广告牌那样面向相机。我将如何实现这一目标?

截图:

Grass without rotation

Grass with rotation

代码:

pos -= vec2(0.5);
pos = rotate(pos, CameraRotation);
pos += vec2(0.5);

vec2 fraction = vec2(fract(pos.x), fract(pos.y));
vec4 texColor = texture2D(tex, fraction);

我的旋转功能:

vec2 rotate(vec2 position, float degrees)
{
    float rotation = degrees * Pi / 180.0f;

    float rx = position.x * cos(rotation) - position.y * sin(rotation);
    float ry = position.x * sin(rotation) + position.y * cos(rotation);

    return vec2(rx, ry);
}

提前感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您希望矩阵不旋转顶点,则需要采用模型 - 视图矩阵并将左上角3 * 3部分设置为3 * 3单位矩阵,因为这是处理旋转的位置。 / p>