Je suis un débutant et j'essaie d'afficher un sprite sur mon écran d'iPhone en utilisant OpenGL ES. Je sais que c'est beaucoup plus simple et facile à faire avec cocos2d mais maintenant j'essaye de coder directement sur OpenGL. Existe-t-il un moyen simple et efficace de charger et d'afficher les sprites dans OpenGL ES? Ce que j'ai trouvé jusqu'à présent est beaucoup plus complexe. :(Comment charger et afficher l'image dans OpenGL ES pour iphone
Répondre
Voici un code pour charger un .png du paquet.
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);
Voici un code pour créer une texture avec ces données d'image
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);
Et un exemple de rendre ceci:
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)
ici, vous devez trouver les valeurs des sommets, et Normales textureCoords qui vous conviennent r besoins.
Update 1
Souvenez-vous de définir les bons états comme celui-ci:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
Si vous utilisez glOrthof
(Voir ci-dessous) pour définir une projection 2D dans votre application, vous pouvez utiliser ces valeurs :
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 };
Update 2
Voici comment je me suis assis le mode de projection lorsque vous utilisez le code ci-dessus pour rendre sprites:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-5.0, 5.0, -7.5, 7.5, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Et voilà comment je tournerai ma fonction de mélange. Cela permet à la transparence dans les fichiers .png:
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Je recommande regarder l'exemple d'application d'Apple GLSprite. C'est exactement ce que cette application fait.
Si vous souhaitez charger des textures compressées par PVRTC, consultez leur exemple PVRTextureLoader. J'utilise le code de ceci dans un sample application que j'ai écrit pour ma classe d'iPhone.
- 1. OpenGL ES 2 - Charger et afficher l'image
- 2. Comment afficher une vidéo dans OpenGL ES pour iPhone?
- 3. OpenGL ES pour Iphone
- 4. iPhone OpenGL ES - Comment choisir
- 5. OpenGL ES iPhone Textures
- 6. Gomme dans OpenGL ES iPhone
- 7. Skybox OpenGL ES iPhone et iPad
- 8. Iphone opengl es - glu, glPushName
- 9. DirectX OpenGL Porting ES (iPhone)
- 10. OpenGL ES (iPhone) Décrochage tactile
- 11. Projet mixte de type iPhone (navigation et opengl es)
- 12. Notions élémentaires de la texture 2D pour iPhone OpenGL ES
- 13. opengl es texture atlas pour le texte
- 14. iPhone OpenGL ES 2d texture d'arrière-plan
- 15. Dans OpenGL ES sur iPhone, comment faire défiler deux images?
- 16. Comment utiliser les shaders dans OpenGL ES avec iPhone SDK
- 17. Comment sélectionner un objet dans OpenGL ES?
- 18. glBindTexture Problème avec OpenGL ES sur iPhone
- 19. iPhone OpenGL ES mélange alpha incorrect
- 20. Texture plein écran iPhone OpenGL ES
- 21. iPhone - Dessin 2D avec OpenGL ES, rapide et simple
- 22. Zoom avant et arrière dans OpenGl ES
- 23. Cercle et Sphère dans OpenGL ES
- 24. OpenGL-ES, iPhone et erreur intermittente: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES (0x8CD6)
- 25. OpenGL à OpenGL-ES - glBegin();
- 26. Où dois-je regarder apprendre OpenGL ES pour iPhone
- 27. Utilisez OpenGL ES pour créer un outil de peinture iPhone?
- 28. Coloriage deux fois dans OpenGl es
- 29. Comment dois-je structurer mon jeu iPhone OpenGL ES 1.1?
- 30. Texture transparente dans OpenGL ES pour Android
Quelle version d'OpenGL ES, 1 ou 2? –
J'utilise ES 1. – nomann