【发布时间】:2015-01-04 03:42:17
【问题描述】:
假设您有一个简单的游戏 Tileset,如下所示:
现在,当处理一个简单的 GUI 框架(如 .NET)时,加载该图像、选择其中的一部分,然后逐块绘制它会相当容易。但是,当使用 OpenGL 时,这个过程似乎有点……呃,独特的。我可以轻松地将该图像加载到 OpenGL 中并将其绑定到某些几何图形,但是,当涉及到“选择”某些图块(没有解除绑定所述纹理)时,它似乎需要与传统的 x、y、width 不同的数学类型,高度接近。
如果我想为当前图块选择 64,128(像素空间中的坐标)的图块,我会使用反映理想的纹理坐标,而不是我在其他网站上看到人们建议的这些奇怪的分数。
似乎OpenGL在绑定纹理时根本不使用像素空间,或者我可能误解了这里的一些基本概念;我不确定。
这是一种在任意位置渲染 32 x 32 瓦片的简单方法(在本示例中将保持在 0,0):
int spriteX = 0;
int spriteY = 0;
int spriteWidth = 32;
int spriteHeight = 32;
GL.BindTexture( TextureTarget.Texture2D , texture );
GL.Begin( PrimitiveType.Quads );
{
GL.TexCoord2( 0 , 1 );
GL.Vertex2( spriteX , spriteY );
GL.TexCoord2( 1 , 1 );
GL.Vertex2( spriteX + spriteWidth , spriteY );
GL.TexCoord2( 1 , 0 );
GL.Vertex2( spriteX + spriteWidth , spriteY + spriteHeight );
GL.TexCoord2( 0 , 0 );
GL.Vertex2( spriteX , spriteY + spriteHeight );
}
GL.End();
在任何人抱怨即时模式之前:我完全意识到它已被弃用;我不打算将它用于任何类型的成品。
我不会用整个纹理(上面的代码正在做的)映射绘制的四边形,而是告诉它只映射图像的一个区域,比如:X 64,Y 128,宽度 32,高度 32 .
【问题讨论】:
标签: opengl 2d texture-mapping opentk