【问题标题】:Looping a texture on a surface在表面上循环纹理
【发布时间】:2015-05-03 18:13:23
【问题描述】:

我想知道如何在物体表面循环纹理。

举一个实际的例子,我正在尝试处理渲染世界几何,这样当我将世界对象的大小调整为其纹理大小的两倍时,纹理将出现两次 - 而不是两倍大小。

是否有任何正确的方法来处理这个问题?我唯一能想到的就是物理创建一个大小合适的全新纹理并手动复制 X 次,但这听起来会很快消耗大量内存。

这是在 XAxis 上调整平面大小时显示我正在寻找的图片:

与许多其他变量一起,我将对象的 UVMap 作为“纹理坐标”传递给我的着色器,然后在调用绘制数组之前执行以下操作以渲染对象的纹理:

QImage image;
image = worldObject->getQImage(i); //Within a for loop, grabs the right texture if the object has differing textures per face of object

glBindTexture(GL_TEXTURE_2D, spot);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image.bits());

【问题讨论】:

    标签: c++ qt opengl textures texture-mapping


    【解决方案1】:

    这很容易做到。在您当前使用范围 [0.0, 1.0] 中的纹理坐标的地方,您只需使用更大的范围。例如,要重复纹理两次,如您的示例所示,您可以在 [0.0, 2.0] 范围内指定纹理坐标。

    这与使用 GL_REPEAT 的纹理环绕模式结合使用:

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    

    这些值实际上是默认值,因此如果您之前没有将它们设置为不同的值,则无需设置它们。

    这指定应该为 [0.0, 1.0] 范围之外的纹理坐标重复纹理。例如,1.0 和 2.0 之间的纹理坐标将等同于 0.0 和 1.0 之间的坐标,重复整个纹理。

    【讨论】:

    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2015-08-20
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多