Проекции в OpenGl ES | Статья в сборнике международной научной конференции

Автор:

Рубрика: 1. Информатика и кибернетика

Опубликовано в

III международная научная конференция «Современные тенденции технических наук» (Казань, октябрь 2014)

Дата публикации: 24.09.2014

Статья просмотрена: 433 раза

Библиографическое описание:

Бутенко В. В. Проекции в OpenGl ES [Текст] // Современные тенденции технических наук: материалы III Междунар. науч. конф. (г. Казань, октябрь 2014 г.). — Казань: Бук, 2014. — С. 1-4. — URL https://moluch.ru/conf/tech/archive/123/6212/ (дата обращения: 18.10.2018).

Работа посвящена двум способам отображения графики в OpenGl ES: ортогональному методу и отображению объектов в перспективе.

Введение

Существует два типа проекций, которые обычно используются в 3D-графике.

-        Параллельная, или ортогональная, проекция. В этом типе проекций неважно, насколько предмет удален. Он всегда будет одного и того же размера на конечном изображении.

-        Перспективная проекция. Предметы, более удаленные от нас, кажутся меньше.

В обоих случаях необходима плоскость проекции. Именно на эту плоскость падает свет, и образуется конечное изображение. Плоскость проекции на языке OpenGL ES называется ближней плоскостью отсечения. Все стророны отображения имеют похожие названия [3, с. 291].

Проекция зависит от того, как мы определим плоскости отсечения. В случае перспективной проекции левая, правая, верхняя и нижняя плоскости неперпендикулярны ближней и дальней плоскостям отсечения (Рис. 1).

Рис. 1. Перспективная проекция

В случае с параллельной проекцией эти плоскости перпендикулярны (Рис. 2), благодаря чему OpenGL ES отображает все предметы в одинаковом масштабе независимо от того, насколько предмет удален от камеры.

Рис. 2. Параллельная проекция

Нормализованное пространство устройства

OpenGL ES в первую очередь работает с треугольниками. Один треугольник имеет три точки в 3D-пространстве. Чтобы визуализировать такой треугольник в фреймбуфере, OpenGL ES необходимо знать координаты этих 3D-точек в пиксельной координатной системе фреймбуфера. Если ему известны три данные координаты точек, он может просто нарисовать в фреймбуфере все пикселы, которые находятся внутри треугольника.

Когда OpenGL ES уже известны проецируемые на ближнюю плоскость отсечения точки треугольника, можно перевести их в пиксельные координаты фреймбуфера. Для этого необходимо трансформировать точки в так называемое нормализированное пространство устройства. Основываясь на координатах нормализованного пространства устройства (Рис. 3), OpenGL ES подсчитывает конечные пиксельные координаты фреймбуфера [4, с. 53].

Рис. 3. Нормализованное пространство устройства

Настройка отображения

OpenGL ES выражает проекции в виде матриц. Матрица задаёт преобразования, которые следует применить к точке. При умножении матрицы на точку мы применяем изменения к точке. Например, при умножении точки на матрицу, в которой закодирован переход на 5 единиц по оси х, точка передвинется на 5 единиц по оси х и, как следствие, изменит свои координаты.

Можно объединять преобразования, хранящиеся в нескольких матрицах, в одну матрицу путем умножения матриц друг на друга. Когда умножают одну объединенную матрицу на точку, все преобразования, хранящиеся в этой матрице, применяются к этой точке. Порядок, в котором будут применяться преобразования, зависит от порядка, в котором мы перемножали матрицы.

OpenGL ES содержит три вида матриц, применяемых к точкам моделей.

-        Модельно-видовая матрица применяется для изменения размеров и положения точек треугольника, ориентации камеры.

-        Матрица проекции задаёт преобразования для точек треугольника.

-        Матрица текстур применяется для управления координатами текстур.

OpenGL ES отслеживает эти три матрицы. Каждый раз, когда мы устанавливаем одну из них, она сохраняется в памяти до тех пор, пока мы снова ее не изменим.

Определение матрицы проекции

Для перевода координат, проецируемых на ближнюю плоскость отсечения OpenGL ES использует область просмотра.

gl10.glViewport(0, 0, width, height);

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

