问题描述
我有一个着色器,可在屏幕上渲染简单的纹理。但是,考虑到我有一个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 (将#修改为@)