我以GLPaint为例...我试图将背景放到“ PaintingView”中,所以您可以在背景上绘制图片,最后将图像另存为文件.....我迷路了。

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

我在加载之前尝试将其作为绘画视图的子视图...但是,那么glReadPixels无法按预期方式工作(它仅考虑了PaintingView,而不考虑子视图)。另外PaintingView没有initWithImage方法...我需要glReadPixels在图像上工作(以及在修改中),但是我真的不知道为什么当我加载它时,纹理具有64x64的大小。

最佳答案

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);

10-08 14:52