C++ OpenGL渲染部分图像

5
假设我有一个以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
你可以使用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);

[*] 我不太记得坐标的工作原理,但在你的代码中进行测试很容易。


是的,但这些值从0到1变化,你知道我是否有办法使用像素坐标来定义位置吗? - Sane
3
我终于明白了!对于那些感兴趣的人,我在这里找到了解决方案:http://www.gamedev.net/topic/559980-opengl-and-2d-tiles/ - Sane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接