我正在尝试在使用 C#/OpenGl 和 OpenTK 库编写的游戏程序中使用纹理图集。
我在 OpenGL 中将我的纹理图集作为纹理加载(尺寸为 256x256),每个图 block 为 32x32。
为了显示 map 集的第一个图 block ,我使用了以下代码:
GL.Begin(BeginMode.Quads);
GL.TexCoord2(0, 0); GL.Vertex2(0, 0);
GL.TexCoord2(0.125f, 0); GL.Vertex2((32 * zoom), 0);
GL.TexCoord2(0.125f, 0.125f); GL.Vertex2((32 * zoom), (32 * zoom));
GL.TexCoord2(0, 0.125f); GL.Vertex2(0, (32 * zoom));
GL.End();
0.125 是通过除以 1/8 计算得出的,8 是行/列中的图 block 数。
我不知道如何以这种方式计算第二个图 block 的坐标! 我尝试分别使用 0.125 和 0.25 代替 0 和 0.125,但这什么也没有呈现。我猜您不允许为 (EDIT) 第一个 (0) 纹理坐标使用大于零的值?
如果有人可以提供帮助或提供更好的方法,我们将不胜感激!
最佳答案
试一试:
int col = 0;
int row = 0;
float tex_w = 256;
float tex_h = 256;
float tile_w = 32;
float tile_h = 32;
float w_factor = tile_w / tex_w;
float h_factor = tile_h / tex_h;
float x_tex_beg = w_factor*(col+0);
float x_tex_end = w_factor*(col+1);
float y_tex_beg = h_factor*(row+0);
float y_tex_end = h_factor*(row+1);
关于c# - 在 OpenGL 中使用纹理图集计算单个图 block 的纹理坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413103/