Android OpenGL ES и 2D
Ну, вот моя просьба. Я уже не знаю OpenGL, и я не хочу его изучать, я хочу узнать OpenGL ES напрямую, так как я нацелен на свою разработку на android. Я хочу изучить OpenGL ES, чтобы разработать мой 2D игры. Я выбрал его для целей выступлений (поскольку базовый рисунок SurfaceView не так эффективен, когда речь заходит о играх RT).
Мой вопрос: с чего начать?
Я провел более месяца, просматривая Google и читая / пробуя некоторые учебники / примеры Я нашел где угодно, но, честно говоря, это не очень помогло, и это по двум причинам:
- почти все статьи / учебники, с которыми я столкнулся, связаны с 3D (я только хочу узнать, как сделать мой 2D-рисунок спрайтов)
- нет никакой базы для начала, так как все статьи нацелены на конкретные вещи, такие как: "Как нарисовать треугольник (с вершинами)", "как создать сетку"... так далее.
Я тоже пытался прочитать исходный код (например.: replica island), но коды слишком сложны и содержат много вещей, которые не нужны; результат: я теряюсь среди 100 .java файлы со странными именами классов и прочее.
Я думаю, нет конечно, как я ищу, но я буду очень рад, если кто-то может дать мне некоторые рекомендации и подарки!--1-->ссылки может быть, чтобы узнать, что я до (только OpenGL ES 2D спрайты рендеринга! ничего в 3D).
6 ответов:
Я был в подобной ситуации.
То, как я начал с openGL с start, посмотрев на самые основные образцы/демонстрации GLSurfaceView.начните, настроив свою активность приложения и настроив базовый холст.
возьмите добычу в файле исходного кода replica island: GameRenderer.java для настройки вашего холста с соответствующими флагами GL для рендеринга 2D (sprite). Вы действительно должны взглянуть на SpriteMethodTest от того же автора replica island: http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest
смотрите этот вопрос, где я разместил свой собственный код:использование OpenGL для замены Canvas-Android
после того, как вы настроили свой холст, вы начинаете с вызова чего-то вроде: гл.glClear(GL10.GL_COLOR_BUFFER_BIT);
после этого вы будете готовы к визуализации спрайта. Во-первых, вам нужно будет загрузить спрайт в текстуру: http://qdevarena.blogspot.com/2009/02/how-to-load-texture-in-android-opengl.html
тем не менее, это учебник, который действительно помог мне с загрузкой спрайтов: http://tkcodesharing.blogspot.com/2008/05/working-with-textures-in-androids.html
вот как я это делаю, у меня есть класс с именем 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; } }тогда в моем методе onDrawFrame () я просто делаю:
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);Это должно заставить вас идти рисование 2D спрайтов на холсте openGL. Я заметил, что на самом деле нет простого учебника по этому вопросу. Надеюсь, в будущем я опубликую его в своем блоге dev:http://developingthedream.blogspot.com/
2D программирование-это просто 3D-программирование, которое ограничено плоскостью. У вас не будет выбора, кроме как изучать 3D, но когда вы используете его, просто установите z = 0.
существует официальная книга по OpenGL ES. Это может дать вам вступление, которое вы ищете: http://www.amazon.com/OpenGL-ES-2-0-Programming-Guide/dp/0321502795/
Я бы определенно проверил Android - Chris Pruett Google IO лекция Написание игр в реальном времени для Android redux
возьмите PDF также
Это очень полезно на многих уровнях, Крис имеет очень большой опыт в создании игр для мобильных устройств
но если вы действительно сосредоточены на 2D, то начните с холста http://developer.android.com/guide/topics/graphics/index.html#drawing-with-canvas
другой вариант зависит на уровне навыков Flash + AdobeAIR для Android, я сам люблю и люблю уровень программирования, и по мере дальнейшего развития вы узнаете, почему.
OpenGL : Проверьте-Nehe Productions
пару приложений, которые вы можете поставить на свой телефон, который стоит и они бесплатно: Демо OpenGL, основы min3d , Образец Красной Книги
вы можете увидеть проект: https://github.com/ChillingVan/android-openGL-canvas/blob/master/README-en.md Это реализует холст с OpenGL. Это чистая Java. Он реализует части того, что может сделать обычный холст.
Я вижу, что много хорошей информации уже было предоставлено. Я хотел поделиться сайт, который помог получить до скорости на OpenGLE быстро! Это заняло всего несколько месяцев и имело пользовательскую систему координат, основанную на декартовой системе координат. Я смог сделать 3D-объект без камеры, используя методы дополненной реальности.
Я начал только с опыта программирования, без опыта OpenGL. Я использовал учебники Рэй Вендерлих сайта. Информация, предоставленная там на высшем уровне и легко понять. Он отсекает большую часть лишней информации и предоставляет то, что вам нужно знать, чтобы быть продуктивным быстро. Я настоятельно рекомендую этот учебник в качестве отправной точки:http://www.raywenderlich.com/5223/beginning-opengl-es-2-0-with-glkit-part-1
другой ресурс, который я бы рекомендовал, - это книга Эрика м бака под названием Learning OpenGL ES для iOS.
некоторые критиковали его, говоря, что это было слишком упрощенно. Но это именно то, что я искал. Это помогло мне понять все основы и дало мне представление о том, где я должен идти дальше, чтобы узнать более продвинутые вещи. Но неудивительно, что я смог создать свое приложение дополненной реальности, используя простые методы, которые я узнал из сайта Рэя и книги Эрика. Спасибо им обоим за участие!!!
есть много онлайн уроков, которые вы можете следовать, но для новичка ничего не может заменить этого: настоящий открытый GL ES 2.0 2D учебник

Comments