Главная страница
Навигация по странице:

  • Просчет сцены ( Рендеринг ).

  • GLScene руководство новичка , Jat-Studio, 2009 Компоненты

  • GLScene , GLScene PFX , GLScene utils

  • GLScene руководство новичка , Jat-Studio, 2009

  • GLScene руководство новичка , Jat-Studio, 2009 GLWindowsBitmapFont

  • GLScriptLibrary [Нет данных] GLSoundLibrary

  • GLSMWaveOut [Нет данных] GLODEManager

  • Руководство новичка by JatStudio 2009 glscene руководство новичка, JatStudio, 2009


    Скачать 0.63 Mb.
    НазваниеРуководство новичка by JatStudio 2009 glscene руководство новичка, JatStudio, 2009
    Дата26.02.2019
    Размер0.63 Mb.
    Формат файлаpdf
    Имя файлаGLSceneRUS.pdf
    ТипРуководство
    #68935
    страница2 из 5
    1   2   3   4   5
    .
    Теперь
    , когда мы знаем какими бывают числа с
    плавающей точкой
    , мы можем поговорить о
    том
    , для чего они используются
    В
    GLScene множество вычислений происходят с
    помощью векторов
    Вектор
    – универсальный тип
    , с
    помощью которого можно описать почти все в
    сцене от позиции объекта
    , его поворотов
    , скорости вплоть до его цвета
    Есть различные типы векторов
    : Vector3f, Vector4f, AffineVector.
    Но любой вектор в
    принципе
    – массив трех одиночных параметров
    [X, Y, Z].
    Некоторые векторы используют непонятный четвертый параметр
    W.
    Он используется для того
    , чтобы описывать повороты или значение альфа
    - канала
    (
    прозрачности
    ) цвета данного объекта
    Многие функции
    GLScene используют директиву overload, поэтому вы можете использовать большинство типов векторов как параметры в
    функциях
    На самом деле
    OpenGL оперирует не векторами
    , а
    матрицами
    Матрица здесь
    – это двумерный массив
    : 4x4 параметра
    Преобразования матриц позволяют производить такие полезные вещи как поворот векторов
    , их масштабирование и
    т д
    Вы можете и
    не знать о
    матричных преобразованиях совсем ничего
    , ведь
    GLScene успешно делает всю эту работу за вас
    Эти функции находятся в
    модуле
    VectorGeometry.
    Подробное описание функций векторной графики не входит в
    контекст этой книги
    Учебники по данной теме найти совсем несложно
    Просчет
    сцены
    (
    Рендеринг
    ).
    Каждый объект в
    3
    Д
    графике состоит из многоугольников
    (
    полигонов
    ).
    Даже гладкие объекты состоят из многоугольников только очень маленьких
    Полигон
    – треугольная поверхность
    , ограниченная тремя вершинами
    Вершина
    – это точка в
    пространстве
    У
    каждого полигона есть лицевая сторона
    (face) и
    оборотная
    (back), которая определена лицевой нормалью
    Нормаль
    – это вектор
    , направленный в
    сторону лицевой части конкретного полигона
    Определение лицевой стороны необходимо для корректного объединения полигонов в
    единый объект
    Сторона полигона должна присоединяться к
    определенной стороне другого полигона
    Это используется для сглаживания краев
    (smoothing edges) между двумя смежными полигонами
    Для полигона также должно быть определено
    , как текстура будет на нем растянута
    Координаты текстуры для каждой вершины определены двумя числами в
    диапазоне от
    0 до
    1.
    Их называют
    U и
    V координатами
    Именно они определяют точную позицию вершины на текстуре
    Когда полигон отправляется на отрисовку
    (
    рендеринг
    ) просчитывается весь возможный окружающий свет
    , угол между лицевой нормалью и
    направлением на камеру
    , и
    полигон текстурируется согласно просчитанному свету
    (
    создаются тени
    ).
    Различные оттенки полигона по кривой поверхности создают иллюзию пластичности
    Для отрисовки
    (
    рендеринга
    ) готового объекта
    , который составлен из полигонов
    , объект должен быть сначала преобразован в
    соответствии с
    параметрами его позиции
    , поворота и
    масштаба
    Каждый отрисованный
    (
    отрендеренный
    ) пиксель сохраняется в
    Z – буфере
    . Z – буфер
    – память распределена для всех пикселей экрана вместе с
    глубиной
    Z – дистанцией до камеры
    Каждый раз
    , когда отрисовывается
    (
    рендерится
    ) новый полигон
    , получающиеся новые пиксели заменяют старые
    , только если глубина
    Z новых пикселей меньше той
    , что сохранена в
    Z – буфере
    (
    глубина старых пикселей
    ).
    Если проще
    , то новый полигон отрисовывается
    , только если он ближе к
    камере
    , чем старый
    OpenGL.
    Это широкая тема
    , слишком сложная для этой книги
    Вы не обязательно должны хорошо знать о
    OpenGL, чтобы эффективно использовать
    GLScene, но
    , конечно же
    , лучше иметь некоторое понимание этого
    GLScene
    руководство
    новичка
    , Jat-Studio, 2009

    Компоненты
    Эта глава разделена на четыре части
    , описывающие четыре вкладки компонентов
    GLScene: GLScene, GLScene PFX, GLScene utils and GLScene shaders.
    GLScene
    GLScene
    Базовый компонент
    Вы можете открыть редактор сцены
    , дважды щелкнув на нем
    GLSceneViewer
    Компонент представляет собой прямоугольную панель
    , в
    которой отображается ваша сцена
    Ее размеры не ограничивают саму сцену
    Чем больше растянута эта панель
    , тем медленнее прорисовывается сцена
    Для отображения сцены в
    панели необходимо указать в
    свойствах камеру
    (TGLCamera), изображение с
    которой будет прорисовываться в
    вашем
    GLSceneViewer и
    собственно саму сцену
    (TGLScene).
    Вы можете установить здесь важное свойство
    – контекст рендеринга через свойство
    Buffer.
    Однако значения этого свойства по умолчанию в
    большинстве случаев вполне достаточно
    GLFullScreenViewer
    Фактически этот компонент равнозначен
    GLSceneViewer, но
    , в
    отличие от него
    , имеется переключатель в
    полноэкранный режим
    Разрешающая способность
    (resolution) должна быть читаемой для видеокарты и
    монитора
    Эти свойства должны иметь
    , к
    примеру
    , значения
    800x600 или
    1024x768.
    GLMemoryViewer
    Memory Viewer – это виртуальный холст
    (canvas).
    Вы можете рендерить на него объекты из памяти
    Но вы не увидите никакой картинки на экране
    Он используется например для того чтобы отрендерить на карту куба
    (TGLCube) отражения в
    реальном времени или дополнительные теневые методы
    GLMaterialLibrary
    Material Library – это компонент для хранения материалов
    Это библиотека материалов
    Вы можете получить доступ к
    материалам через их индекс или имя сохраненного материала
    В
    этом пункте я
    немного объясню
    , как материалы обрабатываются в
    GLScene.
    Каждый объект
    , на который может быть наложен материал
    , имеет одноименное свойство
    – material.
    Вы можете редактировать материал непосредственно в
    инспекторе объектов
    По двойному клику на значке многоточия напротив свойства material – открывается редактор материалов
    (Material Editor).
    Редактор материалов имеет три вкладки и
    окно с
    примером в
    виде куба с
    наложенным вами материалом
    Три вкладки
    – это
    :
    1.
    Front properties – редактирует качество материала лицевых граней объекта
    Диффузный цвет
    (Diffuse) является наиболее важным
    Он определяет цвет освещенных частей объекта
    Окружающий цвет
    (Ambient) определяет цвет затененных частей объекта
    Зеркальный цвет
    (Specular) «
    отвечает
    » за цвет отражений и
    бликов
    Цвет эмиссии
    (Emission) определяет цвет свечения
    GLScene
    руководство
    новичка
    , Jat-Studio, 2009
    объекта
    Но пока только запомните
    , что для изменения основного цвета изменять нужно именно диффузный цвет
    (Diffuse).
    Другие свойства материала как отражения или блики могут быть достигнуты более реалистично с
    помощью использования шейдеров
    2.
    Back properties – отличие от front properties в
    том
    , что эти свойства
    «
    отвечают
    » за материал невидимых граней объекта
    Эти грани объекта становятся видимыми
    , только если материал прозрачен или отключен отбор
    (culling) задних граней
    3.
    Texture – используется для наложения на объект текстуры
    Для включения видимости текстуры необходимо отключить свойство disabled.
    Это свойство по
    - умолчанию включено
    , что означает
    , что объект не использует никакой текстуры
    Объект в
    этом случае будет окрашен в
    соответствии с
    настройками двух предыдущих вкладок
    (Back и
    Front properties).
    Если вы хотите применить текстуру
    , то отключите блокирующий флажок disabled и
    загрузите изображение
    GLScene поддерживает форматы jpg, tga, bmp.
    При использовании двух первых форматов необходимо сначала в
    разделе кода uses добавить модули jpeg или tga соответственно
    Для реалистичного освещения вы должны установить для свойства
    Texture Mode текстуры значение tmModulate.
    Помните
    , что свет должен осветить объект
    , чтобы материал стал виден
    Другая важная вещь
    – размеры текстуры должны быть кратны двум
    : 2,4,8,16,32,64,128,256,512,1024 и
    т д
    Причем длина и
    ширина текстуры могут и
    не совпадать
    Вы
    , например
    , можете использовать текстуру размером
    32x512.
    Если же вы будете использовать текстуру нестандартного размера
    , то она будет отображена медленнее
    , так как
    GLScene придется привести ее размеры к
    стандарту
    Внизу редактора материалов есть выпадающий список для выбора режима смешивания
    blending mode.
    Здесь вы можете определить
    , как материал будет смешиваться или перекрываться другими материалами
    Непрозрачный режим смешивания
    (bmOpaque) непрозрачный объект
    Прозрачный режим
    (bmTransparent) позволить видеть сквозь объект
    Объект может быть однородно прозрачным
    , или прозрачность может быть задана текстурой
    Совокупное смешивание
    (bmAdditive) комбинирует цвет объекта с
    цветом объектов позади него
    Хотя для каждого объекта можно настроить свой материал
    , но настойчиво рекомендуется хранить все материалы в
    библиотеке материалов
    (GLMaterialLibrary).
    Особенно если объектов много и
    некоторые используют одну и
    ту же текстуру
    Например
    , вы используете
    100 кубиков и
    для каждого загружаете одну и
    ту же текстуру
    – в
    памяти разместятся
    100 одинаковых текстур
    Но вы можете загрузить эту текстуру один раз в
    MaterialLibrary и
    затем ссылаться на нее каждый раз
    , когда она необходима
    Делается это с
    помощью кода
    GLCube.Material.MaterialLibrary для обращения к
    библиотеке материалов или же
    GLCube.Material.LibMaterialName для обращения к
    имени материала
    , который вам нужен
    Осторожно
    !
    Объекты имеют свойство
    MaterialLibrary вы же долны использовать
    Material.MaterialLibrary.
    Не путайте их
    !
    Библиотека материалов имеет еще одну удобную функцию
    : AddTextureMaterial.
    В
    этой функции определяется имя нового материала и
    загружаемое в
    него изображение
    (
    текстура
    ).
    Новый материал добавляется к
    библиотеке так
    :
    Texture.Disabled := False; и
    Texture.Modulation := tmModulate;
    GLCadencer
    Большинство приложений
    , использующих
    GLScene, отрисовываются
    (
    рендерятся
    ) в
    режиме реального времени
    При этом время имеет большое значение
    Поэтому появляется необходимость в
    некотором менеджере времени
    И
    это не самый простой компонент
    Сначала
    , все что мы должны знать
    – это сколько времени будет рендериться сцена
    Камера может быть направлена на сложные геометрические объекты с
    большим количеством полигонов
    , и
    , при вращении камеры все они должны перерисовываться
    Причем ваша
    GLScene
    руководство
    новичка
    , Jat-Studio, 2009
    программа может выполняться как на старой и
    медленной системе
    , так и
    на новейшей системе с
    высокой производительностью
    Этот момент невозможно предугадать заранее
    Если вы хотите использовать свою сцену в
    течение долгого времени
    – используйте
    GLCadencer.
    Этот компонент позаботится о
    необходимой синхронизации обновления объектов в
    сцене от кадра к
    кадру
    Но сначала вы должны настроить свойства этого компонента
    Процесс перерисовки
    (
    рендеринга
    ) кадра приводит к
    возникновению события
    Progress компонента
    GLScene.
    Каждый объект
    GLScene имеет событие onProgress, где можно запрограммировать некоторые действия программы
    , выполняющиеся каждый раз при перерисовке
    (
    рендеринге
    ) сцены
    Двойным кликом на объекте в
    инспекторе объектов к
    основному коду добавляется заготовка реакции на событие onProgress.
    Процедура
    Progress передает через параметры одну важную переменную
    – deltaTime.
    Это период времени в
    секундах
    , который прошел после рендеринга последнего кадра
    Если этот параметр слишком велик
    , то значит
    , что сцена медленно рендерится и
    «
    тормозит
    ».
    Идеальное количество отрендеренных кадров
    – 30 в
    секунду
    При этом deltaTime равен
    0,033333.
    Если вам необходимо провести какие
    - либо вычисления связанные со временем
    – включайте переменную deltaTime в
    ваши уравнения
    Например
    , если вы хотите переместить куб вдоль оси
    X со скоростью
    10 пунктов в
    секунду
    , то код будет выглядеть примерно так
    : GLCube.Position.X := GLCube.Position.X + 10 * deltaTime.
    Cadencer имеет свойство enabled.
    С
    его помощью можно просто включить или выключить компонент в
    нужный момент
    Когда он выключен сцена будет заморожена
    Cadencer может работать в
    нескольких различных режимах
    (GLCadencer.Mode). cmASAP – значение по умолчанию
    , сцена будет обрабатываться всякий раз с
    максимальным приоритетом
    , по сравнению с
    другими процессами
    . cmIdle – сцена будет обрабатываться только если завершены другие процессы и
    с cmManual вы сможете управлять запуском обработки сцены вручную
    Другая интересная особенность
    – Cadencer.minDeltaTime.
    С
    помощью этого свойства вы можете установить время
    , только по истечении которого
    , начнется обработка сцены
    , даже если сцена уже отрендерена
    Этим вы сможете несколько разгрузить систему
    . Cadencer.maxDeltaTime – напротив не позволит cadencer выполниться быстрее установленного времени
    GLGuiLayout
    GUI (Grafical User Inteface) замещает графический интерфейс пользователя
    Цель компонента
    GUI заключается в
    создании двумерных управляющих окон
    , известных в
    Delphi как формы
    , панели
    , надписи
    , «
    чекбоксы
    », «
    радио
    » кнопки и
    др
    В
    GUI Manager вы определяете размещение
    GUI, которое сохраняется в
    файле с
    расширением
    «.layout» и
    создается с
    помощью
    GUI Editor.
    Это размещение определяет области на рисунке
    , которые будут использованы для вывода графических данных
    Эта тема будет рассмотрена более подробно позже в
    главе
    «8.9 GUI Objects».
    GLBitmapFont
    С
    помощью этого компонента вы можете отобразить двумерный текст
    . TGLBitmapFont используется вместе с
    TGLHUDText.
    Для использования вы должны сначала загрузить точечный рисунок
    – битмап
    , который содержит символы шрифта
    , расположенные в
    строках и
    столбцах
    Символы должны быть на черном фоне
    , для корректной прозрачности
    Свойство
    GLBitmapFont.Ranges определяет
    , какие области битмапа соответствуют конкретным символам шрифта
    Каждый range имеет длину и
    ширину в
    пикселях вместе с
    начальным и
    конечным значениями символа по алфавиту стандарта
    ASCII. GLBitmapFont создаст массив текстур
    , для отображения каждого символа вашего шрифта
    . GLHUDText может считывать эти текстуры и
    отображать с
    их помощью любые слова
    Но у
    GLBitmapFont есть недостаток
    Все символы алфавита должны иметь одинаковую ширину
    Например
    , символ
    ‘I’ должен иметь ту же ширину
    , что и
    символ
    ‘M’.
    Преимущество же его состоит в
    том
    , что вы можете создать свой шрифт с
    символами разного цвета и
    прозрачности
    GLScene
    руководство
    новичка
    , Jat-Studio, 2009

    GLWindowsBitmapFont
    Если вы не хотите трудиться над созданием битмапа
    , то можете использовать уже существующий шрифт системы
    Windows.
    Вы только устанавливаете свойство
    Font, и
    компонент создаст все текстуры для
    GLHUDText сам
    С
    помощью этого компонента любые шрифты
    TrueType будут отображены правильно
    Но используемый шрифт должен быть установлен в
    системе
    , на которой планируется использование программы
    GLStoredBitmapFont
    Этот компонент является третьим и
    , по
    - моему
    , самым полезным компонентом поддержки шрифтов в
    GLScene.
    Вы можете поместить ваш шрифт совместно с
    приложением
    Он сохраняется в
    файле с
    расширением
    «.glsf».
    Этот шрифт легко создается не только из любых шрифтов
    Windows, но и
    также можно создать любой собственный шрифт
    Причем не нужно волноваться о
    том
    , установлен он в
    другой системе или нет
    При наличии сохраненного файла
    «.glsf» ваше приложение выполнится без проблем
    И
    GLWindowsBitmapFont и
    GLStoredBitmapFont не может иметь символы с
    различными цветами
    Вы можете изменить только цвет всех символов сразу
    GLScriptLibrary
    [
    Нет данных
    ]
    GLSoundLibrary
    GLScene не является только графической библиотекой
    , вы также можете добавить трехмерный звук в
    свое приложение
    . GLSoundLibrary похожа на
    GLMaterialLibrary, только предназначена для хранения звуковых дорожек
    Вы можете загрузить свой файл в
    библиотеку с
    помощью свойства
    GLSoundLibrary.Samples этого компонента
    Поддерживаются только mp3 и
    wav форматы
    Остерегайтесь долго проигрывать mp3 файлы
    Это может вызывать ошибки звуковой библиотеки
    . GLSoundLibrary должна использоваться вместе с
    компонентами
    GLSMWaveOut, GLSMBass или
    GLSMFMod.
    Для запуска звука добавляют звуковое поведение
    (behavior) объекту сцены
    Звук для проигрывания находится по индексу или имени
    , описанному в
    GLSoundLibrary.
    Найденный звук прикрепляется к
    объекту в
    трехмерном пространстве и
    испускается из этого объекта
    GLSMWaveOut
    [
    Нет данных
    ]
    GLODEManager
    ODE (Open Dynamic Engine)
    Динамический движок с
    открытым кодом
    Эта библиотека моделирует законы физики в
    вашем проекте
    Официальная страница в
    интернете

    http://www.ode.org/
    Там вы сможете найти документацию и
    файлы помощи на английском языке
    Библиотека
    ODE расположена в
    единственном файле
    *.dll*.
    Этот файл
    (ode.dll) при использовании вами должен быть размещен в
    той же папке
    , что и
    ваше приложение или же может быть помещен в
    папку
    «Windows/system32».
    Любой объект сцены просто объявляется как объект с
    поведением
    ODE behavior, чтобы натурально реагировать на гравитацию
    , столкновения или отталкивания от других объектов
    Вы можете создать автомобили
    , эффект тряпичной куклы
    , простые механизмы
    Чтобы сделать объект
    ODE в
    сцене просто добавьте к
    нему
    ODE behavior.
    Есть два вида поведения
    ODE:
    1.
    Статическое
    – для объектов
    , которые будут неподвижны в
    сцене
    Они не должны двигаться во время работы приложения
    Например
    , стены или пол
    2.
    Динамическое
    – объекты имеют вес и
    могут перемещаться по сцене
    , взаимодействуя с
    другими объектами или самим собой
    (
    суставы
    - joints).
    Например
    , это может быть мяч
    , катящийся по сцене
    1   2   3   4   5


    написать администратору сайта