Android OpenGL es преобразование пикселей - PullRequest
0 голосов
/ 30 марта 2012

Я не понимаю, как мы можем позиционировать объекты с помощью opengl.Все значения преобразования находятся в диапазоне от «-1.0f» до «1.0f».Я сделал какую-то игру с использованием SurfaceView.И я могу просто изменить и определить объекты х и у позиции.пример;Если ширина экрана Android составляет 480px, то у меня в поле max x значения 480. Но как мне это сделать на opengl?Как установить ограничения и как использовать метрики в пикселях или точках на дюйм?как я могу изменить положение ящика на месте прикосновения пальца?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Прежде всего, glTranslate и большинство, если не все значения преобразования, не ограничиваются значениями от «-1,0» до «1,0».Возможность перемещения объекта на 10 пикселей влево или вправо потребует правильной настройки матриц преобразования.Ниже приведен порядок работы OpenGL с указанными вами вершинами.

[(4x4) Проекция] [(4x4) Просмотр] [(4x4) Модель] * [(4x1) вашей вершины]

Возможно, вы захотите использовать glOrtho (0,0, ширина, 0,0, высота, -1,0,1,0) для настройки матрицы проекции.Вы можете оставить матрицу просмотра в качестве матрицы идентификаторов.Наконец, вы можете использовать матрицу модели для перевода, поворота и масштабирования ваших объектов в пиксельном масштабе.Теперь glTranslatef (10.0,0.0,0.0) в матрице модели должен переместить ваш объект на 10 пикселей в направлении x.В качестве альтернативы, вы можете оставить матрицу модели как единичную матрицу, и позволить вашим вершинам представлять координаты пикселей.

Вы можете посмотреть на эту powerpoint, а на слайде 4 вы можете увидеть симпатичный график, детализирующий то, что происходит с вашими вершинами,https://wiki.engr.illinois.edu/download/attachments/195761441/OpenGL.pptx?version=1&modificationDate=1326820017000

0 голосов
/ 30 марта 2012

чтобы изменить положение элемента в openGL вы используете glTranslate и для размера вы можете установить размер прямоугольника, который вы используете, когда вы рисуете его, но, насколько я знаю, вы не можетеограничьте размер объекта, но перед рисованием прямоугольника / рамки вы можете сделать некоторую проверку, чтобы узнать, больше ли размер, который пользователь хочет изменить, по сравнению с экраном вашего устройства Android, и если это так, то ничего не делать (или вы можете показать тостговоря пользователю, что он не может стать больше)

Также это может помочь вам, отношение между пикселями и gl.gltranslatef (floatx, y, z)? , но позвольте мне процитировать немногоit:

Таким образом, когда вы выполняете glTranslate, расстояние, на которое будет перемещаться конкретный объект (в пикселях), будет зависеть от его расстояния от зрителя.Чем дальше он находится от зрителя, тем меньше пикселей будет перемещено в определенную сторону или вверх / вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...