如何解决如何在 OpenGL 着色器中从纹理图块图中绘制图块?
所以我有一个 AtlasTexture,其中包含绘制瓦片地图所需的所有瓦片。
现在我通过一个uniform传递AtlasTexture,想法是改变纹理坐标以从地图集中选择我需要的部分。
问题是我只能在片段着色器上指定从零原点切割纹理,是否可以指定一个 offsetX 来告诉着色器我想从哪里开始绘制?
float vertices[] = {
// aPosition // aTextureCoordinate
0.0f,0.0f,100.0f,1.0f,};
uint32_t indices[] = {0,1,2,3,1};
顶点着色器
#version 330 core
layout(location = 0) in vec2 aPosition;
layout(location = 1) in vec2 aTextureCoordinate;
out vec2 textureCoordinate;
void main() {
gl_Position = vec4( aPosition.x,aPosition.y,1.0f);
textureCoordinate = vec2(
aTextureCoordinate.x / 3.0f,// This selects the first tile in the uAtlasTexture
aTextureCoordinate.y
);
}
片段着色器
#version 330 core
in vec2 textureCoordinate;
uniform sampler2D uAtlasTexture; // Has 3 tiles
out vec4 color;
void main() {
color = texture(uAtlasTexture,textureCoordinate);
}
解决方法
使用 Uniform 变量作为偏移量。 `vec2(1.0/3.0 + aTextureCoordinate.x / 3.0f,aTextureCoordinate.y); "selects2 2nd tile。使用uniform而不是1.0/3.0:
Expecting a single string value: [type=integer; extent=1]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。