C ++ OpenGL визуализации части изображения - PullRequest
4 голосов
/ 30 июля 2011

Допустим, у меня есть метод, который получает текстуру GLuint в качестве параметра, и я хотел бы отобразить ее часть.Подумайте, например, о наборе плиток, я хочу иметь возможность загружать набор плиток и отображать его части (плитки) при загрузке своего уровня.

Было бы оптимальным, если бы я каким-то образом смог определитьвысота, ширина, posX и posY в пиксельных координатах из набора плиток для рисования.

Я уже несколько часов пытаюсь, и любая помощь будет признательна.

Упрощенная версия рисования текстуры:

    void Render::draw(GLuint texture, float posX, float posY, float sizeX, float sizeY) {

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    glAlphaFunc(GL_GREATER,0.1f);

    glBindTexture( GL_TEXTURE_2D, texture );
    glPushMatrix();
    glTranslatef(posX,posY,0);
    glBegin( GL_QUADS );

    //Bottom-left vertex (corner)
    glTexCoord2i( 0, 0);
    glVertex2f( -sizeX,-sizeY);
    //Bottom-right vertex (corner)
    glTexCoord2i( 1, 0);
    glVertex2f(sizeX,-sizeY);
    //Top-right vertex (corner) 
    glTexCoord2i( 1, 1);
    glVertex2f(sizeX,sizeY);
    //Top-left vertex (corner)
    glTexCoord2i( 0, 1);
    glVertex2f( -sizeX,sizeY);

    glEnd();
    glPopMatrix();
    glDisable(GL_BLEND);
}

1 Ответ

3 голосов
/ 30 июля 2011

Вы делаете это, используя функцию glTexCoord.
Например, если ваш набор плиток содержит 4 плитки, и вы хотите отобразить плитку в верхнем левом углу [*], вы должны сделать что-то вроде этого:

glTexCoord2f( 0, 0);
glVertex2f( -sizeX,-sizeY);
glTexCoord2f( 0.5, 0);
glVertex2f(sizeX,-sizeY);
glTexCoord2f( 0.5, 0.5);
glVertex2f(sizeX,sizeY);
glTexCoord2i( 0, 0.5);
glVertex2f( -sizeX,sizeY);

[*] Я не помню, как именно работают координаты, но это легко проверить в вашем коде.

...