- •Учебник
- •Оглавление
- •Введение
- •Глава 1
- •I. Установка
- •II. Удаление
- •Глава 2. Первый проект
- •Глава 3. Создание сцены в режиме design time
- •Создание объектов:
- •Глава 4. Примитивные объекты. Вкладка Basic geometry.
- •Глава 5. Ориентация, координаты.
- •Глава 6. Движение.
- •Глава 7. Как узнать, сколько сейчас fps?
- •Глава 8. Полноэкранный режим.
- •Глава 9. Работа с материалами.
- •I. Прямое обращение к .Material
- •Глава 10. Использование 3d моделей.
- •I. Форматы моделей
- •Глава 11. Прокси объекты.
- •Глава 12. Создание земной поверхности с glTerrainRenderer.
- •Глава 13. Создание земной поверхности с glFreeForm.
- •Глава 14. Итоги работы с glTerainrender и glFreeForm.
- •Глава 15. Создание земной поверхности с glHeightField.
- •Глава 15. Создание неба.
- •Глава 16. GlAtmosphere.
- •Глава 17. Спецэффекты.
- •I. Огонь
- •II. Молния
- •III. Дождь
- •IV. Снег
- •VI. Блики от источников света
- •Глава 18. Растительность.
- •I. Деревья и кустарники
- •II. Трава
- •Глава 19. Работа со шрифтами и вывод надписей.
- •I. Вывод текста через компонент glWindowsBitmapFont
- •II. Проблема с glWindowsBitmapFont в Windows Vista
- •Глава 20. Выделение объекта мышкой.
- •Глава 21. Создание сцены в режиме runtime.
- •Глава 22. Тени.
- •Глава 23. Туман.
- •Глава 24. Vbo или расширение arb_vertex_buffer_object в OpenGl.
- •Глава 25. Fbo или расширение ext_framebuffer_object в OpenGl.
- •Глава 26. Рисование на канве.
- •Глава 27. Использование чистого OpenGl.
- •Глава 28. Звуки.
- •I. Проигрывание звуков с помощью bass
- •II. Проигрывание звуков с помощью fmod
- •III. Проигрывание звуков с помощью OpenAl
- •Глава 29. Игровое меню.
- •Глава 30. Примитивная физика dce.
- •Глава 31. Физика ode.
- •II. Основы библиотеки ode(: tglodeManager и tglodeJointList) на примере создания подобия боулинга.
- •Глава 32. Физика Newton.
- •Глава 33. Ручная проверка коллизий.
- •V. Ручная проверка коллизии
- •Глава 34. Шейдеры. Терменология.
- •Глава 35. Шейдеры. История и компоненты.
- •Глава 36. Шейдеры glsl. Введение.
- •Глава 37. Шейдеры glsl. Использование без компонентов. Самый примитивный шейдер.
- •Глава 38. Шейдеры glsl. Немного о спецификации. Типы данных и переменные
- •Стандартные функции
- •Поддерживаемые компоненты векторов
- •Глава 40. Шейдеры glsl. Текстурирование.
- •Глава 41. Шейдеры glsl. Использование без компонентов. Мультитекстурирование. Смешение трёх цветов по базовой карте.
- •Глава 42. Шейдеры glsl. Использование через компонент glslShader. Часть первая – Первые шаги.
- •Глава 43. Шейдеры glsl. Использование через компонент glslShader. Часть вторая – знакомимся со светом. Передача параметров в шейдер.
- •Глава 44. Шейдеры glsl. Использование через компонент glslShader. Часть третья – текстуры.
- •Глава 45. RenderMonkey.
- •Глава 46. Оптимизация программы.
- •Глава 47. Практика. Создание мира
- •Приложение
- •I. Типы векторов и матриц
- •II. Работа с векторами
- •III. Работа с матрицами
- •IV. Методы объектов glScene
- •Предметный указатель по компонентам glScene
Глава 27. Использование чистого OpenGl.
GLScene является надстройкой над интерфейсом OpenGL, но это не означает, что он может его (интерфейс) полностью заменить. Поэтому существует возможность вставлять фрагменты на чистом OpenGL. Для этой цели служит GLDirectOpenGL.
Сделаем небольшое приложение с использованием чистого OpenGL и GLScene.
Поместим на форму:
GLScene1, создадим в нём камеру, присвоим свойство GLCamera1.Position.Z = 4,
GLSceneViewer1, свойству Camera присвоим нашу камеру.
Короче, ничего нового - всё как обычно
А теперь создаём в GLScene1 объект .
Строки чистого OpenGL нужно вставлять в событие OnRender.
Попробуем вывести на экран плоскость, которую запрограммируем на OpenGL. Чтобы компилятор понимал команды чистого OpenGL, подключите модуль OpenGL1x.
procedure TForm1.GLDirectOpenGL1Render(Sender: TObject;
var rci: TRenderContextInfo);
begin
glLoadIdentity; // заменяем текущую матрицу на единичную.
glTranslatef(0.0, 0.0, -8.0);
glBegin(GL_POLYGON);//Начало операторный скобки. Она определяет, что вершины будут объединены
glVertex3f(1.0, 1.0, 1.0); //Рисуем вершину
glVertex3f(-1.0, 1.0, 1.0); //Рисуем вершину
glVertex3f(-1.0, -1.0, 1.0); //Рисуем вершину
glVertex3f(1.0, -1.0, 1.0); //Рисуем вершину
glEnd; //Конец операторной скобки
end;
Всё! Запускаем и смотрим на эту плоскость.
Когда вы создадите событие OnRender и попробуете туда что-либо написать, компилятор
возможно выдаст вам ошибку. Это несложно исправить: подключите к вашему проекту модуль GLRenderContextInfo и всё будет работать.
Глава 28. Звуки.
Звуковые файлы будут проигрываться, если активен, хотя бы один из звуковых менеджеров.
I. Проигрывание звуков с помощью bass
Перетащите на форму GLSMBASS и GLSoundLibrary (здесь и дальше будет подразумеваться, что основные компоненты, такие как GLScene, GLCadencer, GLSceneViewer уже находятся на форме). Для работы потребуется файл bass.dll скопируйте его в папку с вашим проектом.
У GLSMBASS установите следующие свойства:
Cadenser:= GLCadencer1; Active:=True;
Добавить звуковой файл в GLSoundLibrary можно через инспектор объектов или вот так:
GLSoundLibrary1.Samples.AddFile('имя файла.wav');
Далее нам потребуется два объекта: один издает звук, а другой слушает. Пусть слушателем будет сфера:
GLSMBASS1.Listener:= GLSphere1;
А звучать будет куб:
with GetOrCreateSoundEmitter (GLCube1) do begin Source.SoundLibrary:=GLSoundLibrary1; Source.SoundName:=''имя файла.wav''; Playing:= True;
end;
II. Проигрывание звуков с помощью fmod
Работает почти также как и BASS. Для работы потребуется файл fmod.dll, на форму нужно поместить не GLSMBASS, а GLSMFMOD.
III. Проигрывание звуков с помощью OpenAl
OpenAL (Open Audio Library) — свободно распространяемый аппаратно-программный интерфейс (API) для работы с аудиоданными. Ключевой особенностью является работа со звуком в 3D пространстве и использование эффектов окружающей среды (EAX). Поддерживается компанией Creative.
Для проигрывания звуков с помощью OpenAL есть специальный компонент GLSMOpenAL.
Хорошую демку можно посмотреть в стандартной папке Demos по адресу …\Demos\sound\3Dsound