【问题标题】:OpenGL LWJGL re-sizable textured cubeOpenGL LWJGL 可调整大小的纹理立方体
【发布时间】:2012-03-28 06:03:04
【问题描述】:

我正在尝试创建一种方法来绘制具有指定大小和纹理的立方体。问题是,当我调整立方体的大小时,纹理并没有随之调整大小。例如,如果我以 0.5F 大小绘制,则 16x16 纹理仅绘制 8x8 像素。我做错了什么?

static void drawCube(float size, Texture tex, int x, int y, int z) {
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    glTranslatef(x, y, z);

    tex.bind();
    glPolygonMode(GL_FRONT, GL_FILL);

    glBegin(GL_QUADS);
    glTexCoord2d(0.0f * size, 0.0f * size);
    glVertex3f(-1.0f * size, -1.0f * size, 1.0f * size);
    glTexCoord2d(1.0f * size, 0.0f * size);
    glVertex3f(1.0f * size, -1.0f * size, 1.0f * size);
    glTexCoord2d(1.0f * size, 1.0f * size);
    glVertex3f(1.0f * size, 1.0f * size, 1.0f * size);
    glTexCoord2d(0.0f * size, 1.0f * size);
    glVertex3f(-1.0f * size, 1.0f * size, 1.0f * size);
    glEnd();

    glBegin(GL_QUADS);
    glTexCoord2d(1.0f * size, 0.0f * size);
    glVertex3f(-1.0f * size, -1.0f * size, -1.0f * size);
    glTexCoord2d(1.0f * size, 1.0f * size);
    glVertex3f(-1.0f * size, 1.0f * size, -1.0f * size);
    glTexCoord2d(0.0f * size, 1.0f * size);
    glVertex3f(1.0f * size, 1.0f * size, -1.0f * size);
    glTexCoord2d(0.0f * size, 0.0f * size);
    glVertex3f(1.0f * size, -1.0f * size, -1.0f * size);
    glEnd();

    glBegin(GL_QUADS);
    glTexCoord2d(0.0f * size, 1.0f * size);
    glVertex3f(-1.0f * size, 1.0f * size, -1.0f * size);
    glTexCoord2d(0.0f * size, 0.0f * size);
    glVertex3f(-1.0f * size, 1.0f * size, 1.0f * size);
    glTexCoord2d(1.0f * size, 0.0f * size);
    glVertex3f(1.0f * size, 1.0f * size, 1.0f * size);
    glTexCoord2d(1.0f * size, 1.0f * size);
    glVertex3f(1.0f * size, 1.0f * size, -1.0f * size);
    glEnd();

    glBegin(GL_QUADS);
    glTexCoord2d(1.0f * size, 1.0f * size);
    glVertex3f(-1.0f * size, -1.0f * size, -1.0f * size);
    glTexCoord2d(0.0f * size, 1.0f * size);
    glVertex3f(1.0f * size, -1.0f * size, -1.0f * size);
    glTexCoord2d(0.0f * size, 0.0f * size);
    glVertex3f(1.0f * size, -1.0f * size, 1.0f * size);
    glTexCoord2d(1.0f * size, 0.0f * size);
    glVertex3f(-1.0f * size, -1.0f * size, 1.0f * size);
    glEnd();

    glBegin(GL_QUADS);
    glTexCoord2d(1.0f * size, 0.0f * size);
    glVertex3f(1.0f * size, -1.0f * size, -1.0f * size);
    glTexCoord2d(1.0f * size, 1.0f * size);
    glVertex3f(1.0f * size, 1.0f * size, -1.0f * size);
    glTexCoord2d(0.0f * size, 1.0f * size);
    glVertex3f(1.0f * size, 1.0f * size, 1.0f * size);
    glTexCoord2d(0.0f * size, 0.0f * size);
    glVertex3f(1.0f * size, -1.0f * size, 1.0f * size);
    glEnd();


    glBegin(GL_QUADS);
    glTexCoord2d(0.0f * size, 0.0f * size);
    glVertex3f(-1.0f * size, -1.0f * size, -1.0f * size);
    glTexCoord2d(1.0f * size, 0.0f * size);
    glVertex3f(-1.0f * size, -1.0f * size, 1.0f * size);
    glTexCoord2d(1.0f * size, 1.0f * size);
    glVertex3f(-1.0f * size, 1.0f * size, 1.0f * size);
    glTexCoord2d(0.0f * size, 1.0f * size);
    glVertex3f(-1.0f * size, 1.0f * size, -1.0f * size);
    glEnd();

    glTranslatef(-x, -y, -z);
}

【问题讨论】:

    标签: java opengl textures lwjgl cube


    【解决方案1】:

    纹理坐标始终使用 [0..1] 坐标系。如果要绘制完整的纹理,不要根据大小缩放纹理坐标,即

    glTexCoord2d(1.0f * size, 0.0f * size); // Not good! (For this purpose anyway)
    glTexCoord2d(1.0f, 0.0f); // Good!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多