如何使用GL_REPEAT只重复一个选择纹理图集的? (OpenGL的)
-
20-08-2019 - |
题
<强>如何重复纹理地图的选择吗
例如,我的精灵(选择)是纹理坐标中:
GLfloat textureCoords[]=
{
.1f, .1f,
.3f, .1f,
.1f, .3f,
.3f, .3f
};
然后我想重复子画面的 N次通过定义的三角形带材(或四):
GLfloat vertices[]=
{
-100.f, -100.f,
100.f, -100.f,
-100.f, 100.f,
100.f, 100.f
};
我知道它是与GL_REPEAT
和textureCoords外出时通过的范围[0,1]
。然而,这不工作:(试图重复N = 10)
GLfloat textureCoords[]=
{
10.1f, 10.1f,
10.3f, 10.1f,
10.1f, 10.3f,
10.3f, 10.3f
};
我们看到我们的全部纹理图集重复...
我怎么会做这种正确的方式?
解决方案
它不能完成它在问题的描述的方式。 OpenGL的纹理坐标模式只适用于在整个纹理。
通常情况下,重复的纹理,你会绘制多边形比你的纹理意味着“更大”。举例来说,如果你有,你想重复的次数一方形纹理(比如为六个)在一个更大的区域,你会画一个矩形的六倍宽是高大的。然后你会设置纹理坐标为(0,0) - (6,1)和纹理模式“重复”。当跨越该多边形内插,纹理坐标超越1个意志,由于重复被启用,“环绕”的质感,使质地跨越矩形被映射六次。
纹理涡卷模式的无支持的类型的操作中的问题所描述的,即,它们都映射到全[0,1]范围内,而不是一些任意子集。当你使用只是一个纹理的一部分纹理,有没有办法来指定较大纹理的方式,使的OpenGL重复它只子矩形内的坐标。
您基本上有两种选择:创建一个新的纹理,只有拥有精灵您从现有的纹理需要或写一个GLSL顶点程序映射纹理坐标适当
。其他提示
我不知道你能做到这一点。我想OpenGL的纹理坐标模式只适用于整个纹理。当使用地图,你使用“子纹理”,让你的纹理坐标从来没有接近0和1,其中包装和夹紧发生在正常范围。
有可能会扩展到解决这个问题,我还没有检查。
编辑:通常情况下,重复的纹理,你会绘制多边形比你的纹理意味着“更大”。举例来说,如果你有,你想重复的次数一方形纹理(比如为六个)在一个更大的区域,你会画一个矩形的六倍宽是高大的。然后你会设置纹理坐标为(0,0) - (6,1)和纹理模式“重复”。当跨越该多边形内插,纹理坐标超越1个意志,由于重复被启用,“环绕”的质感,使质地跨越矩形被映射六次。
这是有点粗没有图像来解释。
总之,当你使用只是一个纹理的一部分纹理,有没有办法来指定较大纹理的方式,使的OpenGL重复它只子矩形内的坐标。
纹理涡卷模式的无支持你正在寻找的类型的操作,即,它们都映射到全[0,1]范围内,而不是一些任意子集。你基本上有两种选择:要么创建一个新的纹理,只有拥有精灵您从现有的纹理需要或写一个GLSL像素程序映射纹理坐标适当
虽然这可能是一个老话题;这里就是我最后做它:
一个解决方法是创建多个网格,胶合在一起含有的纹理UV的所述子集。
例如为: 我有包含在大纹理地图内的激光纹理,在U [0.05 - 0.1]&V [0.05-0.1]。
我然后构造Ñ网格,每一个都具有U [0.05-0.1]&V [0.05-0.1]的坐标。 (N =长度/ texture.height;高度为我想重复或更容易纹理的尺寸:的倍量我要重复的纹理)
此解决方案将是比具有纹理之后重新加载纹理更具成本效益。 特别是如果你批次所有渲染调用(你应该)。
(OpenGL ES的1.0,1.1,2.0 - 移动设备2011)
无法做到......