opengl es纹理顶部32像素的差距

我第一次尝试使用openGL ES(iPhone)渲染纹理,然后在屏幕上显示纹理。 除了在纹理顶部存在32行间隙并且底部32行被切断之外,所有工作都是可行的。 这就像我所有的绘图正在向下偏移32个像素,这导致底部的32行没有被绘制,因为它们在纹理之外。

这是一个非常简单的例子:

void RenderToTexture( int texture )
{
    unsigned char buffer[4 * 320 * 480];
    unsigned char colour[4];
    colour[0] = 255;
    colour[1] = 0;
    colour[2] = 0;
    colour[3] = 128;
    for ( int i = 0; i < 4 * 320 * 480; i += 4 )
    {
        buffer[i] = colour[0];
        buffer[i+1] = colour[1];
        buffer[i+2] = colour[2];
        buffer[i+3] = colour[3];
    }
    glBindTexture( GL_TEXTURE_2D, texture );
    glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 320, 480, GL_RGBA, GL_UNSIGNED_BYTE, buffer );
}

结果如下:

http://img10.imageshack.us/img10/2113/screenjc.th.jpg http://img10.imageshack.us/img10/2113/screenjc.th.jpg

只需使用glColor4f()设置颜色,而不是调用RenderToTexture(),就会如预期的那样产生红色屏幕。

任何帮助将不胜感激,谢谢。


这32个像素是512:512 - 480 = 32中缺失的像素。原因是您只能使用GL_TEXTURE_2D的两倍幂的纹理尺寸。 因此,必须将宽度和高度四舍五入为512.您仍然可以通过使用纹理坐标或设置纹理矩阵来仅显示所需纹理的一部分。


iPhone 3GS在特定条件下支持非幂次幂纹理。 以下所有内容必须属实:

  • GL_TEXTURE_WRAP_S应设置为GL_CLAMP_TO_EDGE
  • GL_TEXTURE_WRAP_T应设置为GL_CLAMP_TO_EDGE
  • Mipmapping必须关闭; 用GL_LINEAR而不是GL_LINEAR_MIPMAP_LINEAR进行缩小
  • 链接地址: http://www.djcxy.com/p/33963.html

    上一篇: 32 pixel gap at top of opengl es texture

    下一篇: imageOutput click within conditionalPanel