Я работаю над приложением для Android, которое позволяет пользователю касаться экрана, чтобы рисовать цвета. У меня есть весь код рисования, хорошо работающий под OpenGL (тестирование на Android 4.0.4, Galaxy Nexus, хотя я пытаюсь сделать его обратно совместимым, насколько это возможно; мой SDK нацелен на API 14, но имеет minSDK 8 ).
Проблема, с которой я столкнулся, связана со сглаживанием; Я хочу, чтобы все мои полигоны и линии были сглажены, но они получаются неровными. Я уверен, что Galaxy Nexus поддерживает сглаживание (я видел это в других приложениях), поэтому я уверен, что делаю что-то не так.
Я уже больше часа провожу вверх и вниз по Google, отвечая на несколько вопросов и ответов на StackOverflow, и нашел несколько ответов:
gl.glEnable(GL10.GL_BLEND);
gl.glEnable(GL10.GL_ALPHA_BITS);
gl.glEnable(GL10.GL_MULTISAMPLE);
gl.glEnable(GL10.GL_SMOOTH);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST);
gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_NICEST);
Я добавил некоторые или все эти строки в разном порядке, но безрезультатно. (Они были добавлены в onSurfaceCreated.)
gl.glEnable(GL10.GL_DITHER);
Думаю, это немного помогло ... но, возможно, это мой разум играет со мной злую шутку. Однако даже при его использовании остаются неровные линии. (Также добавлено в onSurfaceCreated.)
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
Кажется, это самый распространенный ответ. Но при этом все рисуется невидимым; то есть при запуске с черным фоном все всегда просто черное. (Я знаю, что он все еще отображается из-за сообщений о промывке памяти в LogCat.) Я также пробовал это в сочетании со всеми другими методами, описанными выше. (И это также было добавлено в onSurfaceCreated.)
Подведем итоги: я использую OpenGL на Android 4+, и никакие методы мультисэмплинга не работают; в то время как большинство из них просто не имеет эффекта, использование glBlendFunc, похоже, полностью нарушает рендеринг.
Итак, я в тупике. Я открыт для любых предложений ... они наверняка помогут больше, чем дефенестрация моего компьютера!
Заранее благодарим всех терпеливых, прочитавших это.
setEGLConfigChooser(8, 8, 8, 8, 0, 0);
при создании рендерера, но кроме этого, я не трогаю его (только объект GL10). - person Eric   schedule 06.06.2012