Soy un novato y trato de mostrar un sprite en la pantalla de mi iPhone usando OpenGL ES. Sé que es mucho más simple y fácil de hacer con cocos2d, pero ahora estoy tratando de codificar directamente en OpenGL. ¿Hay alguna manera simple pero eficiente de cargar y mostrar sprites en OpenGL ES? Lo que he encontrado hasta ahora es mucho más complejo. :(Cómo cargar y mostrar imágenes en OpenGL ES para iphone
Respuesta
Aquí hay un código para cargar un png del paquete:.
UIImage* image = [UIImage imageNamed:@"PictureName.png"];
GLubyte* imageData = malloc(image.size.width * image.size.height * 4);
CGContextRef imageContext = CGBitmapContextCreate(imageData, image.size.width, image.size.height, 8, image.size.width * 4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(imageContext, CGRectMake(0.0, 0.0, image.size.width, image.size.height), image.CGImage);
CGContextRelease(imageContext);
Aquí hay un código para crear una textura con la que los datos de imagen
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.size.width, image.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Y un ejemplo de cómo hacer esto:
glBindTexture(GL_TEXTURE_2D, texture);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
Aquí tiene que encontrar los valores de los vértices, normales y textureCoords que le caben r necesita.
Actualización 1
Recuerde que debe establecer los estados correctos así:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
Si utiliza glOrthof
(ver más abajo) para establecer una proyección 2D en su aplicación, puede utilizar estos valores :
GLfloat vertices[] = {
-1.0, 1.0,
1.0, 1.0,
-1.0, -1.0,
1.0, -1.0, };
GLfloat normals[] = {
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0 };
GLfloat textureCoords[] = {
0.0, 0.0,
1.0, 0.0,
0.0, 1.0,
1.0, 1.0 };
actualización 2
Esta es la forma en que me senté el modo de proyección cuando se utiliza el código anterior para hacer sprites:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-5.0, 5.0, -7.5, 7.5, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Y así es como me puse mi función de mezcla. Esto permite la transparencia en los archivos PNG:
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Yo recomiendo mirar aplicación GLSprite ejemplo de Apple. Eso es exactamente lo que hace esta aplicación.
Si desea cargar texturas comprimidas con PVRTC, consulte su ejemplo PVRTextureLoader. Utilizo el código de esto en un sample application que escribí para mi clase de iPhone.
- 1. iPhone OpenGL ES - Cómo elegir
- 2. OpenGL para Android y iPhone
- 3. Mostrar imágenes en línea en iPhone, iPad
- 4. Cargar y mostrar todas las imágenes de una carpeta
- 5. Cómo cargar texturas en OpenGL ES de manera eficiente
- 6. ¿Qué es una buena biblioteca de C++ para cargar imágenes de textura en OpenGL?
- 7. ¿Cómo mostrar eficientemente muchas imágenes? (IPhone de programación)
- 8. Cargar y almacenar imágenes
- 9. ¿Hay algún tutorial sobre cómo cargar un modelo 3D en OpenGL ES en el iPhone?
- 10. ¿Cuál es la forma preferida de mostrar imágenes grandes en OpenGL
- 11. OpenGL para video en el iPhone
- 12. OpenGL ES Shader para delinear imágenes en 2D
- 13. Cualquier alternativa glPolygonMode en iPhone (OpenGL ES)?
- 14. iPhone OpenGl render texto
- 15. OpenGL ES (iPhone) Touch Picking
- 16. OpenGL ES (iPhone) mezcla alfa ve raro
- 17. Dibujar para renderbuffer fuera de pantalla en OpenGL ES (iPhone)
- 18. Cómo mostrar el teclado de iPhone/iPad a través de una pantalla completa Aplicación OpenGL ES
- 19. ¿Cómo usar OpenGL ES en un hilo separado en iphone?
- 20. iPhone OpenGL ES 2.0 - Pixel Perfect Textures
- 21. OpenGl ES on Iphone - Visualización y rotación de objetos 3D
- 22. Cómo agregar imágenes en UINavigationBar en la aplicación para iPhone
- 23. android: cómo cargar y mostrar imágenes de gran tamaño (tamaño A0), como lo hizo google map?
- 24. Convolviendo una imagen con OpenGL ES en iPhone: ¿es posible?
- 25. cargar imágenes desde el disco en la aplicación iPhone es lento
- 26. Textura de pantalla completa iPhone OpenGL ES
- 27. Diferencia en iOS OpenGL ES y Android OpenGL ES
- 28. ¿Cómo mostrar el texto Unicode en OpenGL?
- 29. Cómo cargar imágenes para Android ImageView desde classpath?
- 30. IPhone OpenGL ES vistas individuales o múltiples?
¿Qué versión de OpenGL ES, 1 o 2? –
Estoy usando ES 1. – nomann