Перед тем как мы начнём использовать матрицы, мы должны указать OpenGL ES какой матрицей будем управлять. Делаем это методом glMatrixMode. В качестве параметра передаем нужный тип матрицы.

gl10.glMatrixMode(GL10.GL_PROJECTION);

Все последующие вызовы методов управления матрицами будут направлены на матрицу, которую мы установили в этом методе, до тех пор, как снова не изменим активную матрицу, еще раз вызвав этот метод.

Перспективная проекция

Для установки в активной матрице перспективной проекции будем использовать метод glFrustumf.

gl10.glFrustumf(-ratio, ratio, -1, 1, 1, 25);

Задаём область видимости в форме усеченной пирамиды. Параметры задают левую, правую, нижнюю, верхнюю, ближнюю и дальнюю плоскости отсечения соответственно (Рис. 4).

public void onSurfaceChanged(GL10 gl10, int width, int height) {

                        gl10.glViewport(0, 0, width, height);

                        float ratio = (float) width/height;

                        gl10.glMatrixMode(GL10.GL_PROJECTION);

                        gl10.glLoadIdentity();

                        gl10.glFrustumf(-ratio, ratio, -1, 1, 1, 25);

            }

В нашем случае glLoadIdentity значит, что мы сбрасываем матрицу проекций в исходное состояние.

Рис. 4. Пример перспективной проекции

Параллельная проекция

Параллельная проекция устанавливается посредством метода glOrthof. Область видимости в этом случае будет иметь форму куба. Фактически метод glOrthof определяет два внешних угла области просмотра (Рис. 5).

            public void onSurfaceChanged(GL10 gl10, int width, int height) {

                        gl10.glViewport(0, 0, width, height);

                        gl10.glMatrixMode(GL10.GL_PROJECTION);

                        gl10.glLoadIdentity();

                        gl10.glOrthof(0, 480, 0, 320, 1, -1);

            }

Рисунок 5. Пример ортогональной проекции

Вывод

В заключении несколько слов о том, когда использовать параллельную проекцию, а когда перспективную. Перспективная проекция выполняется дольше параллельной. Её целесообразно использовать в 3D-играх и приложениях. Параллельная проекция больше подходит для визуализации 2D-графики.

Литература:

1.      Projection and camera view in OpenGL ES 1.0. [Электронный ресурс]. URL: http://developer.android.com/guide/topics/graphics/opengl.html

2.      GLSurfaceView.Renderer. [Электронный ресурс]. URL: http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html

3.      Zechner Mario. Beginning Android Games. — 2013. — 688 pages. — ISBN 978–1430230427

4.      Meht Prateek. Learn OpenGL ES for Mobile Game and Graphics Development. — 2013. — 209 pages. — ISBN 978–1430941341

5.      Munshi A, Ginsburg D, Shreiner. OpenGL ES 2.0 Programming Guide. — 2008. — 457 pages. — ISBN 978–0321502797

Основные термины (генерируются автоматически): перспективная проекция, параллельная проекция, нормализованное пространство устройства, ближняя плоскость отсечения, матрица, активная матрица, дальняя плоскость, конечное изображение, вид матриц, матрица проекции.

Похожие статьи

Трехмерная реконструкция объектов из последовательности...

Двумерная проекция – это плоское изображение (фотография)

Получение формы из фокуса, в общем случае, возможно только с помощью специального устройства (рисунок 5).

В случае использования некалиброванных изображений, матрицы K, C, E вычислить не удастся.

Моделирование алгоритма работы бесплатформенной...

Матрица С формируется по данным от ДУС согласно выражению. В результате образуются проекции кажущегося ускорения aXg, aYg и aZg.

— вектор направления движения мобильного робота в пространстве ; — проекция вектора на плоскости , где.

Построение трёхмерной модели лица человека путём совмещения...

Находится матрица преобразования, описывающая поворот плоскости xOy к плоскости, параллельной плоскости лица.

В результате проекции множества точек на плоскость, параллельную лицу, изображение лица остаётся фронтальным несмотря на повороты лица...

Метод согласованной идентификации в задаче ректификации...

Для нахождения фундаментальной матрицы предлагается новый подход, основанный на согласованной идентификации.

