我采用了GLPaint的例子......我正在尝试将背景放入“PaintingView”中,这样你就可以在背景上画画,最后将图像保存为文件.....我迷路了
我正在加载PNG(512x512)并尝试在程序的最开始“用它绘画”,但它被绘制为64x64而不是512x512 ......
我之前尝试加载是作为绘画视图的子视图...但是,glReadPixels不能按预期工作(它只考虑了PaintingView,而不是子视图)。此外,PaintingView没有像initWithImage那样的方法...我需要glReadPixels处理图像(并在修改中),但我真的不知道为什么当我加载它时,纹理的大小为64x64 ..
答案 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
常量来调查此问题。