精灵表格的GLSL

问题描述

我有一个着色器,可在屏幕上渲染简单的纹理。但是,考虑到我有一个Sprite工作表(一个Sprite包含多个框架),并且只想渲染该工作表的一小部分(一个框架),我该如何使用GLSL做到这一点?

我不想操纵顶点缓冲区,因为那样会变得非常昂贵。

我的顶点着色器:

#version 330 core

layout (location = 0) in vec4 vertex; // <vec2 position,vec2 texCoords>

out vec2 TexCoords;

uniform mat4 model;
uniform mat4 projection;

void main()
{
    TexCoords = vertex.zw;
    gl_Position = projection * model * vec4(vertex.xy,0.0,1.0);
}

我的片段着色器:

#version 330 core

in vec2 TexCoords;

out vec4 FragColor;

uniform sampler2D texture;
uniform vec4 color;

void main()
{    
    FragColor = texture(texture,TexCoords) * color;
} 

这是我计算当前动画帧在X方向上在纹理中的位置的方法

m_animationData.x = (m_animationData.width * m_currentFrame);

因此,请考虑一下,如果我有一个128x32的Sprite工作表,并且Sprite的大小为32x32,则使其具有4帧动画。这样,每个帧的X值都等于

帧0:0 框架1:32 框架2:64 框架3:96

所缺少的是如何告诉着色器仅渲染纹理的那部分。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)