【问题标题】:opengl, textures have always the same sizeopengl,纹理始终具有相同的大小
【发布时间】:2013-01-08 00:22:04
【问题描述】:

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

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);

使用这种纹理:

所以我有这个结果:

现在我想知道如何缩放地板纹理,我已经尝试使用 Photoshop 缩放纹理,但结果相同但更重。

【问题讨论】:

    标签: opengl textures image-scaling


    【解决方案1】:

    我假设您的意思是您希望纹理少平铺或平铺更多。在这种情况下,请更改您的纹理坐标,而不是纹理(即 texcoords 中的任何数据)。

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

    【讨论】:

    • 也谢谢你换频道的提示,我都没注意到 :)
    【解决方案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);`
    

    像上面的例子一样改变你想要如何映射纹理的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多