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

Отправьте статью сегодня! Журнал выйдет 28 декабря, печатный экземпляр отправим 1 января.

Опубликовать статью в журнале

Автор:

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

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

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

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

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

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

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

Работа посвящена двум способам отображения графики в 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

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

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

Разработка модуля анализа данных в интеллектуальных системах

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

Применение графических процессоров для параллельных вычислений

Статья описывает актуальность использования параллельных технологий на основе графических процессоров. Рассмотрена задача гравитационного взаимодействия N-тел. Для анализа ускорения использованы различные графические процессоры.

Использование псевдосплошных образов для идентификации сигналов

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

Разработка и отладка программного обеспечения для подавления артефактов в электрокардиограмме

В данной статье описана спроектированная программа, представляющая виртуальную программу для подавления артефактов в электрокардиограмме, написанная в среде Mathcad. Так же был построен график спектральной области, по которому можно найти оптимальное...

Механизмы работы нейронных сетей

В статье рассматривается применение механизмов соответствия сгенерированных и нормированных слов. Вычислительные эксперименты показывают преимущество предложенной модели по сравнению с charRNN. В документе также рассматривается применение предлагаемо...

Алгоритмы балансировки в сети OSPF

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

Обзор технологий виртуализации

В представляемой статье приведено описание различных типов виртуализации, как наиболее значимой характеристики средств виртуализации. Рассмотрен ряд технологий виртуализации, в частности OpenVZ, Parallels Virtuozzo Containers, Xen и KVM. А также, про...

Способы классификации движущихся объектов на видео

В данной статье мы рассмотрим область машинного зрения, связанную с распознаванием объектов (трекингом). Рассмотрим область применения трекинга. Опишем основные принципы и подходы к распознаванию объектов. Также рассмотрим проблемы, связанные с треки...

Использование кодеков в подготовке исходных данных для обучения искусственной нейронной сети

В данной работе решается задача подготовки исходных данных (обучающей выборки) для использования в обучении искусственной нейронной сети, распознающей образы в видео. Анализируется тенденции популярности тем «Большие данные» и «Глубокое обучение», а ...

Алгоритм сжатия текстовых файлов

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

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

Разработка модуля анализа данных в интеллектуальных системах

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

Применение графических процессоров для параллельных вычислений

Статья описывает актуальность использования параллельных технологий на основе графических процессоров. Рассмотрена задача гравитационного взаимодействия N-тел. Для анализа ускорения использованы различные графические процессоры.

Использование псевдосплошных образов для идентификации сигналов

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

Разработка и отладка программного обеспечения для подавления артефактов в электрокардиограмме

В данной статье описана спроектированная программа, представляющая виртуальную программу для подавления артефактов в электрокардиограмме, написанная в среде Mathcad. Так же был построен график спектральной области, по которому можно найти оптимальное...

Механизмы работы нейронных сетей

В статье рассматривается применение механизмов соответствия сгенерированных и нормированных слов. Вычислительные эксперименты показывают преимущество предложенной модели по сравнению с charRNN. В документе также рассматривается применение предлагаемо...

Алгоритмы балансировки в сети OSPF

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

Обзор технологий виртуализации

В представляемой статье приведено описание различных типов виртуализации, как наиболее значимой характеристики средств виртуализации. Рассмотрен ряд технологий виртуализации, в частности OpenVZ, Parallels Virtuozzo Containers, Xen и KVM. А также, про...

Способы классификации движущихся объектов на видео

В данной статье мы рассмотрим область машинного зрения, связанную с распознаванием объектов (трекингом). Рассмотрим область применения трекинга. Опишем основные принципы и подходы к распознаванию объектов. Также рассмотрим проблемы, связанные с треки...

Использование кодеков в подготовке исходных данных для обучения искусственной нейронной сети

В данной работе решается задача подготовки исходных данных (обучающей выборки) для использования в обучении искусственной нейронной сети, распознающей образы в видео. Анализируется тенденции популярности тем «Большие данные» и «Глубокое обучение», а ...

Алгоритм сжатия текстовых файлов

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