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

标签 c++ image opengl rendering

假设我有一个获取 GLuint 纹理作为参数的方法,我想渲染它的一部分。以图 block 集为例,我希望能够在加载关卡时加载图 block 集并渲染它的部分(图 block )。

如果我能够以某种方式从要绘制的图 block 集的像素坐标中定义高度、宽度、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);
}

最佳答案

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

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

关于C++ Opengl 渲染图像的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884285/

相关文章:

opengl - GLSL 中的快速排序?

java - 在 OpenGL 中,如何使我的天空盒不覆盖我的任何实体?

c++ - 使用模板元编程检测函数可以采用的最大参数数量

c++ - 如何在 codeblocks ide 的左侧显示 .cpp 和 .h 文件?

c++ - Visual C++ 按钮的透明背景颜色

c# - 在这个相对简单的程序中得到 'out of memory' 异常

c++ - 为什么我的一些立方体面没有按照我希望的方式呈现?

c++ - 使用插入方法时在C++中使用vector获取OUTOFRANGE错误

c++ - 正则表达式比 if else 快吗?

c++ - 如何在另一个系统上启用文件路径