Yat*_*yte 2 c++ opengl qt textures texture-mapping
我想知道如何在对象的表面上循环纹理.
对于一个实际的例子,我正在尝试处理渲染世界几何,所以当我调整一个两倍于其纹理大小的世界对象时,纹理将出现两次 - 不是两倍大小.
有没有正确的方法来处理这个?我能想到的唯一一件事就是物理地创建一个全新的纹理,它具有合适的大小并手动复制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());
Run Code Online (Sandbox Code Playgroud)
这很容易做到.如果您当前使用范围[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);
Run Code Online (Sandbox Code Playgroud)
这些值实际上是默认值,因此如果您之前未将它们设置为其他值,则无需设置它们.
这指定应对[0.0,1.0]范围之外的纹理坐标重复纹理.例如,1.0和2.0之间的纹理坐标将等于0.0和1.0之间的坐标,重复整个纹理.
归档时间: |
|
查看次数: |
56 次 |
最近记录: |