2012-03-28 59 views
1

我想要制作一个方法来绘制一个具有指定大小和纹理的立方体。问题是,当我调整立方体的大小时,纹理不会随着它一起调整大小。例如,如果我以大小.5F绘制,则只有8x8像素的16x16纹理绘制。我究竟做错了什么?OpenGL LWJGL可调整大小的纹理立方体

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

回答

2

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

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