В opengl, как я могу получить отношение между пикселями и gl.gltranslatef (floatx, y, z)? - PullRequest
2 голосов
/ 25 сентября 2010

Я пытаюсь изучить материал opengl на Android. В вызове gl.gltranslatef (x, y, z) я смещаю текстуру на несколько единиц в направлении + ve x. Но я не могу найти количество пикселей, к которым принадлежит 1 единица x?

Вот что я делаю: Я называю gl.glviewport (0,0, ширина, высота); // Это установит мой прямоугольник с 0,0 в качестве нижнего левого угла, а затем расширит его до ширины и высоты.

Тогда Я звоню gl.glfrustrum (-5,5, -7,7,3,7); // Меня немного смущает, как этот вызов использует измерения, которые я установил в gl.glviewport.

Как от -5 до 5 единиц слева направо в приведенном выше вызове перевести в пиксели на экране андроида?

Я имею в виду, если width = 320 и height = 533 пикселей, то какое количество пикселей будет занято на экране из-за вызова gl.glfrustrum?

Я экспериментирую с вызовом gl.gltranslatef, указав xshift как 5.0, но он не переводит растровое изображение в правом или левом углу экрана, когда я увеличиваю его до 6, часть его все еще видна на экран.

Спасибо Siddhesh

Короче говоря, я ищу максимальное количество единиц (в единицах X), которые будут представлять крайние углы экрана моего телефона Android.

1 Ответ

2 голосов
/ 25 сентября 2010

glViewpoint сообщает, в каком прямоугольнике (в пикселях) должен отображаться ваш вывод OpenGL.

glFrustum сообщает, какие координаты в ваших "мировых" единицах должны быть сопоставлены с этим окном просмотра.

Важный момент: ваш вызов glFrustum включает в себя не только высоту и ширину, но и глубину.Поскольку вы указываете Frustum, а не куб, это означает, что все, что имеет координату Z в любом месте, кроме самого фронта вашего усеченного конуса, будет соответственно уменьшено для его расстояния от зрителя.

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

В зависимости от того, что вы делаете, одним из простых способов справиться с этим может быть использование glOrtho вместо glFrustum.glOrtho дает орфографический режим, что означает, что масштабирование в перспективе не выполняется, поэтому заданное расстояние X или Y будет преобразовываться в одинаковое количество пикселей независимо от расстояния до зрителя.

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