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

San*_*ane 5 c++ opengl rendering image

假设我有一个获取 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);
}
Run Code Online (Sandbox Code Playgroud)

Art*_*ium 3

您可以使用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);
Run Code Online (Sandbox Code Playgroud)

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

  • 我终于弄明白了!对于那些感兴趣的人,我在以下位置找到了解决方案:http://www.gamedev.net/topic/559980-opengl-and-2d-tiles/ (3认同)