OpenGL,纹理始终具有相同的大小。

5
我正在尝试使用以下代码将纹理应用到顶点数组:

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_QUADS, 12, GL_UNSIGNED_BYTE, faceIndices);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

glDisable(GL_TEXTURE_2D);

使用这个纹理: texture 所以我得到了这个结果: Result 现在我想知道如何缩放地板纹理,我已经尝试使用Photoshop缩放纹理,但结果相同且更加沉重。
2个回答

6

我猜您是想让纹理的平铺度变小或者变大。如果是这样,请更改您的纹理坐标,而不是纹理本身(也就是texcoords中的数据)。

此外,您的示例纹理是蓝色的,但在渲染图像中它是棕色的。您可能在加载时交换了R+B通道。


2
还有,谢谢你提供的交换通道提示,我甚至都没有注意到 :) - Luca

2

纹理的映射取决于你的纹理坐标。让我们举个例子,它可以覆盖整个多边形。

glTexCoord2f(0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f);

如果您想要重复纹理五次,那么请提供类似于以下的坐标:

glTexCoord2f(0.0f, 0.0f);
glTexCoord2f(5.0f, 0.0f);
glTexCoord2f(5.0f, 5.0f);
glTexCoord2f(0.0f, 5.0f);`

像上面的例子一样,根据您想要映射的纹理,更改值即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接