C ++ Opengl渲染图像的一部分

时间:2011-07-30 15:57:33

标签: c++ image opengl rendering

假设我有一个方法将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 个答案:

答案 0 :(得分:3)

您可以使用glTexCoord功能执行此操作 例如,如果tileset包含4个tile,并且您想显示左上角[*] tile,则可以执行以下操作:

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

[*]我不记得坐标是如何工作的,但很容易在你的代码中测试。