Aller au contenu

OpenGL et Android


clavat

Recommended Posts

Bonjour à tous, je recherche un tuto afin de pouvoir jouir de la puissance de OpenGL ! ! !

J'ai Eclipse avec le SDK Android parfait mais je ne sais pas du tout comment joindre OpenGL et donc faire du graphisme !

J'ai chercher sur internet mais ce n'est pas très fructueux ou en anglais :s

Merci de votre aide !

Lien vers le commentaire
Partager sur d’autres sites

En effet, pas évident OpenGL. Et encore moins sur Android. Il manque cruellement de docs...

J'ai trouvé par exemple :

http://insanitydesign.com/wp/projects/nehe-android-ports/

http://mobdev.olin.edu/mobdevwiki/FrontPage/Tutorials/OpenGL#Introduction

très bien pour apprendre les bases. De là à faire un jeux : il faut pas mal de boulot & R&D ! c'est pas gagné.

Sinon, les Japonais ont un Kit d'apprentissage OpenGL spécialement pour Android :-)

J'ai pas testé, c'est payant. Mais çà vaut peut-être le coup ??? --->

http://www.dmprof.com/english/e_products/e_service/e_android/

Je peux d'envoyer qques sources si tu veux (pas grand chose tout de même : affichage texture bitmap 2D dans Open GL + gestion profondeur/limière). Un truc de base pour de la Réalité Augmentée.

Que cherches-tu à faire ? Tu cherches un job sur Paris ?

Lien vers le commentaire
Partager sur d’autres sites

C'est pas évident en effet. Mais c'est faisable, je suis moi-même autodidacte en programmation (mais ça m'a pris quelques années quand même...)

Pour apprendre les bases d'OpenGL, je ne peux que te conseiller les excellents tutos de Neon Helium. C'est une référence.

Pour les tutos en Anglais, désolé mais surtout en dev, 99% de ce que tu trouveras sera dans la langue de Shakespeare.

Et aussi, pour te donner une idée de la masse de travail que ça représente de faire un jeu:

Il y a un an, je n'avais jamais touché à OpenGL (mais j'avais des bonnes notions en 3D quand même) ni à Android. Depuis j'ai sorti un jeu complet sur Android (SteamBall), un second en préparation. Tout ça sur mon temps libre le soir et le week end. Mais j'ai déjà 10 ans d'expérience pro en programmation de jeux vidéos, ce qui me donne un background assez solide.

Je ne sais pas quelle est ta situation personelle, mais sache que travailler le soir sur un projet perso en plus d'un vrai boulot la journée demande énormément de motivation, passée la période très stimulante du tout début.

Je ne te dis pas ça pour te décourager, mais pour que tu saches à quoi t'attendre.

Tout dépend du but que tu te fixes. Ma première appli Android, Compass3D, je l'ai fait en une semaine en partant de rien (aucune connaissance en openGL, pas pratiqué le Java depuis 10 ans). Donc tu vois, tout dépend de l'ampleur de la tache. Entre faire un "hello world" et un "Angry Birds", il y a un monde...

Bon courage en tout cas!

NB c'est quoi ton projet?

Lien vers le commentaire
Partager sur d’autres sites

le travail d'angry bird se situe beaucoup au niveau graphisme/design (rien à voir avec le dev) , a pars les notions de physique , angry bird n'est pas le plus compliqué à faire ( amha).

