Проекции в OpenGl ES
Автор: Бутенко Вероника Вячеславовна
Рубрика: 1. Информатика и кибернетика
Опубликовано в
Дата публикации: 24.09.2014
Статья просмотрена: 1699 раз
Библиографическое описание:
Бутенко, В. В. Проекции в OpenGl ES / В. В. Бутенко. — Текст : непосредственный // Современные тенденции технических наук : материалы III Междунар. науч. конф. (г. Казань, октябрь 2014 г.). — Казань : Бук, 2014. — С. 1-4. — URL: https://moluch.ru/conf/tech/archive/123/6212/ (дата обращения: 15.11.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. А также, про...
Способы классификации движущихся объектов на видео
В данной статье мы рассмотрим область машинного зрения, связанную с распознаванием объектов (трекингом). Рассмотрим область применения трекинга. Опишем основные принципы и подходы к распознаванию объектов. Также рассмотрим проблемы, связанные с треки...
Использование кодеков в подготовке исходных данных для обучения искусственной нейронной сети
В данной работе решается задача подготовки исходных данных (обучающей выборки) для использования в обучении искусственной нейронной сети, распознающей образы в видео. Анализируется тенденции популярности тем «Большие данные» и «Глубокое обучение», а ...
Алгоритм сжатия текстовых файлов
В статье рассматривается метод эффективного кодирования текстовой информации. В отличие от большинства существующих методов, большая эффективность кодирования и сжатия текста достигается за счет учета вероятностей положения алфавита символов на разли...