【问题标题】:C++ Opengl render part of an imageC++ Opengl 渲染图像的一部分
【发布时间】:2011-10-16 14:11:01
【问题描述】:

假设我有一个获取 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);
}

【问题讨论】:

    标签: c++ image opengl rendering


    【解决方案1】:

    您可以使用 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);
    

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

    【讨论】:

    • 是的,但是这些值是从 0 到 1,你知道我有什么方法可以使用像素坐标来定义位置吗?
    • 我终于想通了!对于那些感兴趣的人,我找到了解决方案:gamedev.net/topic/559980-opengl-and-2d-tiles
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    相关资源
    最近更新 更多