我正在尝试使用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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。