如何解决精灵表格的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 举报,一经查实,本站将立刻删除。