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

  • Компиляторы C/C++

  • СЕКРЕТ СЕКРЕТ СЕКРЕТ СЕКРЕТ СЕКРЕТ СЕКРЕТ ГЛАВА 1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР41

  • Использование компилятора

  • НА ЗАМЕТКУ ГЛАВА 1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР45

  • НА ЗАМЕТКУ ГЛАВА 1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР47

  • НА ЗАМЕТКУ НА ЗАМЕТКУ НА ЗАМЕТКУ ГЛАВА 1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР49

  • Введениев программированиетрехмерных игрВ этой части


    Скачать 0.7 Mb.
    НазваниеВведениев программированиетрехмерных игрВ этой части
    Дата04.02.2018
    Размер0.7 Mb.
    Формат файлаpdf
    Имя файлаpart.pdf
    ТипРеферат
    #35779
    страница2 из 4
    1   2   3   4
    СЕКРЕТ
    СЕКРЕТ
    ГЛАВА
    1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР
    39
    В действительности вы можете доводить размер всех своих структур до величины,
    кратной 32 байтам, поскольку это оптимальный размер для стандартного кэша процессоров класса Pentium. Довести размер до этого значения можно путем добавления дополнительных искусственных членов структур либо посредством соответствующих директив компилятора. Конечно же, такой рост размера структур приведет к перерасходу памяти, но он может оказаться оправданным увеличением скорости работы в C++ представляет собой аналогу которого все члены по умолчанию открыты (Тщательно комментируйте ваш код. Программисты, работающие над играми, пользуются дурной славой в связи стем, что не комментируют свой код. Не повторяйте их ошибку. Ясный, хорошо комментированный код стоит лишней работы с клавиатурой.
    Программируйте в стиле RISC. Другими словами, делайте ваш код как можно более простым. В частности, в силу особенностей архитектуры процессоры класса Pentium предпочитают простые инструкции сложным, да и компилятору работать сними и оптимизировать их легче. Например, вместо кода if ( (x += (2*buffer[index++])) > 10 )
    {
    //
    } // if используйте код попроще x += 2*buffer[index];
    index++;
    if (x > 10)
    {
    //
    } // На то есть две причины. Во первых, такой стиль позволяет при отладке вставлять дополнительные точки останова между разными частями кода. Во вторых, такой подход облегчает работу компилятора по оптимизации этого кода.
    Вместо умножения целых чисел на степень двойки, используйте побитовый сдвиг.
    Поскольку данные в компьютере хранятся в двоичном виде, сдвиг влево или вправо эквивалентен, соответственно, умножению или делению, например y_pos = 10;
    //
    y_pos 64
    y_pos = (y_pos << 6); // 2^6 = 64
    //
    y_pos 8
    y_pos = (y_pos >> 3); // (1/3)^3 = Вы еще встретитесь с подобными советами в главе, посвященной оптимизации.
    Используйте эффективные алгоритмы. Никакой ассемблерный код не сделает алгоритм более быстрым. Лучше использовать более эффективные алгоритмы,
    чем пытаться оптимизировать никуда негодные.
    C++
    СЕКРЕТ
    СЕКРЕТ
    СЕКРЕТ
    СЕКРЕТ
    ЧАСТЬ
    I. ВВЕДЕНИЕ В
    ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР
    Не оптимизируйте ваш код в процессе программирования. Обычно это просто пустая трата времени. Перед тем как приступать к оптимизации, завершите написание если не всей игры, то по крайней мере, основной ее части. Тем самым вы сохраните силы и сэкономите время. Только когда игра готова, наступает время для ее профилирования и поиска проблемных участков кода, которые следует оптимизировать.
    Не используйте слишком сложные структуры данных для простых объектов. Не стоит использовать связанные списки для представления массива, количество элементов которого точно известно заранее, только в силу того, что такие списки — это очень круто. Программирование видеоигр на 90% состоит из работы сданными. Храните их в как можно более простом виде стем, чтобы обеспечить как можно более быстрый и простой доступ к ним. Убедитесь, что используемые вами структуры данных наиболее подходят для решения ваших задач.
    Разумно используйте C++. Не пытайтесь применять множественное наследование только потому, что вызнаете, как это делается. Используйте только те возможности, которые реально необходимы и результаты применения которых вы хорошо себе представляете.
    Если вы видите, что зашли в тупик, остановитесь и без сожалений вернитесь назад. Лучше потерять 500 строк кода, чем получить совершенно неработоспособный проект.
    Регулярно делайте резервные копии вашей работы. При работе с игровой программой достаточно легко восстановить какую нибудь простую сортировку, но восстановить систему искусственного интеллекта — дело совсем другое.
    Перед тем как приступить к созданию игры, четко организуйте свою работу. Используйте понятные и имеющие смысл имена файлов и каталогов, выберите и придерживайтесь последовательной системы именования переменных, постарайтесь разделить графические и звуковые данные по разным каталогам Использование инструментов Раньше для написания видеоигр обычно не требовалось ничего, кроме текстового редактора и, возможно, кустарных графических и звуковых программ. Сегодня ситуация намного усложнилась. Для написания трехмерной игры необходим, как минимум, компилятор, программа создания двумерных изображений, программа обработки звука,
    а также какой нибудь минимальный разработчик трехмерных объектов (если только вы не собираетесь вводить все 3D модели как ASCII данные. Кроме того, понадобится музыкальный секвенсор, если вы собираетесь использовать какие либо MIDI данные Давайте рассмотрим некоторые наиболее популярные программы и их возможности.
    Компиляторы C/C++. Для работы под Windows 9x/Me/XP/2000/NT нет лучшего компилятора, чем MS VC++ (рис. 1.3). Он делает все, что может вам потребоваться, и даже больше того. Генерируемые им
    .EXE файлы обладают максимально быстрым кодом. Компилятор фирмы Borland также хорошо работает, однако имеет меньше возможностей. В любом случае вам ненужна полная версия — достаточно студенческой версии, способной генерировать Win32
    .EXE файлы.
    Программы для двумерной растровой графики. Сюда относятся программы для рисования, черчения и обработки изображений. Программы для рисования позволяют рисовать изображения попиксельно с помощью примитивов и редактировать их. Насколько мне известно, Paint Shop Pro фирмы JASC
    СЕКРЕТ
    СЕКРЕТ
    СЕКРЕТ
    СЕКРЕТ
    СЕКРЕТ
    СЕКРЕТ
    ГЛАВА
    1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР
    41
    (рис. 1.4) является лидером по показателю соотношения цены и производительности. Но все же несомненным фаворитом большинства компьютерных художников является Adobe Photoshop — он обладает гораздо большей мощностью, чем та, которая когда либо может вам понадобиться.
    Рис. 1.3. Среда Microsoft Программы для двумерной векторной графики. Эти программы позволяют создавать изображения, которые состоят в основном из кривых, прямых и двумерных геометрических примитивов. Этот тип программ не столь полезен, однако вам потребуется одна из них. Adobe Illustrator — это то, что вам нужно.
    Программы для завершающей обработки изображений. Редакторы изображений это финальный класс программ для двумерной графики. Эти программы предназначены больше для завершающей обработки, чем для создания изображений. В этой области фаворитом многих пользователей является Adobe
    Photoshop, однако мне больше по душе Corel Photo Paint. Решать вам.
    Программы для обработки звука. 90% всех звуковых эффектов, используемых в играх, — это оцифрованный звук. Для работы со звуковыми данными этого типа вам понадобится программа обработки звука. Одна из лучших программ этого рода — Sound Forge (рис. 1.5). Несомненно, это одна из самых сложных программ обработки звука. Я все еще открываю в ней новые и новые замечательные возможности Еще одна довольно мощная программа — Cool Edit нос ней я работал меньше.
    Программы разработки трехмерных объектов. Здесь все зависит от ваших финансовых возможностей. Такие программы могут стоить десятки тысяч долларов. Тем не менее, опыт показывает, что последние версии не очень дорогих редакторов трехмерных объектов могут в буквальном смысле создавать кино. Для разработки простых и среднего уровня сложности трехмерных моделей я использую, главным образом (рис. 1.6). Это самый лучший 3D редактор по такой цене он стоит всего несколько сот долларов. Кроме того, я считаю, что у него самый удобный интерфейс
    ЧАСТЬ
    I. ВВЕДЕНИЕ В
    ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР
    Рис. 1.4. Paint Shop Pro фирмы JASC Рис. 1.5. Sound Forge в работе
    Если же вам недостаточно этих возможностей и требуется полный фотореа лизм — используйте 3D Studio Max (рис. 1.7). Однако он стоит долл, так что тут есть о чем задуматься. В тоже время, поскольку мы собираемся использовать эти программы в большинстве случаев лишь для создания трехмерных сеток, а не для визуализации, все эти “рюшечки и финтифлюшечки” нам ненужны, и наилучшим выбором будет trueSpace или, возможно, какая то бесплатная или условно бесплатная программа
    ГЛАВА
    1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР
    43
    Рис. 1.6. Редактор Caligari Рис. 1.7. Тяжеловес 3D Studio В Internet можно найти множество бесплатных или условно бесплатных 3D редакторов,
    которые иногда имеют такие же возможности, как и коммерческий продукт. Поэтому,
    если денежные средства ограничены — ищите, и, возможно, вы найдете то, что нужно.
    Редакторы трехмерных уровней В этой книге мы собираемся создать программный трехмерный игровой процессор.
    Однако мы не намерены создавать сложные инструменты для моделирования трехмер
    НА ЗАМЕТКУ
    ЧАСТЬ
    I. ВВЕДЕНИЕ В
    ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР
    ного интерьера. Трехмерный мир можно создать с помощью редактора 3D объектов, однако есть программы, гораздо лучше приспособленные для этого, такие как рис. 1.8). Следовательно, самый правильный подход при написании трехмерной игры и игрового процессора — это использовать файловый формат и структуру данных, совместимые с наиболее доступным из редакторов, таким как WorldCraft (или подобным).
    В этом случае для создания миров вы сможете воспользоваться инструментами сторонних разработчиков. Конечно, файловый формат большинства таких редакторов основан преимущественно на разработках фирмы id Software и игрового процессора Quake. Тем не менее, будет ли это файловый формат Quake или какой либо иной, в любом случае очевидно, что этот формат проверен и работает прекрасно.
    Рис. 1.8. Редактор уровней Музыкальные программы и MIDI секвенсоры
    . В современных играх есть два типа музыки цифровая (как на компакт дисках) и MIDI музыка (Musical Instruments
    Digital Interface — цифровой интерфейс музыкальных инструментов, представляющая собой синтетический объект, основанный на нотных данных. Для управления данными необходим секвенсор. Один из лучших
    — рис. 1.9). Одним из достоинств CakeWalk является приемлемая цена. Поэтому, если вы намерены работать с MIDI музыкой, я весьма рекомендую познакомиться с этой программой. Мы поговорим о MIDI данных, когда речь пойдет о А сейчас кое тона десерт… Некоторые производители программ, упоминавшихся выше, разрешили мне записать на компакт диск свои условно бесплатные или ознакомительные версии. Ознакомьтесь с ними!
    Использование компилятора
    Один из наиболее напряженных моментов в изучении программирования трехмерных игр — это использование компилятора. В большинстве случаев вы настолько переполнены желанием начать работу, что входите в интегрированную среду разработки и запускаете компилятор. И получаете миллионы ошибок компилирования и связывания Чтобы решить проблему, рассмотрим несколько основных принципов компилирования.
    НА ЗАМЕТКУ
    ГЛАВА
    1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР
    45
    Рис. 1.9. Программа Излагаемые здесь сведения относятся к Visual C++, однако на принципиальном уровне они касаются всех компиляторов. Прочтите руководство пользователя компилятора полностью
    — пожалуйста,
    я умоляю вас. Вы должны установить в системе DirectX 9.0 SDK. Чтобы сделать это, зайдите в каталог DirectX SDK на компакт диске, прочтите
    README.TXT и выполните все,
    что там написано, те. щелкните на файле запуска установки DirectX SDK. И помните, в этой книге мы используем DirectX 9.0 (однако пользуемся интерфейсами версий 7 итак что вам нужно использовать DirectX SDK с компакт диска. Хотя если вы действительно этого хотите — можете компилировать все с помощью 8.0.
    3. Мы собираемся создавать Win32
    .EXE модули приложений, а не DLL, не компоненты, не консольные приложения и нечто либо еще (если только я не скажу вам об этом отдельно. Поэтому первое, что нужно сделать, это создать новый проект и установить в качестве выходного файла Win32
    .EXE. На рис. 1.10 показано, как сделать этот шаг в компиляторе Visual C++ Есть два типа
    .EXE модулей, которые можно компилировать Release и Debug. Окончательный) обладает более быстрыми оптимизированным кодом, тогда как отладочный) медленнее и содержит контрольные точки отладчика. Советую вовремя разработки программы использовать
    Debug версию, а затем, когда программа заработает, переключить компилятор в режим Для добавления исходных файлов в проект используйте команду Add Files из главного меню или из самого узла проекта. Этот шаг для Visual C++ 6.0 показан на рис. НА ЗАМЕТКУ

    НА ЗАМЕТКУ
    ЧАСТЬ
    I. ВВЕДЕНИЕ В
    ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР
    Рис. 1.10. Создание Win32 .EXE модуля с помощью Visual
    C++ Рис. 1.11. Добавление файлов в проект в среде Visual C++ 6.0
    5. Когда вы компилируете что то, для чего нужен DirectX, необходимо указать в пути поиска файлов компилятором путь к месту нахождения заголовочных файлов Di rectX, а также
    .LIB файлов DirectX. Это можно сделать с помощью пункта меню, Directories в главном меню интегрированной среды разработки. Затем сделайте соответствующие добавления в переменные Include Files и Library Этот шаг показан на рис. 1.12 (конечно, следует убедиться, что в них указан путь к конкретному месту инсталляции DirectX, а также новейших версий библиотеки заголовочных файлов).
    Проверьте, чтобы узлы поиска DirectX были первыми в списке(ах). Вы жене хотите,
    чтобы компилятор нашел старые версии файлов DirectX, которые могли быть установлены вместе с компилятором?
    НА ЗАМЕТКУ
    ГЛАВА
    1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР
    47
    Рис.
    1.12. Настройка пути поиска
    файлов в Visual C++ Кроме того, вам обязательно нужно включить в проект библиотеки импорта интерфейса DirectX, перечисленные ниже и показанные на рис. А также другие, которые я упоминаю в конкретных примерах.
    Библиотеки импорта DirectX:
    DDraw.Lib
    DSound.Lib
    DInput.Lib
    Вход
    Путь Заголовочные файлы DirectX:
    DDraw.H
    DSound.H
    DInput.H
    Вход
    Путь DXSDK\Include
    Компоновщик
    VC++
    Компилятор
    VC++
    DirectX времени выполнения
    Game.cpp
    .obj
    Вывод
    Game.EXE
    Примечание: пользователи компилятора Borland могут найти Borland версии библиотек импорта в каталоге Рис. 1.13. Ресурсы, необходимые для создания приложения Эти
    .LIB файлы DirectX расположены в каталоге LIB\, находящемся там, куда был установлен. Вам необходимо добавить эти
    .LIB файлы в свой проект. Однако нельзя просто добавлять каталог
    LIB\ в путь поиска
    — тем самым компилятору компоновщику указывается место поиска, ноне говорится о том, что нужно использовать именно DirectX
    .LIB файлы. Я получил тысячи (действительно тысячи) электронных писем от людей, которые не сделали этого и получили проблемы. Повторю еще раз:
    вам необходимо вручную включить
    .LIB файлы DirectX в список связывания компилятора вместе с другими библиотеками или в проект вместе с вашими
    .CPP файлами. Это можно сделать в подменю Project, Settings диалогового окна Link, General в списке Ob- ject/Library-Modules (рис. 1.14).
    ЧАСТЬ
    I. ВВЕДЕНИЕ В
    ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР
    Рис. 1.14. Добавление .LIB файлов DirectX в список
    связывания Visual C++ Если вы используете Visual C++, можете добавить в проект библиотеку расширений Windows (
    WINMM.LIB). Этот файл находится в каталоге LIB\ вместе установки компилятора Visual C++. Если его там нет, воспользуйтесь командой Find меню. Найдя файл, добавьте его в список связывания.
    7.
    Теперь вы готовы к компиляции программ.
    Для пользователей Borland весть каталог
    BORLAND\. Убедитесь, что добавлены именно эти
    .LIB файлы, а не файлы DirectX, установленные вместе с Visual Если у вас есть еще вопросы по этой теме, не волнуйтесь — на протяжении книги при компилировании программ я буду возвращаться к этим операциям много раз. Однако если я получу письмо с вопросами по компилированию и меня будут спрашивать о том,
    о чем только что говорилось, я за себя не ручаюсь!
    Я уверен, что вы слышали о новой системе Visual .NET. Технически это компилятор и технология программирования Microsoft под новой маркой. Система нормально работает только на Windows XP/2000 и избыточна для наших целей, поэтому мы остановимся на Visual C++ 6.0. Тем не менее, все работает и при использовании .NET:
    Win32 есть Пример трехмерной игры Raiders Прежде чему нас начнут плавиться мозги от разговоров о математике, программировании трехмерных игр и графике, я бы хотел сделать паузу и показать уже готовую трехмерную космическую игру — простую, но все же игру. При этом вы увидите, что такое настоящий игровой цикл, некоторые вызовы графических функций и компиляция. Звучит неплохо, неправда ли?
    Проблема состоит в том, что это только первая глава, поэтому я не могу использовать материал из последующих глав — это было бы нечестно, согласны И я еще не показал вам игровой процессор из предыдущей книги. Поэтому я решил приучить вас пользоваться для программирования игр API как черным ящиком. И эта простая игра позволит вам привыкнуть к идее использования такого API, как DirectX и игрового процессора из первой книги.
    НА ЗАМЕТКУ
    НА ЗАМЕТКУ
    НА ЗАМЕТКУ
    ГЛАВА
    1. ОСНОВЫ ПРОГРАММИРОВАНИЯ ТРЕХМЕРНЫХ ИГР
    49
    Хотя в 70 х, 80 х годах ив начале 90 х годов прошлого столетия можно было все делать самому, в 21 веке в компьютере функционирует слишком много подсистем оборудования и программного обеспечения, что делает практически невозможным написание всего кода одним человеком. Увы, мы всего лишь разработчики игр, и наш удел — использовать чужие API, такие как Win32, DirectX и т.п.
    Основываясь на принципе черного ящика, я поставлю вопрос так каков абсолютный минимум средств для создания 16 разрядной трехмерной каркасной космической игры?
    Все, что нам необходимо от API — это следующая функциональность:
    • переключение в любой графический режим с помощью рисование цветных линий и пикселей на экране;
    • получение ввода с клавиатуры;
    • проигрывание звуковой записи из .WAV файла, находящегося на диске;
    • проигрывание MIDI музыки из .MID файла, находящегося на диске;
    • синхронизация игрового цикла с помощью функций работы со временем;
    • вывод на экран строк цветного текста;
    • копирование на экран двойного буфера (внеэкранной страницы визуализации).
    Вся эта функциональность, конечно, содержится в библиотеке игровых модулей, созданной в предыдущей книге и состоящей из шести файлов T3DLIB1.CPP¦H,
    T3DLIB2.CPP¦H, и T3DLIB3.CPP¦H. Модуль 1 предназначен для базовой работы с DirectX, модуль си, а модуль 3 — в основном с Основываясь на использовании минимального набора функций из игровой библиотеки, я написал игру под названием Raiders 3D, которая демонстрирует ряд концепций, уже обсуждавшихся в данной главе. Кроме того, поскольку это каркасно трехмерная игра, массу кода вообще не имеет смысла писать — и это хорошо Хотя я буду кратко объяснять используемые математику и алгоритмы, не тратьте много времени, пытаясь понять, что к чему эта информация дается только для того, чтобы позволить шире взглянуть на вещи 3D иллюстрирует все основные компоненты реальной трехмерной игры,
    включая игровой цикл, вычисления, искусственный интеллект, определение столкновений, звуки музыку. На рис. 1.15 показана копия экрана работающей игры. Конечно, это не Star Wars, однако совсем неплохо для нескольких часов работы!
    Прежде чем показать исходный код игры, я хочу, чтобы вы получили представление о том, из каких компонентов состоит проект (рис. 1.16). Как видно из рисунка, игра состоит из следующих файлов, являющихся частью проекта — основной блок логики игры, который использует функциональность и создает минимальное Win32 приложение — исходные файлы библиотеки T3DLIB;
    • T3DLIB2.CPP;
    • T3DLIB3.CPP;
    • T3DLIB1.H — заголовочные файлы библиотеки — DirectDraw — компонент двумерной графики в составе DirectX. Для создания приложения требуется библиотека импорта
    DDRAW.LIB. Она не содержит
    1   2   3   4


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