Eh bien, voici ma demande. Je ne connais pas encore OpenGL et je ne souhaite pas l'apprendre. Je veux apprendre directement à OpenGL ES, car je cible mon développement sous Android. Je veux apprendre OpenGL ES afin de développer mes 2D jeux. Je l’ai choisi pour des raisons de performances (car le dessin de SurfaceView de base n’est pas aussi efficace en ce qui concerne les jeux RT) . Ma question est la suivante: par où commencer? J'ai passé plus d’un mois à naviguer sur notre site. J'ai lu et essayé quelques tutoriels/exemples que j'ai trouvés n'importe où, mais pour être honnête, cela n'a pas beaucoup aidé et c'est pour deux raisons:
J'ai aussi essayé de lire du code source (ex.: Réplica island) mais les codes sont trop compliqués et contiennent beaucoup de choses inutiles. résultat: je me perds parmi 100 fichiers .Java avec des noms de classes étranges.
Je suppose qu’il n’ya pas de cours comme celui que je cherche, mais je serais très heureux si quelqu'un pouvait me donner des directives et des liens / pour peut-être apprendre ce que je prépare (uniquement des Sprites 2D OpenGL ES rendu! rien en 3D).
J'étais dans une situation similaire.
La façon dont j'ai commencé avec openGL en commençant par regarder les échantillons/démos très élémentaires de GLSurfaceView.
Commencez par configurer l'activité de votre application, puis configurez le canevas de base.
Découvrez le fichier de code source de l’île réplique: GameRenderer.Java pour savoir comment configurer votre canevas avec les drapeaux GL appropriés pour le rendu 2D (Sprite) . Vous devriez vraiment jeter un coup d’œil à SpriteMethodTest auteur de l'île répliquée: http://code.google.com/p/apps-for-Android/source/browse/trunk/SpriteMethodTest
Voir cette question où j'ai posté mon propre code: Utiliser OpenGL pour remplacer Canvas - Android
Une fois que vous avez configuré votre canevas, vous commencez par appeler quelque chose comme: Gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
Après cela, vous êtes prêt à générer un Sprite . Tout d'abord, vous devez charger le Sprite dans une texture: http://qdevarena.blogspot.com/2009/02/how-to-load- texture-in-Android-opengl.html
Cependant, c’est le tutoriel qui m’a vraiment aidé à charger les sprites: http://tkcodesharing.blogspot.com/2008/05/working-with-textures-in-androids.html
Voici comment je le fais, j'ai une classe nommée Texture.Java:
public class Texture
{
/*Begin public declarations*/
public float x = 0;
public float y = 0;
public float z = 0;
public float width = 0;
public float height = 0;
/*Begin Private Declarations*/
private GL10 gl;
public int[] texture; //holds the texture in integer form
private int texture_name;
private int[] mCropWorkspace;
private final BitmapFactory.Options sBitmapOptions;
/*Begin Methods*/
public Texture( GL10 gl_obj )
{
gl = gl_obj;
texture = new int[1];
mCropWorkspace = new int[4];
sBitmapOptions = new BitmapFactory.Options();
sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
//Log.d(TAG, "Initializing Texture Object");
}
public int get_texture_name( )
{
return texture_name;
}
/*Loads the resource to memory*/
public boolean Load( Bitmap bitmap ) //rename this to glLoad and don't have it as an initializer parameter
{
/*many thanks to Sprite method test if this works*/
if ( gl == null )
{
Log.e(TAG, "Failed to load resource. Context/GL is NULL");
return false;
}
int error;
int textureName = -1;
gl.glGenTextures(1, texture, 0);
textureName = texture[0];
//Log.d(TAG, "Generated texture: " + textureName);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_Edge);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_Edge);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
mCropWorkspace[0] = 0;
mCropWorkspace[1] = bitmap.getHeight();
mCropWorkspace[2] = bitmap.getWidth();
mCropWorkspace[3] = -bitmap.getHeight();
((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,
GL11Ext.GL_TEXTURE_CROP_RECT_OES, mCropWorkspace, 0);
error = gl.glGetError();
if (error != GL10.GL_NO_ERROR)
{
Log.e(TAG, "GL Texture Load Error: " + error);
}
//Log.d(TAG, "Loaded texture: " + textureName);
return true;
}
}
Ensuite, dans ma méthode onDrawFrame (), je fais simplement:
Texture texture = ...
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture.texture[0]);
((GL11Ext) gl).glDrawTexfOES((float)(draw_x + 0.5), (float)(draw_y + 0.5), 0, tile_width, tile_height);
Cela devrait vous aider à dessiner des sprites 2D sur une toile openGL . J'ai remarqué qu'il n'y a pas vraiment de tutoriel simple à ce sujet. J'espère pouvoir en publier un dans mon blog dev: http://developingthedream.blogspot.com/
La programmation 2D est simplement une programmation 3D qui est contrainte à un plan. Vous n'aurez d'autre choix que d'apprendre la 3D, mais lorsque vous l'utilisez, définissez simplement z = 0.
Il existe un livre officiel sur OpenGL ES. Cela pourrait vous donner l'intro que vous recherchez: http://www.Amazon.com/OpenGL-ES-2-0-Programming-Guide/dp/0321502795/
Je voudrais certainement commander Android - Chris Pruett Google IO lecture Écrire des jeux en temps réel pour Android redux
saisir le PDF également
c'est vraiment utile à plusieurs niveaux, Chris a vraiment une grande expérience dans la création de jeux pour appareils mobiles
mais si vous êtes vraiment concentré sur la 2D, commencez par Canvas http://developer.Android.com/guide/topics/graphics/index.html#drawing-with-canvas
Une autre option dépend du niveau de compétence: Flash + AdobeAIR sur Android, j'aime moi-même et le niveau de programmation et, au fur et à mesure que vous avancez dans le développement, vous apprendrez pourquoi.
OpenGL: À vérifier - Nehe Productions
quelques applications à ajouter à votre téléphone qui en valent la peine et qui sont gratuites sont: Démo OpenGL, Framework min3d, Exemple RedBook
Vous pouvez voir le projet: https://github.com/ChillingVan/Android-openGL-canvas/blob/master/README-en.md Ceci implémente canvas avec OpenGL. C'est du pur Java. Il implémente des parties de ce que peut faire une toile normale.
Vous pouvez suivre de nombreux tutoriels en ligne, mais rien ne remplace, pour un débutant, celui-ci: Un vrai tutoriel Open GL ES 2.0 2D
Je vois que beaucoup de bonnes informations ont déjà été fournies. Je voulais partager un site qui a permis de se familiariser rapidement avec OpenGLE! Cela n'a pris que quelques mois et un système de coordonnées personnalisé basé sur le système de coordonnées cartésien. J'ai été capable de rendre l'objet 3D sans caméra en utilisant des techniques de réalité augmentée.
J'ai commencé avec uniquement une expérience en programmation, sans expérience OpenGL. J'ai utilisé le site de tutoriels de Ray Wenderlich. Les informations fournies sont excellentes et faciles à comprendre. Il supprime la plupart des informations superflues et fournit ce que vous devez savoir pour être productif rapidement. Je recommande vivement ce tutoriel comme point de départ: http://www.raywenderlich.com/5223/beginning-opengl-es-2-0-with-glkit-part-1
L'autre ressource que je recommanderais est un livre d'Erik M Buck, intitulé Learning OpenGL ES pour iOS.
Certains l'ont critiqué en disant que c'était trop simpliste. Mais c'est exactement ce que je cherchais. Cela m'a aidé à comprendre toutes les bases et m'a donné une idée de l'endroit où je devrais aller pour apprendre des choses plus avancées. Mais sans surprise, j'ai pu construire mon application de réalité augmentée en utilisant les techniques simples que j'avais apprises sur le site de Ray et le livre d'Erik. Merci à tous les deux pour le partage !!!