Я использую OpenGL ES 2.0 на Android, и я, и я инициализирует свой дисплей следующим образом:Android Соотношение экрана
float ratio = (float) width/height;
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7); //Using Orthographic as developing 2d
Что я имею понимание тревоги заключается в следующем:
Допустим, мое приложение это игра с фиксированным экраном (например, Pac-Man, т.е. без прокрутки, только вся игра, видимая на экране).
Теперь на данный момент, если я рисую четверной в -1 до +1 на обоих х и у меня получить что-то вроде этого:
Очевидно, что это происходит потому, что я устанавливаю -ratio , как видно выше. Так что это правильно.
Но я должен использовать это как свой «весь» экран? С довольно массивным почтовым ящиком слева и справа?
Я хочу прямоугольный дисплей, который представляет собой всю высоту физического дисплея (и как можно большую ширину), но это будет означать, что при меньшем, чем -1, и более чем +1, это проблема?
Я понимаю, что вариант может заключаться в том, чтобы использовать обрезку, если это была прокрутка, но для этого конкретного сценария я хочу, чтобы вся игровая панель была на экране и была статичной (и использовать как можно больше доступного экрана как можно больше, без растягивания, что приводит к удлинению моих спрайтов).
кину отдельный вопрос там относительно метода подрезки ;-)
Спасибо за любые предложения (примечание, я прочитал много вопросов относительно экрана independancy на Android, но я не могу показаться, чтобы получить ответ, который мне нужен от них).
Редактировать Как мне нравится работать с 0,0 в верхней части экрана, в основном то, что я делаю, это передать мой метод рисования что-то вроде этого:
quad1.drawQuad (10,0);
Когда метод drawQuad получает это, он в основном принимает диапазон слева направо, выражая мой openGL и разделяя ширину экрана (так, в моем случае от -1.7 до +1.7, поэтому 3.4/2560 = 0.001328125). И сказать, что я указать 10, как мой X (как указано выше), он будет говорить что-то вроде:
-1,7 + (10 * 0,001328125) = -1,68671875
Затем участки четверной в -1.68671875.
Выполнение этого Я могу работать с нормальными координатами (и я просто вычитаю, а не добавляю для оси y, чтобы я мог иметь 0 в верхней части).
Это хороший способ сделать что-то? И как этот эффект рисуется на экране с различным соотношением?
Потому что с помощью этого метода, при моменте, если я укажу 100 100 квадратных, это не квадрат, это прямоугольник. Однако, с положительной стороны, я могу заполнить весь физический экран, масштабируя квад по ширине x height.
Спасибо @SebbyJohanns, я ввел исправление в конце моего первоначального вопроса, пожалуйста, не могли бы вы прокомментировать? Большое спасибо за помощь! – Zippy
Я рекомендую, если вы нарисуете квадрат 100x100, вы получите квадрат без необходимости выполнять какие-либо промежуточные функции. Пока, пока вы учитесь, правильно настройте свои прогнозы, как он разработан. Когда вы начинаете ощущать, как работает этот материал, вы можете отвлечься от себя, но я лично не сделал бы этого так, как вы заявили в своем редактировании. Вы должны ознакомиться с системой координат OpenGL, где (0,0) является центром экрана. – johnbakers
И если операционная система вашего устройства сообщает координаты иначе, чем OpenGL (как в случае с iOS), просто напишите простую функцию, которая сначала преобразует эти координаты в координаты OpenGL, но когда вы на самом деле выполняете рисование и т. Д., Вы должны передавать координаты OpenGL или вы открываете себя для ошибок и запутывания кода. – johnbakers