gpt4 book ai didi

c++ - 在表面上循环纹理

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:58 25 4
gpt4 key购买 nike

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

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

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

这是一张图片,显示了我在 X 轴上调整平面大小时所寻找的内容:

example

与许多其他变量一起,我将一个对象的 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());

最佳答案

这很容易做到。当前使用 [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 之间的坐标,重复整个纹理。

关于c++ - 在表面上循环纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30017547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com