96 votes

Android OpenGL ES et 2D

Eh bien, voici ma demande. Je ne sais pas OpenGL déjà, et je ne suis pas prêt à apprendre, je veux apprendre OpenGL ES directement puisque je m'adresse à mon développement pour android, cependant. Je veux apprendre openGL ES afin de développer mes 2D jeux, j'ai choisi que pour les spectacles de fin (depuis la base SurfaceView dessin n'est pas efficace lorsqu'il s'agit de la RT jeux). Ma question est: par Où commencer ? J'ai passé plus d'un mois de navigation de google et de la lecture/essayer quelques tutoriels/les exemples que j'ai trouvé n'importe où , mais pour être honnête, il n'a pas beaucoup d'aide et ce, pour deux raisons: 1 - Presque tous les articles/tutoriels que j'ai est venu à travers la 3D (je veux seulement apprendre à faire mes Sprites 2D dessin) 2 - Il n'y a pas de base pour démarrer depuis tous les articles cibles spécifiques des choses comme: "Comment dessiner un triangle dont les sommets)", "Comment créer un Maillage"... etc

J'ai essayé de lire du code source (ex.: réplique de l'île), mais les codes sont trop compliqués et contient beaucoup de choses qui ne sont pas nécessaires; résultat: je me suis perdu entre 100 .fichiers java avec bizarre les noms de classe et tout ça (:P)

Je suppose qu'il n'y a pas de cours comme celui que je cherche, mais je serai très heureux si quelqu'un pouvait me donner quelques lignes directrices et des liens peut-être pour apprendre ce que je suis jusqu'à (Seulement OpenGL ES Sprites 2D rendu ! Rien de 3D)

Je vous remercie très beaucoup pour la lecture de mon détachement, et je suis impatient de vous entendre

Meilleures salutations

85voto

Miguel Morales Points 1621

J'ai été dans une situation similaire.
La façon dont j'ai commencé avec openGL avec commencez par regarder la très de base GLSurfaceView échantillons/demos.

Commencer, par la mise en place de votre application d'activité et mettre en place le canevas de base.

Prendre un butin à la réplique de l'île de fichier de code source: GameRenderer.java comment installer votre toile avec le bon GL drapeaux pour la 2D (sprite) le rendu. Vous devriez vraiment jeter un oeil à SpriteMethodTest par le même auteur de la réplique de l'île: http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest

Voir cette question où j'ai posté mon propre code: en Utilisant OpenGL pour remplacer Toile - Android

Après vous avez votre toile mis en place, commencez par appeler quelque chose comme: gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

Après que vous êtes prêt à effectuer le rendu d'un sprite. Tout d'abord, vous aurez besoin de 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é avec le chargement des sprites: http://tkcodesharing.blogspot.com/2008/05/working-with-textures-in-androids.html

C'est de cette façon que 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 mon onDrawFrame() la méthode je n'ai tout 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);

Vous allez dessiner les sprites 2D sur un openGL toile. J'ai remarqué que ce n'est pas vraiment simple de ce tutoriel. J'espère que dans le futur, je vais en poster un dans mon dev blog: http://developingthedream.blogspot.com/

Bonne chance.

12voto

Programmation 2D est juste 3D de programmation qui a contraint à un plan. Vous n’aurez aucun autre choix que d’apprendre la 3D, mais lorsque vous l’utilisez juste la valeur z = 0.

Il y a un livre officiel sur OpenGL ES. Qui pourrait vous donner l’intro que vous recherchez : http://www.amazon.com/OpenGL-ES-2-0-Programming-Guide/dp/0321502795/

3voto

Atom Arcade Points 29

Je voudrais certainement la caisse Android - Chris Pruett conférence Google IO L'écriture en temps réel des jeux pour Android redux

prenez le PDF aussi

il est vraiment utile à de nombreux niveaux, Chris a vraiment beaucoup d'expérience avec la création de jeux pour appareils mobiles

mais si vous êtes vraiment concentré sur la 2D à la Toile http://developer.android.com/guide/topics/graphics/index.html#drawing-with-canvas

Une autre option dépend du niveau de compétence est Flash+AdobeAIR pour Android, moi, j'aime et luv niveau de la programmation, et que vous commencez à développer vous découvrirez pourquoi.

OpenGL : Vérifiez - Nehe Productions

un couple d'applications que vous pouvez mettre sur votre téléphone qui est à la peine et ils sont gratuits c'est: OpenGL Démo, min3d Cadre, RedBook Échantillon

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X