2012-03-28 5 views
1

Ich versuche, eine Methode zu erstellen, die einen Würfel mit einer angegebenen Größe und Textur zeichnen wird. Problem ist, wenn ich die Größe des Würfels verändere, ändert die Textur nicht mit ihm. Zum Beispiel, wenn ich mit der Größe .5F zeichne, zeichnen nur 8x8 Pixel einer 16x16 Textur. Was mache ich falsch?OpenGL LWJGL re-sizable texturierter Würfel

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

Antwort

2

Die Texturkoordinaten verwenden immer ein [0..1] -Koordinatensystem. Wenn Sie die gesamte Textur zeichnen möchten, skalieren Sie die Texturkoordinaten nicht entsprechend der Größe, dh

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