Opengl быстрый старт


Содержание

Как настроить Visual Studio 2015 для работы с OpenGL последних версий

22.11.2015, 22:23

Как настроить Visual Studio 2015 для работы с OpenGL последних версий
Доброго времени суток. Возник такой вопрос. Как настроить Visual Studio 2015 для работы с.

Вращение прямой вокруг выбранной точки opengl (visual studio 2015) c++
Мне нужно изобразить на экране прямую, которая вращается около одной из своих точек. Как мне.

Как установить OpenGL на Visual Studio?
Можете пожалуйста поделиться ссылкой на подробное описание как установить OpenGL на студию (с нуля.

Как подключить openGL в C# (Visual Studio 2015)
Не могу найти как его установить. Там преподаватель за 5 файлов каких то говорила в архиве их нужно.

Как правильно настроить Visual Studio для работы с OpenCV и Tesseract?
Доброго времени суток. У меня проблема по настройке проекта Visual Studio 2012 для работы с openCV.

22.11.2015, 23:30 2

Решение

Чувак, ты вот на час меня раньше написал, сам уже думал писать тут, но магия произошла
Что я сделал:

1. Проект -> Свойства -> Компоновщик -> Ввод -> Дополнительные зависимости

2. В папке с проектом, а точнее C:\Users\*имя пользователя*\Documents\Visual Studio 2015\Projects\*имя проекта*\*имя проекта*
Нужно вставить glut.h и glut32.lib

3. И напоследок в коде написать (взято с форума же)

8.2 Сплайны — реализация алгоритма на OpenGL.

Необходимые знания:

Разработка программы начинается с создания оболочки. Создайте окно программы и разместите на ней элемент openglsimplecontrol, как показано на рисунке 1, после чего установите его размеры 500х500.

Переименуйте данный объект, дав ему имя AnT.
Рисунок 1. Заготовка окна.

Справа от данного элемента разместите элемент comboBox, после чего в его свойствах установите значение параметра DropDownStyle = DropDownList. После этого выпадающие элементы перестанут быть доступными для редактирования. После этого измените элементы Items, как показано на рисунке 2.
Рисунок 2. Заполнение элемента listBox.
Также не забудьте установить ссылки на используемые библиотеки Tao (рис. 3).

Инициализация окна и OpenGl происходит так же, как и в предыдущих проектах. Код приведен на всякий случай чуть ниже.
Рисунок 3. Подключение Tao.
Для обработки событий мыши выделите объект AnT, перейдите к его свойствам, после чего перейдите к настройке событий и добавьте обработку событий мыши, как показано на рисунке 4.
Рисунок 4. События мыши.

Для реализации визуализации будет использоваться таймер. После инициализации окна он будет генерировать событие, называемое тиком таймера, раз в 30 миллисекунд. Добавьте элемент таймер, переименуйте экземпляр в RenderTimer и установите время тика 30 миллисекунд (как показано на рисунке 5), а также добавьте ему событие для обработки тика.
Рисунок 5. Создание таймера.
Нам потребуется объявить ряд переменных для дальнейшей работы программы:

Код инициализации окна, настройки визуализации в OpenGL и старт таймера после завершения начальной настройки.

Не забудьте создать непосредственно само событие загрузки формы!

Функция визуализации текста уже была рассмотрена нами ранее.

Теперь переходим непосредственно к обработке нажатий мыши, таймера и построению сплайна.

Обработка события таймера:

Обработка события мыши, установленная для объекта AnT, будет решать две задачи: при перемещении курсора, интерактивная (т.е. еще не зафиксированная точка) будет создавать эффект создания сплайна на ходу. Но если установлен режим редактирования сплайна, то в том случае, если какая-либо из точек захвачена, т.е. на нее наведен курсор и зажата левая клавиша мыши, то до тех пор пока пользователь не отпустит клавишу мыши, мы будем вносить изменения в координаты данной (захваченной) вершины.

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

Обработка событий мыши:

Вот и все, теперь можно протестировать работу программы (рис. 6).
Рисунок 6. Результат работы программы: реализация B-сплайнов на OpenGl.

Обновление OpenGL в Windows 7


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

Обновляем OpenGL в Windows 7

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

Когда у вас установлен самый свежий драйвер на видеокарту и обновлений больше нет, при этом все равно появляется уведомление о необходимости обновления OpenGL, сразу переходите к третьему способу. Если и этот вариант не принес никаких результатов, значит, ваше оборудование не поддерживает последние библиотеки. Рекомендуем задуматься о выборе новой видеокарты.

Способ 1: Обновление драйверов видеокарты в Windows 7

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

Способ 2: Обновление компонентов в фирменной утилите видеокарты

Сейчас основными производителями графических адаптеров являются AMD и NVIDIA. У каждого имеется собственный софт, который обеспечивает корректную работу с операционной системой и позволяет обновлять ПО. Обладателям видеокарт NVIDIA советуем обратиться к материалу по следующей ссылке, чтобы разобраться с установкой новой версии драйвера OpenGL в GeForce Experience.

Владельцам карточек от AMD нужно ознакомиться с другими статьями, поскольку в данном случае все действия выполняются в Catalyst Control Center либо в Radeon Software Adrenalin Edition, в зависимости от типа установленного ПО.

Способ 3: Обновление DirectX

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

На данный момент последней версией для ОС Виндовс 7 является DirectX 11. Если у вас инсталлирована более ранняя библиотека, советуем обновить ее и проверить работоспособность ПО. Развернуто на эту тему читайте в другом материале.

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

Отблагодарите автора, поделитесь статьей в социальных сетях.

Opengl быстрый старт

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

В Cinema 4D R18 программное затенение вьюпорта было заменено (оно ещё используется только для рисования в BodyPaint 3D). Отображение вида использует теперь только OpenGL. Теперь OpenGL работает не только исключительно на графической карте, этот режим далее называется Hardware OpenGL, но может также, хоть и медленнее, просчитываться и CPU, далее – Software OpenGL. Преимущество этого в том, что оба режима мало отличаются друг от друга визуально (различия описаны ниже). Тем самым можно использовать в Software OpenGL такие эффекты как освещение, тени, отображение канала материала Нормали и т. п., что раньше возможно было только с графической картой.

Из-за преимущества в скорости рекомендуется всегда использовать Hardware OpenGL. Отключайте эту опцию только тогда, когда у вас появляются проблемы с отображением во вьюпорте. Возможно при этом понадобится уменьшить настройки Расширенного OpenGL (вид > меню > Опции). OpenGL на графической карте намного быстрее, чем на CPU!

Если вы неуверены в том, какой вид OpenGL на данный момент используется Cinema 4D (после изменения опции нужно перезапустить Cinema 4D), кликните внизу на кнопку Показать способности OpenGL . Посмотрите в появившемся окне на третью строку «Версия». Если там указано что-то вроде «3.3 (Core Profile) Mesa» то активен Software OpenGL. Между прочим, «Mesa» это графическая библиотека, которая делает возможным просчёт OpenGL на CPU.

Разница между Software OpenGL и Hardware OpenGL

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

Прежде всего Software OpenGL не может отображать следующее:

  • Сглаживание: ниже описанное сглаживание вьюпорта.
  • Дизеринг: ниже описанное функция Дизеринг ( Включить дизеринг для вьпорта ).
  • Просчёты, которые зависят от графической карты, например тесселяция вьюпорта Cinema 4D (в материале (закладка «Редактор») или Subdivision Surfaces (Тип адаптивный OpenSubdiv Catmull-Clark)) или SSAO (приближение к окклюзии окружения).
  • Контур выделения .

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

    На основе этой техники, которая использует внутренний алгоритм для сохранения уменьшенных копий текстуры и производит затем их смешивание, получается максимальное качество представления в окне редактора программы.


    Посредством этого выпадающего меню вы устанавливаете качество сглаживания, которое будет использоваться при работе в окне редактора (не для конечного просчёта). Высокие значения приводят соответственно к получению лучших результатов. Особенно при совместном использовании с установкой Линейный возможно получение максимального качества показа для текстуры.

    Сглаживание не работает когда:

  • Включён Software OpenGL.
  • В настройках вида активна .
  • Вы можете здесь отдельно назначить показ тени источников света (при соблюдении их последовательности расположения в окне Менеджер объектов ). При значении этого параметра 0 показ теней не производится. Много теней могут могут замедлить работу вида. Тени принадлежат к тем функциям OpenGL, которым требуется много времени на просчёт. Поэтому здесь можно ограничить их количество.

    Макс. глубина прозрачности [0..10]

    Это значение определяет, сколько слоёв прозрачности должны быть правильно отображены. Если у нескольких объектов, находящихся друг за другом и имеющих разные прозрачные материалы, случаются ошибки отображения, то вы можете повысить тут значение, что приведёт к замедлению просчёта:

    Значение 0 отключает правильный просчёт и отображает прозрачность только как растровый эффект.

    Макс. источников света [1..20]

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

    Использовать кеш шейдера

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

    Включить дизеринг для вьюпорта

    При отображении медленно меняющихся градаций яркости часто проявляется эффект «Бендинг» (в изображении сверху при переходе с RGB 69, 69, 69 на 70, 70, 70). При использовании «дизеринга» (изменение структуры в данном участке) можно избежать образование жёсткого перехода цвета.

    Обратите внимание на то, что Дизеринг не работает с Software OpenGL.

    Показать способности OpenGL.

    Илон Маск рекомендует:  Что такое код selectcliprgn

    Кликните на этой кнопке для оценки возможностей вашей системы. Это в особенности интересно для Hardware OpenGL, т. е. когда востребуются возможности графической карты. (Software OpenGL обладает практически всеми требуемыми функциями) Появится вот такое окно:

    Здесь вы найдёте некоторые значения, предоставленные в определённом списке:

  • Средняя колонка: действительные значения вашей графической карты
  • Правая колонка: минимально необходимые значения для использования Расширенного OpenGL .
  • Значительно важнее обратить внимание не на значения, а на показанное внизу при оценке вашей карты предложение. Желаемым вариантом является тот, когда ваш графический ускоритель поддерживает все необходимые свойства для режима Расширенный OpenGL .

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

    Расширенный OpenGL предлагает преимущество показа самых важных свойств материалов и источников света без предварительного проведения просчёта в окне редактора программы.


    Расширенный OpenGL может устанавливаться активным по отдельности для каждого окна редактора (меню: Настройки ). Дополнительные эффекты, такие как прозрачность, тени, пост эффекты и так далее при этом возможно устанавливать активными также по отдельности.

    Но не ожидайте чуда: невозможным произвести показ всех свойств материала и источников света на основе OpenGL. При этом нет гарантии, что показ OpenGL будут на 100% совпадать с просчитанным результатом вашей сцены, так как OpenGL и Cinema 4D слишком сильно отличаются друг от друга. Речь тут идёт скорее о возможности отображения большинства случаев в окне редактора, без необходимости постоянного просчёта изображения. Отличительным моментом при этом является показ создаваемой тени при использовании источников освещения в сцене.

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

  • Каналы материалов: цвет, диффузия, свечение, прозрачность, окружение, рельеф, нормали, альфа, отражение (отражения неба будут правильно отражены, для отражения объектов существует приближение отражения; см. Отражения объектов), смещение (при использовании тесселяции) (большинство этих каналов вы можете по отдельности включить или отключенными в закладке Редактор материала при использовании Расширенного OpenGL ).
  • Источники света: наиболее важные функции являются интегрированными (к примеру, Тип, Внутренний угол для источника конусного типа или цвет источника, закладка Детали ). Тень — нет поверхностных теней. В больших сценах при показе теней не исключается возникновение неточностей.
  • Многие шейдеры (особенно шейдер шума) будут просчитаны на основе графической карты, что означает соответствие между показом в окне редактора и просчитываемым изображением. Кроме этого, в окне редактора программы возможно отображение анимиции просчитанных таким образом шейдеров.

    Не просчитываемые напрямую графической картой шейдеры (к примеру, Плитки , или Кирпич ) будут симулированы, то есть внутренним алгоритмом программы при этом используется битовая карта. Она проецируется при использовании проекции UVW на непосредственный объект. Такие изображения, как правило, сохраняются совместно со сценой, что в конечном итоге значительно увеличивает их объём!

    Opengl быстрый старт

    Для выполнения 3-го и 4-го разделов курса Компьютерной Графики вам потребуются относительно новые возможности OpenGL, которые опираются на стандарт OpenGL 3.2 и выше. Старые видеодрайверы и видеокарты, возможно, не обеспечивают нужную версию OpenGL, либо не поддерживают некоторые расширения.

    В этой статье изложено пять разных способов обеспечить себе хорошую поддержку OpenGL. С таким обилием вариантов отговорки из разряда “у меня не устанавливается X” становятся просто неприличными…

    Способ первый: использовать современный драйвер

    • На компьютере должен быть установлен относительно свежий видеодрайвер
    • Если у вас используется гибридная графическая система видеокарта Intel + видеокарта NVIDIA, то лучше переключиться на видеокарту NVIDIA в настройках программы NVIDIA Settings, поставляемой вместе с драйвером.
    • Если у вас используется гибридная графическая система видеокарта Intel + видеокарта AMD, то лучше переключиться на видеокарту AMD в настройках программы AMD Catalyst, поставляемой вместе с драйвером.

    Способ второй: установить Ubuntu

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

    Чтобы получить OpenGL 3.2 на любой машине, достаточно установить Ubuntu 14.04.5. Открытый видеодрайвер Mesa в этой версии предоставляет OpenGL 3.3 даже в программной реализации.

    • Не стоит ставить Ubuntu на виртуальную машину: вполне возможно, что графическое оборудование станет недоступным для Ubuntu и ей придётся переключиться на программную реализацию OpenGL
    • Программная реализация OpenGL (Mesa LLVMpipe) будет работать медленнее аппаратной, на сложных сценах и играх FPS может падать до 4-5 кадров в секунду. Тем не менее, вы получите OpenGL 3.3 со всеми его возможностями
    • Аппаратные реализации предоставляют различные версии OpenGL в зависимости от драйвера, но в любом случае не меньше OpenGL 3.3. Открытые видеодрайверы могут работать с видеокартами основных трёх производителей: NVIDIA, AMD (ATI), Intel

    Способ третий: понизить требования к OpenGL

    В примерах к этой главе стоит проверка, которая выбросит исключение в случае, если видеодрайвер не поддерживает полностью стандарт OpenGL 3.2:

    На деле, вы спокойно можете отключить эту проверку и запустить некоторые примеры даже на устаревших драйверах. Более того, поддержка шейдеров появилась в виде расширения GL_ARB_shader_object ещё до появления шейдеров в стандарте OpenGL. Если ваш видеодрайвер сильно устарел и glUseProgram не работает, проверьте поддержку этого расширения. Если поддержка есть, замените функции для работы с шейдерами на альтернативы, описанные в спецификации расширения.

    Способ четвёртый: мобильная разработка под Android


    Современные Android-устройства поддерживают стандарт OpenGL ES 2.0, во многом эквивалентный стандарту OpenGL 3.2 в режиме Compatibility Profile. Библиотеки SDL2, GLM, boost собираются и работают на Android; библиотека GLEW не нужна, т.к. нужная функциональность доступна через системные заголовочные файлы.

    Таким образом, можно разрабатывать на тех же инструментах на Android NDK, или даже адаптировать для Android некоторые примеры к статьям.

    Способ пятый: звонок другу

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

    Такой способ практиковался на ПС в конце 90-х, когда доступ к компьютеру с процессором Intel и ОС Windows был далеко не у всех.

    Ускорение Adobe CS при помощи Open GL. И видеокарты, работающие с Open GL в Aдобе.

    Как и на каких осях пашет Open GL

    Ясный факт: Фотошоп CS5 и CS4 использует чип видеоадаптера (графический процессор или GPU), а центральный проц компа (CPU) нужен для ускорения некоторых функций. Когда конкретно Фотошоп использует GPU? Вот когда:

    • При поддержке OpenGL — старого проверенного стандарта, ускоряющего видеообработку при работе с большими или сложными изображениями, в том числе 3D.
    • Если имеем, по крайней мере, 256 МБ оперативной памяти.
    • Если имеем драйвер, который поддерживает OpenGL 2.0 и Shader Model 3.0, использующий GPU для рендеринга эффектов.

    Если система отвечает этим требованиям, то Фотошоп автоматом выставит предпочтительные режимы отрисовки через OpenGL в операционках Mac OS, Windows, Vista и Windows 7. В 32-битной Windows XP можно включить опцию вручную, но если видеокарта его поддерживает.

    Примечание: Ускорение GPU с поддержкой OpenGL может работать и на 64-битной Windows XP, но официально Фотошоп там их не поддерживает.

    Ось

    Поддержка и ограничения GPU

    Компы Power PC Macintosh не поддерживаются в CS5.

    CS4 поддерживает OpenGL на маковских Power PC, если в нём установлена поддерживаемая карта. Следует убедиться в том, что «Enable OpenGL Drawing» активен в настройках Фотошопа.

    CS4 не поддерживает функции «Advanced Drawing» в компах Power PC, даже если установлена подходящая видеокарта.

    Поддерживается, но «Advanced mode» недоступен в Mac OS X 10.5.x.

    Windows XP 32 bit

    Поддерживается, но «Enable OpenGL Drawing» по умолчанию не выбран.

    Windows Vista, Windows 7 32 и 64 bit

    Windows XP 64 bit

    CS5 и CS4 вполне работают на 64-битной Windows XP, но Адоб это не поддерживает.

    Что есть в CS4 и CS5 благодаря Open GL

    Фичи GPU, добавленные в CS5.

    • Плавный зум или «Scrubby Zoom». Подробнее читайте в хэлпе по «Zoom continuously».
    • Постоянная палитра быстрого доступа к выбору цвета пипеткой.
    • Цветовой круг.

    • Динамическая смена размера и жёсткости кистей.
    • Предпросмотр типа щетины кистей.
    • Трёхсекционная разметка обрезки изображений, как в Лайтруме. В простонародье «по золотому сечению».
    • «Repoussé» — 3D выдавливание.
    • 3D Наложения. включая базовую плоскость, направляющие источников света, а так же рамки сеток и материалов mesh and materials.
      Ну-да. ну-да, Макс уже в панике.

    Фичи CS4 CS5, касающиеся CPU.

    • Расширение зума: сглаживание на любом уровне.
    • Анимированный переход между шагами зума.
    • Плавное перемещение изображения инструментом «Рука».
    • Поворот холста.
    • Просмотр изображений в не квадратных пикселях.
    • Пиксельная сетка. Появляется при увеличении свыше пятисот процентов.
    • Движок Adobe Color «ACE» для использования палитр различными приложениями. Конвертирование цветов производится быстрее за счёт передачи обработки центральным видеопроцессору.
    • Предпросмотр кисти. Для активации выберите Edit > Preferences > Cursors > Brush Preview color. Теперь, с изменением параметров кисти, интерактивно отобразится результат.
    • Оси 3D.
    • Свет 3D.
    • Ускорение 3D.

    Настройки GPU и OpenGL в CS5

    • Edit > Preferences. Убедитесь в том, что в панели «Performance», в настройках GPU, выбран «Enable OpenGL Drawing». Нажмите «Advanced Settings» и сделайте выбор:
      • Mode > Basic. Обеспечивает основные возможности OpenGL при экономии памяти.
      • Mode > Normal. Ест побольше памяти, но добавит жизни соответствию цветов, тонировке и смешиванию.
      • Mode > Advanced. Открывает доступ ко всем новым возможностям OpenGL.

      Примечания:

    • Режим «Advanced» требует Mac OS 10.6.x и не доступен в Mac OS X 10.5.x.
    • Vertical Sync уменьшает разрыв по синхронизации кадров, как и дисплей.
    • Anti-Alias Guides And Paths позволяет GPU сглаживать края направляющих и путей.

    • В панели «3D» определяются опции интерактивного рендеринга:
      • OpenGL. Включает аппаратное ускорение при работе с 3D-объектами.
      • Ray Tracer. Снижает производительность, но позволяет видеть тени, преломления и отражения у 3D-объектов.
        (де жа вю ёпта. )

    Настройки GPU и OpenGL в CS4

    • Edit > Preferences > Панель «Performance» > Активировать «Enable OpenGL Drawing» в настройках GPU. Нажать «Advanced Settings» и настроить:
      • Vertical Sync. Так же, как и у дисплея, сокращает разрыв по синхронизации частоты кадров.
      • 3D Interaction Acceleration. Увеличивает скорость отзыва на клик при работе с 3D-формами. Если проблемы со скоростью более невыносимы и выражаются в затуплении картинки после отпускания кнопки, то выключите эту опцию.
      • Force Bilinear Interpolation. Опция просит GPU активировать высокоточное моделирование и сглаживание при использовании видеокарты, изначально не поддерживающей эти функции.
  • Опции Advanced Drawing и Debugging:
    • Use For Image Display. Удваивает использование оперативки при отрисовке больших картинок и 3D-моделей. Доступно для карт с пятьсот двенадцатью мегабайтами на борту и больше.
    • Compositing > None. Не отрисовывать изображения по шахматной доске. Уберёт сетку при большом зуме.
    • Compositing > Linear. Принцип линейного смешивания для оптимизации гаммы по принципу шахматной доски.
    • Compositing > Gamma Corrected. Использование правильного подхода коррекции по принципу шахматной доски.
    • Color Matching. Поможет при появлении артефактов.
  • Чего можно ожидать от Open GL на разных осях

    Windows XP

    Могут возникать сложности с перерисовкой при активном «Enable OpenGL Drawing» в CS5 или CS4. Особенно с тянущимися картинками, например с выделением перед вставкой.
    Решение. Обновите драйвер видеокарты. Если не помогло, то работайте в оконном режиме Фотошопа. Ещё можно попробовать покрутить картинку, а потом нажать Эскейп для возврата в исходную позицию. Либо уменьшить картинку и восстановить таким же способом.

    Фотошоп перерисовывает картинку чёрными квадратами или плиткой.
    Причина: Нехватка оперативки на видеокарте. Windows XP не может виртуализировать RAM карты и использует то, что есть, заменяя необработанные участки чёрными квадратами.
    Решение. В CS5 выберите режим «Basic» в диалоге «Advanced Settings» настроек OpenGL. При работе в CS4, следует отключить любые другие программы, занимающие GPU, либо позакрывать неиспользуемые окна в Фотошопе.

    Менюшки начинают мерцать после выбора, если открыта панель «Layers».
    Решение. Либо забейте, либо выключите «Enable OpenGL Drawing».

    Картинки мерцают при их перетаскивании.
    Решение. Выключите «Enable OpenGL Drawing».

    Windows Vista и Windows 7 64 bit

    При запуске CS4, возникает ошибка «Driver components mis-match. Exit is the only option».
    Детали. Проверьте системную информацию о вашей видеокарте. Если имя карты включает в себя «Microsoft Corporation — WDDM», то вы используете драйвер не производителя карты, а Майкрософтовский.
    Решение. Установите свежий драйвер от производителя видеокарты.

    Mac OS

    В CS5, рамка выделения (бегущие муравьи) пропадает при использовании плавного зума (Scrubby Zoom).
    Решение. Отмените выбор Скраби Зума в панели Зума.

    Производительность GPU низка в CS5, установленным на MacBook Pro с двумя GPU и активной опцией «Better Energy Savings» в «System Preferences».
    Решение. В «System Preferences», в панели «Energy Saver», выберите «Optimization > Better Performance».

    При максимальном зуме в CS5, пиксельная сетка и направляющие слегка сбиты относительно значений линейки.
    Детали. Проблема возникает на европейских языковых версиях Mac OS и Photoshop.
    Решение. Отключайте «Enable OpenGL Drawing» на протяжении работы с сетками и направляющими.

    При открытии файлов толще 500 мегабайт, появляется ошибка «Could not complete the Open command because there is not enough memory (RAM)». Причём ошибка может возникать при любом статусе «Enable OpenGL Drawing» — on или off.
    Решение. В меню «Window» отмените выбор «Application Frame». Либо откройте окно меньше изображения.

    Результаты тестов видеокарт

    Примечание: Адоб тестировал карты для лаптопов и десктопов, они разные. Поэтому, перед заливкой драйверов, удостоверьтесь в их соответствии вашей модели. Они различаются именами файлов.

    Примечание два: Фотошопу похуй карты ATI CrossFire и SLI.

    Видеокарты

    Nvidia GeForce
    Серии 7000, 8000, 9000, 100, 200, 400.


    Nvidia Quadro FX
    Серии x500, x700, x800, FX370, FX380, FX580, и карты Quadro CX. Здесь, вместо «x», следует подставлять индексные номера изо всей линейки данной серии. Например: «x500» включает карты серий 4500, 3500, и 1500.

    Nvidia Quadro
    600, 2000, 6000, 4000 (Mac).

    ATI Radeon
    Серии 2000, 3000, 4000, 5000, 6000. Примечание: Карты серии «ATI X 1000» не тестировались.

    ATI FireGL
    FireGL (Карты семейства R600 GPU серий x6xx): V3600, V5600, V7600, V7700, V8600, V8650.
    FirePro (Карты семейства R700 GPU серий x7xx): V3700, V3750, V5700, V7750, V8700, V8750.

    ATI FirePro
    FirePro (Карты семейства R800 GPU серий x8xx): V3800, V3850, V4900, V5800, V7800, V8800, V9800 .

    Intel
    Intel чипсета GMA 4-х серий.
    Intel семейства HD Graphics.
    Intel HD Graphics P3000.

    Macintosh
    MacBook Air Intel GMA X3100

    Известные проблемы

    ATI Radeon HD 3200
    При открытии нового изображения в 64-bit Windows 7, включается OpenGL Drawing.
    Решение. Установите Advanced Settings настроек OpenGL в Basic. ATI Radeon HD3200 поддерживает только этот режим, но не Normal и не Advanced.

    ATI FireGL 3350.
    Фотошоп валится, когда установлен Microsoft display driver в 64-bit Windows 7. Происходит это при включении или выключении OpenGL Drawing.
    Решение. На момент теста, у ATI не было драйвера этой карты для Windows 7 64 bit. Если уже появился, то установите его. Иначе не трогайте OpenGL Drawing.

    Серии ATI 1000, 2000, и 3000.
    Пунктирное обозначение прямоугольного выделения (бегущие муравьи) в Windows Vista 32 bit пиздит на пиксель.
    Решение. Загрузите и установите ключик рееста «TweakSelectionsOnOldATI_ON». А ключ «TweakSelectionsOnOldATI_OFF» вернёт всё обратно, если что. Примечание: Если побалуетесь с ключом на картах серий ATI 4000 или 5000, то можете получить эту проблему и на них. Для решения запустите тот же «TweakSelectionsOnOldATI_OFF».

    Nvidia GeForce 7300GT.
    Базовые настройки — это всё, что доступно в Mac OS 10.6.x.
    Решение. Так и задумано.
    А ещё недоступна активация OpenGL Drawing в Mac OS X старее 10.5.7.
    Решение. Так и задумано.
    А ещё очень тормозит редактирование текста в больших файлах.
    Решение. В диалоге «Advanced Settings» настроек OpenGL, вернитесь к настройкам Basic, либо отключите Enable OpenGL Drawing в Фотошопе.
    А ещё тормозит плавный зум, «Scrubby Zoom».
    Решение. Забейте, либо отключите Enable OpenGL Drawing, если вы работаете в Mac OS X 10.5.x. Если же в Mac OS X 10.6.x, то выберите настройки Basic в диалоге «Advanced Settings» настроек OpenGL.

    Nvidia GeFroce GT 120.
    Вываливается ошибка при попытке выделения в Mac OS.
    Решение. Отсоедините кабель от видеокарты. Если это происходит свободно, то является причиной ошибки в Фотошопе.

    Nvidia GeForce GT 120 и GeForce 8800.
    При выборе «Anti-Alias» в диалоге «Advanced Settings» OpenGL’a для направляющих и путей, никакой антиалиасинг не работает. Что в настройках Advanced, что в Normal. Ось — Mac OS.
    Решение. Переключитесь в Basic.

    Opengl быстрый старт

    Для выполнения 3-го и 4-го разделов курса Компьютерной Графики вам потребуются относительно новые возможности OpenGL, которые опираются на стандарт OpenGL 3.2 и выше. Старые видеодрайверы и видеокарты, возможно, не обеспечивают нужную версию OpenGL, либо не поддерживают некоторые расширения.

    В этой статье изложено пять разных способов обеспечить себе хорошую поддержку OpenGL. С таким обилием вариантов отговорки из разряда “у меня не устанавливается X” становятся просто неприличными…

    Способ первый: использовать современный драйвер

    • На компьютере должен быть установлен относительно свежий видеодрайвер
    • Если у вас используется гибридная графическая система видеокарта Intel + видеокарта NVIDIA, то лучше переключиться на видеокарту NVIDIA в настройках программы NVIDIA Settings, поставляемой вместе с драйвером.
    • Если у вас используется гибридная графическая система видеокарта Intel + видеокарта AMD, то лучше переключиться на видеокарту AMD в настройках программы AMD Catalyst, поставляемой вместе с драйвером.

    Способ второй: установить Ubuntu

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

    Чтобы получить OpenGL 3.2 на любой машине, достаточно установить Ubuntu 14.04.5. Открытый видеодрайвер Mesa в этой версии предоставляет OpenGL 3.3 даже в программной реализации.

    • Не стоит ставить Ubuntu на виртуальную машину: вполне возможно, что графическое оборудование станет недоступным для Ubuntu и ей придётся переключиться на программную реализацию OpenGL
    • Программная реализация OpenGL (Mesa LLVMpipe) будет работать медленнее аппаратной, на сложных сценах и играх FPS может падать до 4-5 кадров в секунду. Тем не менее, вы получите OpenGL 3.3 со всеми его возможностями
    • Аппаратные реализации предоставляют различные версии OpenGL в зависимости от драйвера, но в любом случае не меньше OpenGL 3.3. Открытые видеодрайверы могут работать с видеокартами основных трёх производителей: NVIDIA, AMD (ATI), Intel

    Способ третий: понизить требования к OpenGL


    В примерах к этой главе стоит проверка, которая выбросит исключение в случае, если видеодрайвер не поддерживает полностью стандарт OpenGL 3.2:

    На деле, вы спокойно можете отключить эту проверку и запустить некоторые примеры даже на устаревших драйверах. Более того, поддержка шейдеров появилась в виде расширения GL_ARB_shader_object ещё до появления шейдеров в стандарте OpenGL. Если ваш видеодрайвер сильно устарел и glUseProgram не работает, проверьте поддержку этого расширения. Если поддержка есть, замените функции для работы с шейдерами на альтернативы, описанные в спецификации расширения.

    Способ четвёртый: мобильная разработка под Android

    Современные Android-устройства поддерживают стандарт OpenGL ES 2.0, во многом эквивалентный стандарту OpenGL 3.2 в режиме Compatibility Profile. Библиотеки SDL2, GLM, boost собираются и работают на Android; библиотека GLEW не нужна, т.к. нужная функциональность доступна через системные заголовочные файлы.

    Таким образом, можно разрабатывать на тех же инструментах на Android NDK, или даже адаптировать для Android некоторые примеры к статьям.

    Способ пятый: звонок другу

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

    Такой способ практиковался на ПС в конце 90-х, когда доступ к компьютеру с процессором Intel и ОС Windows был далеко не у всех.

    Opengl быстрый старт

    Начнем с самого главного, установим необходимое программное обеспечение. Я предполагаю, что Windows у Вас уже установлен и работает, в противном случае вы купили не ту книгу. Во-первых, установите MSVisualC++6.0 и jdk113 или выше, если вам интересно узнать о написание java-апплетов с использованием OpenGL. Впрочем java понадобится вам только в седьмой главе. Во-вторых, нам понадобится реализация библиотеки OpenGL. Она входит в поставку Windows95/NT — это библиотеки opengl32.dll & glu32.dll.

    Основы OpenGL → Chapter 3. Рисуем простые объекты

    3.1 Общие положения

    Точки, линии, треугольники, четырехугольники, многоугольники — простые объекты, из которых состоят любые сложные фигуры. В предыдущей главе мы рисовали сферу, конус и тор. OpenGL непосредственно не поддерживает функций для создания таких сложных объектов, т.е. таких функций нет в opengl32.dll. Эти функции есть в библиотеки утилит glu32.dll, и устроены они следующим образом.

    Основы OpenGL → Chapter 4. Полезные и бесполезные мелочи

    4.1 Построение поверхностей

    Существует набор функций для построения сфер, цилиндров и дисков. Эти функции представляют очень мощный контроль за построением трехмерных объектов. Непосредственно рисовать вы будете, используя следующие функции: gluSphere, gluCylinder, gluDisk и gluPartialDisk. В начале книги вы научились строить трехмерные объекты с помощью функций из библиотеки Auxilary Library. Функции aux[Solid/Wire]Sphere, aux[Solid/Wire]Cylinder и aux[Solid/Wire]Cone просто вызывают gluSphere и gluCylinder.

    Урок 6. Использование OpenGL в SDL

    В этой теме 0 ответов, 1 участник, последнее обновление Васильев Владимир Сергеевич 3 года/лет, 1 месяц назад.

    На этот раз мы немного отвлечемся от 2D в сторону модного нынче 3D. Не нужно говорить, что на сегодняшний день единственным API для трехмерной графики под Linux является OpenGL. Думаю вы уже знакомы с этой библиотекой, хотя бы немного. Если же нет, то предлагаю сначала почитать основы работы с этой библиотекой (благо в интернете множество документации для начинающих). Данный урок — не самый лучше источник для знакомства с OpenGL. Разработчики SDL — люди неординарного ума. Поэтому неудивительно, что они выбрали гениальную позицию: не создавать свой 3D API, а использовать отточенный годами интерфейс OpenGL. Но не просто использовать, а создали замечательные средства для интеграции OpenGL в SDL приложение. Таким образом мы получаем в распоряжение множество дополнительных средств (таймеры, загрузка изображений, потоки, звук, сеть и т.п.). В прошлом уроке мы разобрали, что расширение DGA2 добавляет аппаратное ускорение к 2D программам. Но на некоторых системах было замечено, что это расширение не работает из-под обычного пользователя. Один из выходов — не использовать средства блиттинга SDL, а использовать OpenGL для отображения 2D. В принципе не сложно переписать например нашу библиотеку для спрайтов с поддержкой OpenGL, т.к. у многих пользователей стоят драйверы, обеспечивающие аппаратное ускорение 3D. Можно дать выбор при компиляции проекта: использовать OpenGL или же средства SDL.

    Создание OpenGL контекста средствами библиотеки SDL в действительности почти не отличается от инициализации обычного приложения SDL. Во-первых, вы должны указать флаг SDL_OPENGL для функции SDL_SetVideoMode() , Во-вторых, необходимо задать несколько параметров для OpenGL приложения (например размеры буфера глубины и буфера кадров) используя специальную функцию SDL_GL_SetAttribute , и наконец, если необходимо использовать двойной буфер, то необходимо установить его при помощи специального GL атрибута, но не нужно указывать флаг SDL_DOUBLEBUF функции SDL_SetVideoMode() , как для 2D приложения, поскольку он не будет работать для контекста OpenGL.

    Для начала необходимо включить нужные файлы заголовков:

    Пути к этим файлам могут различаться в разных системах, поэтому может потребоваться изменить пути в Makefile (опция I ). С самого начала необходимо инициализировать подсистемы:

    В нашем случае это видео подсистема и подсистема таймера для расчета FPS. Также не забываем вызывать функцию SDL_Quit() при выходе из программы.Далее устанавливаем GL атрибуты программы:

    Функция SDL_GL_SetAttribute в качестве параметров принимает название атрибута и его значение. В нашем случае мы указали использовать двойной буфер (1 — использовать, 0 — не использовать) и указали размеры составляющих каждого цвета для буфера кадров. На самом деле атрибутов несколько больше:

    • SDL_GL_RED_SIZE Размер красной составляющей буфера кадров, бит
    • SDL_GL_GREEN_SIZE Размер зеленой составляющей буфера кадров, бит
    • SDL_GL_BLUE_SIZE Размер синей составляющей буфера кадров, бит
    • SDL_GL_ALPHA_SIZE Размер альфа (прозрачности) составляющей буфера кадров, бит
    • SDL_GL_DOUBLEBUFFER 0 или 1, использовать или не использовать двойной буфер
    • SDL_GL_BUFFER_SIZE Размер буфера кадров, бит
    • SDL_GL_DEPTH_SIZE Размер буфера глубины, бит
    • SDL_GL_STENCIL_SIZE Размер буфера шаблона, бит
    • SDL_GL_ACCUM_RED_SIZE Размер красной составляющей буфера аккумулятора, бит
    • SDL_GL_ACCUM_GREEN_SIZE Размер зеленой составляющей буфера аккумулятора, бит
    • SDL_GL_ACCUM_BLUE_SIZE Размер синей составляющей буфера аккумулятора, бит
    • SDL_GL_ACCUM_ALPHA_SIZE Размер альфа составляющей буфера аккумулятора, бит

    Обратите внимание, что при необходимости использования двойного буфера просто укажите GL атрибут SDL_GL_DOUBLEBUFFER . Установка флага SDL_DOUBLEBUF не оказывает влияния на OpenGL контекст.
    Чтобы атрибуты начали действовать, далее необходимо установить видеорежим и задать флаг SDL_OPENGL :

    Здесь мы создаем окно 640х480 с глубиной цвета 32 бита. Можете установить флаг SDL_FULLSCREEN для работы в полноэкранном режиме.
    На этом инициализация OpenGL контекста закончена! Далее устанавливаем необходимые режимы стандартными функциями GL и GLU, такие как например цвет очищения экрана и тип проекции. В главном цикле программы мы обрабатываем нажатие клавиш и рисуем сцену. Обратите внимание, что для обновления экрана при использовании двойного буфера (в большинстве своем программы его используют) необходимо использовать специальную функцию SDL_GL_SwapBufers() вместо стандартной функции GL. Это очень важно!

    Устанавливаем режимы OpenGL и инициализируем таймер.


    В главном цикле обрабатываем события и рисуем сцену. Обратите внимание на SDL_GL_SwapBuffers() ! Функция glFlush() — посылает сцену на конвейер.

    Функция рисования сцены DrawGLScene() на самом деле не представляет никакой сложности. В ней рисуется куб с разноцветными гранями. Глобальные переменные xrf , yrf и zrf — так называемые rotate factors, т.е. угол поворота по соответствующим осям. Каждый фрейм мы изменяем эти значения, создавая интересный эффект вращения куба.

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

    Opengl быстрый старт

    Для чего эта тема?
    У многих создалась иллюзия сложности изучения «OpenGL», и не понимания простоты работы этой библиотеки для программиста.
    И даже используя «движок» нужно понимать как это взаимодействует с ОС, что может/не может конкретные устройства.

    В данной статье постараюсь выйти за рамки стандартных примеров — а именно постараюсь рассказать почему и за чем.
    ( тем более я давно это пообещал )
    От читателей требуется хотя бы поверхностное знание любого ЯП.

    Все дальнейшее посвящено библиотеке OpenGL ES 2.0 под Android, и последующим версиям.

    Что такое библиотека OpenGL ES 2.0?
    На базовом уровне, OpenGL ES 2.0 — это просто спецификация, то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации — библиотеки функций, соответствующих набору функций спецификации ( W: ).

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

    Для программиста OpenGL представляет низкоуровневую библиотеку для доступа к GPU ( графическому процессору ).

    Схема вариантов реализации библиотеки ( с точки зрения программиста + для сравнения DirectX ):

    В Android на 99.99% используется вариант В.
    То есть реализация OpenGL ES входит в состав драйвера,
    в отличие от DirectX, которая скорее является прослойкой между приложением и драйвером.
    Есть еще отдельные реализации OpenGL, например Mesa3D, но они в основном достаточно медленно развиваются и часто отстают на несколько поколений от решений производителей чипов.

    Что лучше, DirectX или OpenGL?
    Вопрос не корректный. Например если нужна мультиплатформенность — про DirectX можно забыть.
    И на взгляд автора DirectX слишком «оброс» хвостами. ( но это очень субъективно )
    + Сравнивать не совсем корректно, так как DirectX кроме графики реализует много интерфейсов ( и вполне кошерных — включая звук, ввод, сеть и т. д. )

    Что быстрее, DirectX или OpenGL?

    Тоже не корректный вопрос, все зависит от опытности программиста.
    Но опять на взгляд автора ( меня =) ) нестандартные возможности проще реализовывать на современных версиях OpenGL и тем более
    для этого не требуются переходы на новые операционные системы ( в отличие от DirectX 10 ).
    Времени на изучение тоже требуется на порядок меньше. + переносимость.

    Теперь чуть-чуть про GPU:
    В данный момент ( декабрь 2012г. ) в Android устройствах присутствуют два поколения GPU, Поддерживающие OpenGL ES 2.0 ( почти 95% ) и поддерживающие только версии 1.0 и 1.1.
    Аппаратной обратной совместимости НЕТ.
    Поэтому рассматривать версию стандарта меньше 2.0 на взгляд автора кроме как археологам не имеет смысла.
    ( стандарт версии 3.0 обратно совместим с 2.0 )

    Структура конвейера OpenGL 1.x:

    То есть часть блоков с «железной логикой» заменили на программируемые процессоры.
    Вопрос: а для чего?

    А все дело в том что аппаратно было реализовано достаточно мало функций, из-за этого создавались существенные ограничения в дальнейшем развитии и гибкость была равна нулю.
    История ( немного ):
    Первые попытки перенести расчеты с Cpu ( центрального процессора ) были реализованы в первом Geforce ( а не в Voodoo, как думают многие ), называлать технология T&L.
    Она позволяла аппаратно просчитывать на GPU освещение и выполнять уже простейшие шейдеры.
    Получилось «быстро», но не осталось даже минимальной гибкости. Есть аппаратно-реализованный метод освещения например,используем. Нет — и не будет.
    Следующая веха — GeForce 3, который обладал уже вполне программируемой логикой, но процессорные блоки еще небыли универсальными.
    То есть блоки делились на обрабатывающие вершины и фрагментные ( обрабатывающие пиксели ).
    Одни могли быть перегружены, другие простаивали.
    В чем смысл наращивания процессоров ( вычислительных блоков ) у GPU?
    Все дело в том что графические просчеты почти линейно маштабируется, то есть увеличение процессоров например со 100 до 200 дает почти 100% прирост производительности, так как в компьютерной графике текущий расчет обычно не зависит от предыдущего — то есть легко запаралелить.
    Но и существуют некоторые ограничения, о которых будет написано ниже.
    Теперь про сам OpenGL ES:

    Что может OpenGL ES?
    Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и многоугольников с последующей математической обработкой полученных данных и построением растровой картинки на экране и/или в памяти. Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который по сути представляет собой дискретный автомат. Абсолютное большинство команд OpenGL попадают в одну из двух групп: либо они добавляют графические примитивы на вход в конвейер, либо конфигурируют конвейер на различное исполнение трансформаций.
    Ключевая особенность — CPU и GPU работают не синхронно, то есть CPU не дожидается окончания исполнения команд от GPU, а продолжает работать ( если не было дополнительных указаний ).
    Есть стек команд ( инструкций ) OpenGL.
    ( стек бывает двух типов, fifo и lifo. FIFO — акроним «First In, First Out» (англ. ). Принцип «первым пришёл — первым ушёл», LIFO — акроним «Last In, First Out» (англ.), обозначающий принцип «последним пришёл — первым ушёл». В OpenGL используется fifo ( очередь )).

    Урок первый END.

    Представьте себе конвейер производства дед.мороза =)

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

    Это и есть машина конечных состояний. Проще объяснить не могу. Кто не понял — тут

    Продолжение как чуть высплюсь.
    ( следующая тема — что скрывается за GLSurfaceView, чем это плохо и что такое EGL. )
    OpenGL 2.0+ под Android (Пост Leopotam #18544726)

    Все статьи в PDF, благодаря who-e, oges2.zip ( 2,76 МБ )
    . Надеюсь будет полезно. Спасибо who-e.

    В теме нет куратора. Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать куратором (предварительно изучив шапку темы и все материалы для кураторов).
    До назначения куратора, по вопросам наполнения шапки, обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.

    Сообщение отредактировал vaalf — 23.11.17, 12:12

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

    Сообщение отредактировал Leopotam — 10.01.13, 22:58

    Теперь пример простейшей инициализации OpenGL ES 2.0 под Andro >
    В приложении, методе OnCreate:

    requestWindowFeature(Window.FEATURE_NO_TITLE); // Убираем заголовок
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN); // Устанавливаем полноэкранный режим

    // Далее устанавливаем версию OpenGL ES, равную 2
    glSurfaceView.setEGLContextClientVersion(2);

    renderer = new nRender();

    glSurfaceView.setRenderer(renderer); // устанавливаем нашу реализацию GLSurfaceView.Renderer для обработки событий

    glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); // режим смены кадров
    // RENDERMODE_CONTINUOUSLY — автоматическая смена кадров,
    // RENDERMODE_WHEN_DIRTY — по требованию ( glSurfaceView.requestRender(); )

    >catch(RuntimeException e)<> // выводим окошко «увы, выше устройство слишком. «

    далее создаем класс nRender

    package com.example.ogl1;
    import android.opengl.GLES20;
    import android.opengl.GLSurfaceView;
    import javax.microedition.khronos.egl.EGLConfig;
    import javax.microedition.khronos.opengles.GL10;
    import java.util.Random;

    public class nRender implements GLSurfaceView.Renderer
    <
    public nRender() <
    >

    public void onDrawFrame(GL10 glUnused) < // Отрисовка кадра

    Random rnd = new Random();

    // Задаем случайный цвет и сводим с ума эпилептиков =)
    // Цвет задается в формате RGBA, от 0.0f до 1.0f.
    GLES20.glClearColor(((float)rnd.nextInt(2)/2.0f), ((float)rnd.nextInt(2)/2.0f), ((float)rnd.nextInt(2)/2.0f), 1.0f);

    GLES20.glClear( GLES20.GL_COLOR_BUFFER_BIT ); // Очищаем буффер цвета
    >

    public void onSurfaceChanged(GL10 glUnused, int width, int height) < // изменение поверхности, например изменение размера

    GLES20.glViewport(0, 0, width, height);
    // Устанавливаем положение и размер вьюпорта
    // вьюпорт устанавливаеться относительно поверхности ( OpenGLSurface ), в данном случае на весь экран.
    // замечу, что GLES20.glClear очищает всю поверхность, все зависимости от установки Viewport.
    >

    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) < // вызываеться при создании поверхности

    Далее пробуем запустить, и получаем мечту эпилептика.

    Данный пример каноничен ( по документации ), но убог и уродлив по всем проявлениям.

    Сообщение отредактировал usnavii — 17.01.13, 11:55

    OpenGL по своему принципу является конечным автоматом.

    Представьте себе конвейер производства дед.мороза =)

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

    Это и есть машина конечных состояний. Проще объяснить не могу. Кто не понял — тут

    Продолжение как чуть высплюсь.
    ( следующая тема — что скрывается за GLSurfaceView, чем это плохо и что такое EGL. )

    Сообщение отредактировал usnavii — 10.01.13, 23:26

    Конечный автомат — это система, содержащая в себе несколько состояний, причем можно четко определить, в каком из них она находится. Это если по-умному и непонятному.
    Если ближе к отображению графики, например, выводу модели Деда Мороза на экран:
    *) существует единая лента-конвейер по выводу изображения на экран, на вход которого подаются модели Деда Мороза, а на выходе получаем 2d картинку, готовую для отображения на мониторе. Конвейер выполняет обработку данных последовательно, без пропусков. Модели представляют собой набор вершин и треугольные грани (см. P.S.1), связывающие 3 соседние вершины.
    *) У главного пульта конвейера есть всего, допустим, 5 тумблеров-переключателей (P.S.2), каждый из которых может находиться в состоянии вкл / выкл (см P.S.3):
    -) тумблер «отрисовывать сглаженно или с острыми кромками».
    -) тумблер «отрисовывать с текстурой или просто сплошным цветом». Под этим тумблером есть фото-рамка для вставки желаемой текстуры.
    -) тумблер «отрисовывать все грани или только лицевые» (например, для прозрачных объектов).
    -) тумблер «очищать только буфер глубины или буфер глубины и буфер цвета (изображения)».
    -) еще какой-то, с красной кнопкой.
    *) Стартовые значения переключателей на пульте устанавливаются в момент инициализации OpenGL и сохраняются в специальной области, называемой контекстом. Да, OpenGL может в одном приложении выводить изображение в 2 окна, каждый из которых будет иметь свой независимый контекст и свой независимый конвейер.
    *) Конвейер работает все время существования окна приложения, используя для отрисовки Дедов Морозов текущие настройки на пульте. Нет необходимости перед каждой отрисовкой повторно устанавливать выключатели в старое положение.
    *) Эльфы, сидящие внутри блока обработки входящей информации через конвейер, не сразу выдают результат на экран, а только после выполнения нужных операций по растеризации-отрисовке внутри себя, распараллеливая между собой. Чем совершеннее графический процессор, тем больше эльфов, способных работать параллельно для отрисовки точек, сидит внутри. При этом конвейер приостанавливается до обработки всей модели. Если данных будет очень много, то эльфы, сидящие внутри, не будут успевать перерабатывать такой объем и блокировка конвейера вызовет простой уже центрального процессора, ожидающего, когда конвейер освободится — отсюда мы видим падение fps-ов при большом потоке информации (перекрывающем филлрейт конвейера) и слабом графическом процессоре.

    Пример.
    Конвейер запущен, Деды Морозы поехали по ленте. И через 5 штук мы вспоминаем, что нам не нужны гламурно-сглаженные, но только рубленные топором, только хардкорные модели на выходе. Подходим к пульту и перещелкиваем первый тумблер (см. выше). Все, все последующие модели будут отрисовываться, словно резчик по дереву был пьян и забыл про шлифовку и прочие доработки. Нам ничего не нужно перещелкивать на пульте перед каждой последующей моделью.
    Прибежала Снегурочка, наблюдающая все это непотребство на экране и сказала, что неплохо бы раскрасить Деда Мороза, потому что гламурное розовое нечто с неаккуратными краями смотрится на экране неканонично, хотя ей нравится. Берем у нее фотографию-картинку настоящего Деда Мороза, подсовываем в рамку под тумблером текстурирования и перещелкиваем его. Все, все последующие Деды Морозы будут выглядеть с наложенной картинкой-текстурой и с несглаженными гранями. Нам ничего не нужно перещелкивать на пульте перед каждой последующей моделью.
    Снегурочка пришла еще через 10 моделей, уже немного нетрезвая, и заявила, что пусть лучше Дед Мороз будет гламурно ровненьким, но должен иметь сходство с фотографией. ок, перещелкиваем тумблер сглаживания и идем дальше праздновать НГ. На выходе получим текстурированного и сглаженного Деда Мороза для всех последующих моделей. Нам ничего не нужно перещелкивать на пульте перед каждой последующей моделью.

    P.S.1. На самом деле OpenGL поддерживает не только треугольные грани, но для унификации всего процесса лучше использовать именно их.
    P.S.2. Их не 5, а гораздо больше — в этом смысл конечного автомата OpenGL — много настроек, каждая из которых отвечает за что-то свое и за изменением которых нужно внимательно следить, чтобы не получить Злого Санту, например.
    P.S.3. Состояний может быть больше двух, если настройка подразумевает несколько вариантов значений.

    Сообщение отредактировал Leopotam — 11.01.13, 10:36

    Илон Маск рекомендует:  Тег em
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL