<强>如何重复纹理地图的选择吗

例如,我的精灵(选择)是纹理坐标中:

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)

无法做到......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top