Zerrac , j'ai lu à plusieurs endroit qu'il fallait se méfier des tutos de Néon car ils datent de mathusalem et que opengl à bien évolué depuis et que certaines méthodes ont changées (cependant je n'ai pas vraiment trouvé de tuto plus récent <<)

t'as un avis là dessus ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour, merci de vos réponses

Pour mon Background je ne suis que étudiant en informatique actuellement à la fac.

J'ai eu mon Androphone il y a peu et très curieux de ce monde je me suis lancer la dedans, j'ai appris par la même occasion le java qui n'est pas si dure un langage poo comme un autre ;) enfin bref, j'ai donc le 1er soir avec des petits tuto fait ma première appli un morpion dont j'ai fait une belle apk et que j'ai partager avec des amis afin de tester sous divers modèles de téléphone et j'en suis très content mais le problème était la couche graphique....

J'ai donc chercher et j'ai découvert que OpenGL était l'outil utilisé.

Dans un premier si j'arrive à faire déplacer un carré blanc sur un fond noir avec mon doigt je serai heureux ! et aussi d'améliorer mon morpion :D

Merci à tous.

Lien vers le commentaire
Partager sur d’autres sites

...

Dans un premier si j'arrive à faire déplacer un carré blanc sur un fond noir avec mon doigt je serai heureux ! et aussi d'améliorer mon morpion :D

Merci à tous.

Salut Clavat,

Je pense que pour faire ça, tu peux te passer d'Open Gl dans un premier temps. :)

La majorité des jeux 2D se contentent d'afficher des bitmap et ça rend très bien. L'openGl est utilisé principalement pour la 3D car sinon, c'est se compliquer la vie pour pas grand chose (et tu peux toujours donner une impression de 3D avec des graphismes 2D mais réalisés sous logiciel 3D comme Blender :P ).

Lien vers le commentaire
Partager sur d’autres sites

@clavat : je te conseille de regarder du coté des APIs Demo de google , ils couvrent un bon paquet de sujet (pour les bitmaps je sais pas remarque...) mais pour l'opengl c'est une bonne source pour commencer à analyser du code (qui est pour moi la meilleur façon de comprendre et donc d'avancer).

Pour ma part quelqu'un sait bien utiliser les rotations en utilisant les représentation Axis-Angle ? j'ai un peu de mal avec ça (c'est là que l'on se dit qu'en fait les maths c'est bien pour le dev <<)

Lien vers le commentaire
Partager sur d’autres sites

le travail d'angry bird se situe beaucoup au niveau graphisme/design (rien à voir avec le dev) , a pars les notions de physique , angry bird n'est pas le plus compliqué à faire ( amha).

Zerrac , j'ai lu à plusieurs endroit qu'il fallait se méfier des tutos de Néon car ils datent de mathusalem et que opengl à bien évolué depuis et que certaines méthodes ont changées (cependant je n'ai pas vraiment trouvé de tuto plus récent <<)

t'as un avis là dessus ?

Pour Angry birds, je peux simplement dire que ce produit est un vrai produit fini, et pour avoir bossé sur plusieurs jeux commerciaux du début à la fin, je peux t'assurer que finir une application est vraiment le plus ch... Donc effectivement, faire un jeu sur le principe de Angry birds est pas trop dur (à condition d'avoir le bon moteur physique), mais le terminer comme Angry Birds est terminé est une autre paire de manche.

On dit parfois en développement qu'une fois le produit fini à 90% (fonctionnalités), il reste encore "les autres 90%" à faire (debug, finitions).

Sur NeHe:

C'est clairement de l'openGL de base ces tutos, mais il faut bien commencer par apprendre à marcher avant de savoir courir.

D'autre part, les androphone < 2.x n'ont droit qu'à openGL ES 1.1, donc assez limités en fonctionnalités. Sur ces téléphones, oubliez les shaders et compagnie, on revient à la bonne vieille face texturée et au bons vieux render states.

Lien vers le commentaire
Partager sur d’autres sites

Salut Clavat,

Je pense que pour faire ça, tu peux te passer d'Open Gl dans un premier temps. :)

La majorité des jeux 2D se contentent d'afficher des bitmap et ça rend très bien. L'openGl est utilisé principalement pour la 3D car sinon, c'est se compliquer la vie pour pas grand chose (et tu peux toujours donner une impression de 3D avec des graphismes 2D mais réalisés sous logiciel 3D comme Blender :P ).

Oui en effet, pour de la 2D c'est un peu écraser une mouche au rouleau compresseur, mais en performances cela n'a rien à voir non plus. Tout dépend du n'ombre d'objets à rendre à l'écran et si la fluidité est primordiale ou accessoire.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour, j'ai donc suivis vos conseil et regarder la doc dev android de google.

J'ai donc réussie a faire apparaitre un jolie rond vert ! mais le déplacer n'est pas chose facile...

Voila mon code:

Pour ma 1ere classe

package com.Helloworl;

import android.app.Activity;
import android.os.Bundle;

public class ActivityImage extends Activity  {
   private CustomDrawableView mCustomDrawableView; 

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
   mCustomDrawableView = new CustomDrawableView(this, 150, 40, "green"); 
   setContentView(mCustomDrawableView); 
}
}

Et ma seconde classe:

package com.Helloworl;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.view.View;

public class CustomDrawableView extends View {
private ShapeDrawable mDrawable;
   public CustomDrawableView(Context context, int x, int y, String 
Colour) { 
       super(context); 
       int width = 50; 
       int height = 50; 
       mDrawable = new ShapeDrawable(new OvalShape()); 
       if (Colour == "green"){ 
       mDrawable.getPaint().setColor(0xff74AC23);//green 
       } else if (Colour == "red") { 
       mDrawable.getPaint().setColor(0xffff0000);//red 
       } 
       mDrawable.setBounds(x, y, x + width, y + height); 
   } 
   protected void onDraw(Canvas canvas) { 
   	mDrawable.draw(canvas); 
   	}
}

Je sais pas si c'est la bonne manière oO.

Et donc ma question est de faire suivre ce rond vert du bout des doigt !

Je pense qu'il faut récupérer les coordonné du doigt...

Je vais creuser ;)

