gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:22 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com