X,Y宽度,高度到OpenGL纹理坐标

时间:2013-07-11 08:14:51

标签: c++ math opengl textures

如果我有一个 256 x 256 纹理,并且 32 x 32 的图像位于 X:192 Y:128 ,那么什么是algerithm将用于使用 glTexCoord2f 仅在 X:192 Y:128 处绘制 32 x 32 图像(以切除其他部分图片)?

以下是我想要做的一个例子。蓝色/红色框将是我想要使用的。但我只想绘制那个盒子,没有任何东西围绕它,或整个纹理。

http://i.imgur.com/lTuGFou.png

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

float f = 1.0f/256.0f;
glBegin( GL_QUADS );
    glTexCoord2f( 192 * f, 128  * f );
    glVertex2f( 192, 128 );

    glTexCoord2f( (192 + 32) * f, 128  * f );
    glVertex2f( 192 + 32, 128 );

    glTexCoord2f( (192 + 32) * f, (128 + 32) * f );
    glVertex2f( 192 + 32, 128 + 32 );

    glTexCoord2f( 192 * f, (128 + 32) * f );
    glVertex2f( 192, 128 + 32 );
glEnd();

请记住,纹理坐标缩放为< 0,1>间隔。在OpenGL 3中也弃用了中间模式。