Пусть имеются две камеры с центрами проекций в точках O и O’, плоскости проекций П и П' этих камер, и некоторая точка P в пространстве (рис. 1).

Распознавания для вариантных и инвариантных образов

а) преобразование декартовых координат в полярные координаты используя лог-полярное преобразование для матрицы с размерностью

Для лучшего понимания студентами процесса перехода из одной системы координат в другую дадим проекции одного и того же вектора в...

Алгоритмы распознавания объектов | Статья в сборнике...

‒ Выбор матрицы маленького размера; ‒ Размер ячейки матрицы уменьшается с каждой итерации, до тех пор, пока не будет достигнут заданный

Существует семейство алгоритмов, использующих понятие порогового отсечения для обработки цветных изображений.

Обработка и сегментация тепловизионных изображений

– для сокращения времени вычислений и отсечения посторонних шумов на изображении значения пикселей приводим в диапазон 0 до

Данную матрицу-фильтр еще называют ядром свертки — обычно это квадратная матрица размерностью n × n элементов, где n — нечетное.

Построение теней в перспективе | Статья в журнале...

Вторичную проекцию луча в этом случае строить не следует, поскольку искомая точка уже установлена пересечением двух линий. Ребро (34) также параллельно плоскости T, его тень параллельна ребру.

Создание динамических изображений при помощи программы...

Для построения тени переднего вертикального ребра АВ, проводим световую плоскость N. Световая плоскость пересекает горизонтальную плоскость проекции параллельно s', а фронтальную плоскость проекции пересекает по вертикальной линии.

Обсуждение

Социальные комментарии Cackle

Похожие статьи

Трехмерная реконструкция объектов из последовательности...

Двумерная проекция – это плоское изображение (фотография)

Получение формы из фокуса, в общем случае, возможно только с помощью специального устройства (рисунок 5).

В случае использования некалиброванных изображений, матрицы K, C, E вычислить не удастся.

Моделирование алгоритма работы бесплатформенной...

Матрица С формируется по данным от ДУС согласно выражению. В результате образуются проекции кажущегося ускорения aXg, aYg и aZg.

— вектор направления движения мобильного робота в пространстве ; — проекция вектора на плоскости , где.

Построение трёхмерной модели лица человека путём совмещения...

Находится матрица преобразования, описывающая поворот плоскости xOy к плоскости, параллельной плоскости лица.

В результате проекции множества точек на плоскость, параллельную лицу, изображение лица остаётся фронтальным несмотря на повороты лица...

Метод согласованной идентификации в задаче ректификации...

Для нахождения фундаментальной матрицы предлагается новый подход, основанный на согласованной идентификации.

Пусть имеются две камеры с центрами проекций в точках O и O’, плоскости проекций П и П' этих камер, и некоторая точка P в пространстве (рис. 1).

Распознавания для вариантных и инвариантных образов

а) преобразование декартовых координат в полярные координаты используя лог-полярное преобразование для матрицы с размерностью

Для лучшего понимания студентами процесса перехода из одной системы координат в другую дадим проекции одного и того же вектора в...

Алгоритмы распознавания объектов | Статья в сборнике...

‒ Выбор матрицы маленького размера; ‒ Размер ячейки матрицы уменьшается с каждой итерации, до тех пор, пока не будет достигнут заданный

Существует семейство алгоритмов, использующих понятие порогового отсечения для обработки цветных изображений.

Обработка и сегментация тепловизионных изображений

– для сокращения времени вычислений и отсечения посторонних шумов на изображении значения пикселей приводим в диапазон 0 до

Данную матрицу-фильтр еще называют ядром свертки — обычно это квадратная матрица размерностью n × n элементов, где n — нечетное.

Построение теней в перспективе | Статья в журнале...

Вторичную проекцию луча в этом случае строить не следует, поскольку искомая точка уже установлена пересечением двух линий. Ребро (34) также параллельно плоскости T, его тень параллельна ребру.

Создание динамических изображений при помощи программы...

Для построения тени переднего вертикального ребра АВ, проводим световую плоскость N. Световая плоскость пересекает горизонтальную плоскость проекции параллельно s', а фронтальную плоскость проекции пересекает по вертикальной линии.

Задать вопрос