编程语言
首页 > 编程语言> > c#-在OpenGL中计算具有纹理图集的单个图块的纹理坐标

c#-在OpenGL中计算具有纹理图集的单个图块的纹理坐标

作者:互联网

我正在尝试使用OpenTK库在C#/ OpenGl中编写的游戏程序中使用纹理图集.

我将纹理图集加载为OpenGL中的纹理(尺寸为256×256),每个图块均为32×32.

为了显示地图集的第一个图块,我使用了以下代码:

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是行/列中的图块数.

我不知道如何以这种方式计算第二个图块的坐标!
我尝试分别使用0.125和0.25代替0和0.125,但这没有任何作用.我猜您不允许为(EDIT)第一个(0)纹理坐标使用大于零的值吗?

如果有人可以帮助或提供更好的方法,将不胜感激!

解决方法:

>摆脱“ *缩放”.只需在gl.begin之前调用gl.scale(zoom,zoom,1)即可.
>像这样在嵌套循环中浏览8×8磁贴:

GL.Scale(zoom * 32,zoom * 32,1);
GL.Begin(BeginMode.Quads);
对于(int i = 0; i< 8; i)
对于(int j = 0; j< 8; j)
{
var x = i / 8.0; //纹理比例
var y = j / 8.0;
GL.TexCoord2(x,y); GL.Vertex2(i,j);
GL.TexCoord2(x 0.125f,y); GL.Vertex2(i 1,j);
GL.TexCoord2(x 0.125f,y 0.125f); GL.Vertex2(i 1,j 1);
GL.TexCoord2(x,y 0.125f); GL.Vertex2(i,j 1);
}
GL.End();
GL.Scale(1.0 /(zoom * 32),1.0 /(zoom * 32),1); //取消缩放

标签:textures,opengl,c
来源: https://codeday.me/bug/20191208/2095014.html