opengl,纹理总是大小相同

时间:2013-01-24 09:36:48

标签: opengl textures image-scaling

我正在尝试将纹理应用于以下代码的顶点数组:

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 个答案:

答案 0 :(得分:7)

我认为你的意思是你希望纹理更小,或更多。在这种情况下,更改纹理坐标,而不是纹理(即texcoords中的任何数据)。

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

答案 1 :(得分: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);`

如上例所示,更改值的映射方式。