OpenGL LWJGL многоразмерный текстурированный куб - PullRequest
1 голос
/ 28 марта 2012

Я пытаюсь создать метод, который будет рисовать куб с указанным размером и текстурой.Проблема в том, что когда я изменяю размер куба, текстура не изменяется вместе с ним.Например, если я рисую с размером .5F, только 8x8 пикселей из текстуры 16x16 рисуют.Что я делаю не так?

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

1 Ответ

2 голосов
/ 28 марта 2012

Координаты текстуры всегда используют систему координат [0..1]. Если вы хотите нарисовать полную текстуру, не масштабируйте координаты текстуры в соответствии с размером, т.е.

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