Intereting Posts
FindViewById возвращает NULL при использовании фрагмента Как я могу добавить OnClickListener в Drawable в EditText? Замена фрагментов в активности, не вызывающей onAttach, onCreate, onCreateView и т. Д. Программно изменить ширину кнопки в android Ионный: как отображать ионный элемент на нескольких линиях? Realm.io Android лучший подход для получения последних 20 предметов из таблицы Как использовать bintray jcenter для бесплатной публикации бесплатной библиотеки Android? Он просит меня зарегистрировать организацию и заплатить через месяц Ошибка Ionic Cordova FileUpload: не разрешено загружать локальный ресурс Создание WebView от Chromium для Android Как окрасить и выравнивать элемент spinner на Android? Что такое ICS_R1 ICS_R2? Полностью защищен ли обмен файлами Bluetooth? Полоса хода поворота в каждом элементе списка Logcat не показывает сообщения уровня отладки Google Cloud Endpoint продолжает бросать исключение «неожиданного конца потока»

Использование OpenGL для замены Canvas – Android

Я пытаюсь заменить систему рендеринга, основанную на холсте, которая у меня уже есть с более быстрой поверхностью opengl-es, однако я не могу заставить рендеринг openGL соответствовать тому, что он действует как поле 2d, а не Вид в перспективе.

Мой текущий код для рендеринга выглядит следующим образом:

@Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glOrthof(0.0f, width, 0.0f, height, 0.0f, 1.0f); gl.glShadeModel(GL10.GL_FLAT); gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000); gl.glEnable(GL10.GL_TEXTURE_2D); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); gl.glClearColor(0.5f, 0.5f, 0.5f, 1); gl.glShadeModel(GL10.GL_FLAT); gl.glDisable(GL10.GL_DEPTH_TEST); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glDisable(GL10.GL_DITHER); gl.glDisable(GL10.GL_LIGHTING); gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); } 

Как настроить рендер, чтобы преобразование перевода соответствовало пикселям на экране? (Поэтому перевод 5 вправо будет перемещать его 5 пикселей)

Solutions Collecting From Web of "Использование OpenGL для замены Canvas – Android"

Обратите внимание, что в openGL координата Y инвертирована. В противном случае все будет одинаково.
Что касается правильных флагов, я рекомендую вам ознакомиться с сайтом реплики с открытым исходным кодом для Android: http://code.google.com/p/replicaisland/

Вот что я использую в своем собственном коде:

 public void onSurfaceChanged(GL10 gl, int width, int height) { mViewWidth = width; mViewHeight = height; gl.glViewport(0, 0, mViewWidth, mViewHeight); gl.glLoadIdentity(); GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0); } public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glClearColor(0.5f, 0.5f, 0.5f, 1); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); gl.glShadeModel(GL10.GL_FLAT); gl.glDisable(GL10.GL_DEPTH_TEST); gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); gl.glViewport(0, 0, mViewWidth, mViewHeight); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glEnable(GL10.GL_BLEND); gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); gl.glShadeModel(GL10.GL_FLAT); gl.glEnable(GL10.GL_TEXTURE_2D); GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0); } 

Где mViewWidth & mViewHeight – размер дисплея.