Скачиваний:
115
Добавлен:
23.02.2015
Размер:
702.98 Кб
Скачать
      1. Преобразования

Преобразования включают в себя трансформации вершин от координат, указанных в glVertex*(),к оконным координатам, отсечение, освещение и т.д.

Освещение

  • Избегайте использования локальных источников света, т.е. координаты источника должны быть в форме (x,y,z,0) [П]

  • Избегайте использования точечных источников света. [все]

  • Избегайте использования двухстороннего освещения (two-sided lighting). [все]

  • Избегайте использования отрицательные коэффициентов в параметрах материала и цвета. [П]

  • Избегайте использования локальной модели освещения .[все]

  • Избегайте частой смены параметра материала  GL_SHININESS [П]

  • Некоторые реализации OpenGL оптимизированы для случая одного источника света [А, П]

  • Рассмотрите возможность заранее просчитать освещение. Можно получить эффект освещения, задавая цвета вершин вместо нормалей. [все]

Отключайте нормализацию векторов нормалей, когда это не необходимо.

Команда glEnable/Disable(GL_NORMALIZE)управляет нормализацией векторов нормалей перед использованием. Если вы не используете командуglScale, то нормализацию можно отключить без посторонних эффектов. По умолчанию эта опция выключена. [все]

Используйте связанные примитивы.

Связанные примитивы, такие как GL_LINES,GL_LINE_LOOP,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN, иGL_QUAD_STRIPуменьшают нагрузку на конвейер OpenGL, а также уменьшают количество данных, передаваемых графической подсистеме.

      1. Растеризация

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

Отключайте интерполяцию цветов, когда в этом нет необходимости

Интерполяция цветов включена по умолчанию. Плоское затенение не требует интерполяции четырех компонент цвета и, как правило, быстрее на программных реализациях OpenGL. Аппаратные реализации обычно выполняют оба вида затенения с одинаковой скоростью. Для отключения используйте команду glShadeModel(GL_FLAT)[П]

Отключайте тест на глубину, когда в этом нет необходимости.

Фоновые объекты, например, могут быть нарисованы без теста на глубину, если они визуализируется первыми [все]

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

Замкнутые объекты могут быть нарисованы с установленным режимом отсечения обратных граней glEnable(GL_CULL_FACE)Иногда это позволяет отбросить до половины многоугольников, не растеризуя их.[все]

Избегайте лишних операций с пикселями

Маскирование, альфа-смешивание и другие попиксельные операции могут занимать существенное время на этапе растеризации. Отключайте все операции, которые вы не используете. [все]

Уменьшайте размер окна или разрешение экрана

Простой способ уменьшить время растеризации – уменьшить число пикселей, которые будут нарисованы. Если меньшие размеры окна или меньшее разрешение экрана приемлемы, то это хороший путь для увеличения скорости растеризации. [все]

      1. Текстурирование

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

Используйте эффективные форматы хранения изображений

Формат GL_UNSIGNED_BYTE обычно наиболее всего подходит для передачи текстуры в OpenGL. [все]

Объединяйте текстуры в текстурные объекты или дисплейные списки.

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

Не используйте текстуры большого размера

Небольшие текстуры быстрее обрабатываются  и занимают меньше памяти, что позволят хранить сразу несколько текстур в памяти графической подсистемы [all]

Комбинируйте небольшие текстуры в одну

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

Анимированные текстуры

Если вы хотите использовать анимированные текстуры, не используйте команду glTexImage2Dчтобы обновлять образ текстуры. Вместо этого используйтеglTexSubImage2DилиglTexCopyTexSubImage2D.

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