iPhone:纹理大于64x64?

时间:2009-05-21 21:40:51

标签: iphone opengl-es load background textures

我采用了GLPaint的例子......我正在尝试将背景放入“PaintingView”中,这样​​你就可以在背景上画画,最后将图像保存为文件.....我迷路了

我正在加载PNG(512x512)并尝试在程序的最开始“用它绘画”,但它被绘制为64x64而不是512x512 ......

我之前尝试加载是作为绘画视图的子视图...但是,glReadPixels不能按预期工作(它只考虑了PaintingView,而不是子视图)。此外,PaintingView没有像initWithImage那样的方法...我需要glReadPixels处理图像(并在修改中),但我真的不知道为什么当我加载它时,纹理的大小为64x64 ..

2 个答案:

答案 0 :(得分:2)

GLPaint示例项目在移动画笔时使用GL_POINT_SPRITE绘制画笔纹理的副本。在iPhone上,glPointSize限制为64x64像素。这是一个硬件限制,在模拟器中我认为你可以把它变大。

听起来你正在尝试使用GL_POINT_SPRITE方法绘制背景图像,而这真的不是你想要的。相反,尝试绘制一个填充屏幕的平面纹理框。

这是一些OpenGL代码,它为2D盒子设置顶点和texcoords,然后绘制它:

const GLfloat verticies[] = {
        0.0f, 0.0f,
        1.0f, 0.0f,
        0.0f, 1.0f,
        1.0f, 1.0f,
    };

    const GLfloat texcoords[] = {
        0, 0,
        1, 0,
        0, 1,
        1, 1,
    };

    glVertexPointer(2, GL_FLOAT, 0, verticies);
    glEnableClientState(GL_VERTEX_ARRAY);
    glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D, texture);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

希望有所帮助!请注意,您需要根据相机投影的设置方式指定不同的顶点。在我的例子中,我使用下面的代码设置了我的GL_MODELVIEW - 我不确定GLPaint示例是如何做到的。

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glOrtho(0, 1.0, 0, 1.0, -1, 1);

答案 1 :(得分:0)

首先,glReadPixels()只会看到与当前OpenGL上下文关联的帧缓冲区。这可能解释了为什么你没有得到你期望的像素。

其次,在特定像素大小下渲染的纹理是什么意思?我假设纹理呈现为四边形,然后该代码的大小应该在您的控制之下,代码方式。

另外,检查纹理的加载是否产生OpenGL error,我不确定iPhone对纹理大小的限制是什么。可以想象512x512超出范围。您当然可以通过调用glGetIntegerv()并使用GL_MAX_TEXTURE_SIZE常量来调查此问题。