Modifié par clavat
Lien vers le commentaire
Partager sur d’autres sites

Je double post afin de donner la réponse a ceux qui la veulent:

package com.Helloworl;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;

public class ActivityImage extends Activity  {
   private CustomDrawableView mCustomDrawableView; 
   float posx = 0;
   float posy = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

public boolean onTouchEvent(MotionEvent event) {
	   if (event.getAction() == MotionEvent.ACTION_MOVE ){ 
	     posx = event.getRawX(); 
	     posy = event.getRawY();
	     mCustomDrawableView = new CustomDrawableView(this, posx, posy, "green"); 
            setContentView(mCustomDrawableView); 
	   }
	   return true;
}
}

package com.Helloworl;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.view.View;

public class CustomDrawableView extends View {
private ShapeDrawable mDrawable;
   public CustomDrawableView(Context context, float x, float y, String 
Colour) { 
       super(context); 
       int width = 50; 
       int height = 50; 
       mDrawable = new ShapeDrawable(new OvalShape()); 
       if (Colour == "green"){ 
       mDrawable.getPaint().setColor(0xff74AC23);//green 
       } else if (Colour == "red") { 
       mDrawable.getPaint().setColor(0xffff0000);//red 
       } 
       mDrawable.setBounds(((int)x - width/2), (int)y-120, ((int)x - width/2)+ width, (int)y + height-120); 
   } 
   protected void onDraw(Canvas canvas) { 
   	mDrawable.draw(canvas); 
   	}
}

Voila le point vert suit mon doigt :D

Merci de votre aide et conseil ;)

Lien vers le commentaire
Partager sur d’autres sites

@clavat:

Bon, le temps que je revienne sur le forum et tu avais déjà trouvé la réponse :-)

Un petit conseil si tu fais un jeu où tu déplaces des petites pièces avec le doigt: c'est d'appliquer un offset sur les coordonnées (x,y) de l'appui écran car le doigt de l'utilisateur cache la partie qu'il veut déplacer.

Donc si l'utilisateur pose son doigt en (x,y), il vaut mieux considérer (x-20,y-20) car ainsi lorsqu'il va déplacer son doigt, il verra également la pièce qu'il déplace (elle ne sera pas cachée par son doigt). Je ne sais pas si j'ai été clair mais je me comprends B)

@Zerrac:

Si OpenGl améliore les performances en terme de fluidité lorsque de nombreux sprites se déplacent à l'écran alors ça m'intéresse beaucoup car sur le jeu Wookrio, lorsque j'affiche 20 petits "bonhommes" et que chacun d'eux doit gérer la gravité et les collisions, on sent nettement la réduction de vitesse de déplacement des sprites par rapport à lorsqu'il n'y a qu'un ou deux.

Donc je vais devoir m'y mettre aussi à OpenGl, même pour de la 2D... :P

Lien vers le commentaire
Partager sur d’autres sites

@Stylisoft

Oui merci j'ai parfaitement compris j'ai eu l'occasion de voir ce que c'étais sur divers jeu.

Je voulais savoir si il existait un jeu tel que on contrôle une petite boule dans un labyrinthe et on le déplace avec le doigt, afin d'atteindre la sortie... Peut-être si je m'en sort bien avec des ennemies.

Déjà vue ?

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

ouais les tuto NeHe datent, en plus dans le vraie dev, il faut tenir compte des optimisation du code pour les pi** Ogl utilisé, car malgré une compatibilité totale ,certain hard nécessite d'adapter le code à leur architecture, je vais énumérer les différences ici, mais ayant fait du dev Ogl et IrisGL sur les machines qui on créer OpenGL (Silicon Graphics) je peu en parle en connaissance de cause.

laurent

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...