Введение в программирование игр на С++ для платформы DirectX 9 Программирование игр в directx. Hello, World! |
||
Данный небольшой урок является введением в программирование игр на C++ для DirectX 9 Вам нужно иметь установленную среду Microsoft Visual Studio 2005 или 2008 (можно триал), и DirectX SDK 9 версии, или лучше самой последней - DirectX SDK August 2008. |
||
[назад] [далее] [к содержанию] | ||
Мы рассматриваем пример SkinnedMesh размещенный внутри папки SkinnedMeshUpgrade для того, чтобы его можно было свободно модифицировать | ||
В предыдущих уроках - [Первый старт], [Меняем иконку приложения], [Добавляем другую модель] мы ознакомились с первыми шагами, которые нужно выполнить для начала работы с directx в Microsoft Visual Studio 2008 - настроить примеры для корректной компиляции, сменить иконку в собственном проекте и наконец приступить к первым модификациям кода |
||
В документации по MSVS нужно прочитать все разделы посвященные языку C++ и особенностям программирования в MSVS 2008, по DirectX - познакомиться с описанием примера SkinnedMesh | ||
Теперь будем постепенно знакомиться с кодом модуля SkinnedMesh.cpp | ||
строки #include
"DXUT.h" |
||
означают подключение соответствующих заголовочных файлов, чьи функции, методы, объекты или ресурсы будут использованы внутри данного модуля | ||
строка #define MESHFILENAME L"Media\\Models\\chentiz7.x" |
||
определяет, как мы увидели имя файла загружаемой модели символ L означает, что определяется строковая константа Wide-Character (см. докуменацию по MSVS) знак \\ ставится дважды т.к. однократное использование применяется для специальных кодов, например код перевода строки записывается как \n |
||
Для понимания функционирования Direct3D приложения нужно рассмотреть урок Tutorial 1 Creating a Device | ||
Пример находится в папке с установленным directX - DXSDK_Aug2008\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice | ||
В документации по DirectX (DXSDK_Aug2008\Documentation\DirectX9\directx_sdk.chm) читайте раздел Tutorial 1 Creating a Device | ||
Для экспериментов с языком C++ (изучения конструкций языка, операторов и т.п.) возьмем пример PixGameDebugging и разместим его копию в папке PixGameDebuggingUpd для экспериментов | ||
Этот пример интересен, но слишком сложен для первого старта. Для изучения основ C++ начнем с приложения Hello, World! |
||
Закрываем открытый проект File > Close Solution Создаем новый проект File > New > Project > Visual C++ > CLR > Windows Forms Application В качестве имени проекта вводим HelloWorldCLR и жмем ОК |
||
Из панели Toolbox добавляем на форму кнопку, щелкаем ее правой кнопкой мыши выбираем Properties, в окне свойств в правой части экрана находим свойство текст и вводим надпись на кнопке Say Hello Нажимаем Enter |
||
Дважды щелкаем кнопку Say Hello левой кнопкой мыши. Для нее будет автоматически создан обработчик события нажатия. В обработчике нажимаем Enter и добавляем строку кода MessageBox::Show("Hello, World"); |
||
Сохраняем изменения в проекте, выполняем сборку, запускаем приложение и смотрим результат - по нажатию кнопки Say Hello должно выводиться новое небольшое окошко с текстом Hello, World! и кнопкой ОК | ||
Запустить приложение можно прямо из среды MSVS, а можно открыть папку в которой Вы создали проект (по умолчанию внутри папки Мои Документы), найти папку Visual Studio 2008\Projects\HelloWorldCLR и открыть внутри этой папки папку соответствующую конфигурации вашего прокта (Debug или Release), там найти exe-файл и запустить его. | ||
в следующем уроке разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008 | ||
[назад] [далее] [к содержанию] |
[все уроки game craft] [моделируем scv] [моделируем scv шаг 1 часть 2] [моделируем scv шаг 2 часть 3] [Прорисовка текстуры робота SCV шаг 5] [экспорт робота scv в формат x] отображение scv модели в формате x в d3d9-приложении
В данном уроке Мы рассмотрим самую важную часть - работу с 3d-камерой, т. к. без игровой камеры нет и понятия игрового приложения, камера в любой игре присутствует всегда - даже в 2d-играх. Только там она неподвижна. Мы же рассмотрим разумеется все возможные способы работы с динамической игровой камерой, чтобы она позволяла обозревать мир нашей игры с любых точек зрения.
В 3d-пространстве справедливы 3 вида трансформаций - перемещения, вращения и масштабирования. Для игровой камеры актуальны только перемещение и вращение. Масштабирование не имеет смысла - т. к. камера это не игровая модель, а по-сути взгляд пользователя с экрана в пространство игрового мира.
Напомню, что в игровом d3d9-приложении ось X представляет горизонталь экрана, Y - вертикаль, а Z - уходит в глубину экрана.
Перемещения камеры актуальны по всем трём осям координат - X, Y и Z. Как правило X и Z - используются чаще - для обозревания пространства игрового мира, а Y - для изменения высоты взгляда на игровой мир. Вращения актуальны вокруг оси X - для изменения угла зрения на игру и вокруг оси Y для вращательного обзора игрового пространства (как бы вращение головой). Вращения вокруг Z практически неактуальны - т. к. вряд ли кто-то захочет видеть игровой мир "лежащим под неестественным углом на боку". Такое может применяться только, например, если игровой персонаж уничтожен - чтобы имитировать его лежачее положение на земле (для камеры от 1 лица - вид из глаз героя).
Кроме того, игровая камера может содержать только самые базовые и совмещенные операции - например когда возможно только перемещение по осям X и Z, чтобы обозревать игровой мир, а для изменения точки зрения на игровой мир применяется комбинация движения вдоль оси Y и вращения вокруг X. Другие трансформации могут быть недоступны или применяться в очень ограниченном виде. Бывают случаи и ситуации, когда игровая камера является статичной и недоступна для управления - особенно когда игра 2D или идёт показ какой-либо анимационной вставки. Другой случай - когда игровая камера анимирована - т. е. перемещается и вращается сама по заранее заданной программе. Этот вариант тоже чаще применяется для демонстрации каких-либо анимационных вставок в игре. Либо в каких-то игровых ситуациях.
Для разработки важен вариант игровой камеры с максимальным набором возможностей, т. к. в ходе разработки важно будет заглянуть в любой доступный уголок создаваемого игрового мира. Научившись работать с игровой камерой, Вы сможете затем создавать любые её типы и вариации из описанных выше. Кроме того, эти основы позволят лучше понимать как осуществляются трансформации с любыми другими объектами игрового мира, которые в том или ином виде будут присутствовать в игре.
Поняв и усвоив всё это, Вы, даже в самой сложной ситуации, можете представить, что ваш игровой объект - это Вы сами и управление им идёт от 1 лица. Тогда будет проще реализовать именно тот набор трансформаций, который Вам для него требуется. Однако чаще всего игровые трансформации с объектами сводятся к их простому перемещению в пространстве. Более сложным является перемещение по рельефу игровой поверхности, а все остальные трансформации чаще всего входят в состав анимационных цепочек, и поэтому особых сложностей для отображения представлять уже не будут.
[все уроки game craft] [моделируем scv] [Моделируем робота SCV шаг 1 часть 2] [Моделируем робота SCV шаг 2 часть 3] [Прорисовка текстуры робота SCV шаг 5] [экспорт робота scv в формат x] отображение scv модели в формате x в d3d9-приложении
Выгрузка файла на сайт со страницы сайта | ||
Сегодня мы поговорим о том, как организуется выгрузка файлов различных типов на сайт. Пользователи получают возможность загружать на сайт указанные виды файлов. Это могут быть документы, изображения, музыкальные файлы или что-то еще. |
||
Для начала нужно разместить на некоторой странице сайта форму для выгрузки файла. | ||
Сам код формы выглядит следующим образом - |
||
Форма обязательно должна содержать атрибут enctype="multipart/form-data" и метод отправки
данных для формы должен быть описан как method="post"
Атрибут enctype="multipart/form-data" указывает MIME-тип отправляемых формой данных (Multipurpose Internet Mail Extensions),
а метод отправки post единственно возможный для передачи файлов, т. к. методом get можно отправлять лишь небольшие объёмы информации, а передать
файл невозможно в принципе.
Далее мы просто указываем какой скрипт action="papers/sitecre/upload_file/upload_file.php" должен выполняться для обработки отправляемых формой данных, а также указываем имя и ID для формы. Следующим шагом указывается скрытое поле - , содержащее максимально допустимый размер выгружаемого файла. Если файлы будут очень большого размера, то повышается вероятность нарушения целостности передачи файла, возрастает длительность выгрузки файла и есть опасность ошибок связанных с переполнением допустимого размера файла. Заметим, что размер выгружаемого файла ограничивается не данным значением, а настройками заданными для php на стороне сервера. Следовательно скрипт, который выполняет обработку данного файла должен проверять его размеры и целостность. Следующим пунктом указывается поле input с такими атрибутами - type="file" name="upload_file" accept="text/plain" Т. е. в данное поле будет загружен файл, обратиться к данным файла можно будет по указанному имени name, а атрибут accept указывает тип загружаемого файла - обычный текстовый. Правда данный атрибут поддерживается только некоторыми браузерами, поэтому его указание не обязательно. В завершении указывается кнопка по нажатию на которую происходит отправка выбранного файла. Таким образом пользователь, чтобы выгрузить файл, сначала должен воспользоваться кнопкой Обзор, указав расположение файла на своём ПК, а затем нажать кнопку Отправки, чтобы выгрузить файл на сайт. |
||
Теперь рассмотрим php скрипт, который должен проверить правильность передачи файла и выполнить его дальнейшую обработку - переместить файл
в нужную папку, извчечь из файла какие-либо данные и т. п. |
||
Теперь перейдём к пояснениямfunction read( $cfile, $razd = "|" ) { $open = fopen( $cfile, "a+" ); while (( $dan = fgetcsv( $open, 2048, $razd )) !== false ) { $rec[] = $dan; } return $rec; }так мы запишем небольшую функцию, которая в данном случае будет открывать указанный ей файл с именем $cfile и обрабатывать его как CSV - т. е. текстовый формат представления табличных данных. В качестве разделителя используется указанный символ |. Данная функция полностью преобразует указанный CSV файл в массив. $loc_ru = setlocale(LC_ALL, 'ru_RU@russia', 'ru_RU', 'rus_rus'); данную строку применяем для указания кодировки русских букв, чтобы не было потерь информации при их использовании. $csv_file_size = $_FILES['upload_file']['size']; Этой строкой мы получаем из глобальной переменной $_FILES размер выгруженного файла if ( $csv_file_size == 0 ) Далее следует проверка - если размер файла нулевой - снова выводим форму для выгрузки файла Если размер больше нуля выполняем дальнейшую проверку if ( $_FILES['upload_file']['error'] == UPLOAD_ERR_OK ) Успешно ли прошла выгрузка файла Если успешно - $our_file_extention_correct = FALSE; $upload_file = $_FILES['upload_file']['name']; echo 'Вы загрузили файл '.$upload_file; echo 'Тип файла '.$_FILES['upload_file']['type']; $csv_uploaded_serverside_filename = $_FILES['upload_file']['tmp_name']; Сбрасываем флаг проверки расширения в false, запоминаем и выводим в браузер имя загруженного файла и его тип. Также запоминаем временное имя выгруженного файла на сервере. |
$dot_pos = strrpos($upload_file, "."); Ищем точку в имени файла начиная с конца строки. if ( $dot_pos !== FALSE ) Если точка найдена - $file_extention = substr($csv_import_emails_file, -3); Выбираем последние три символа из имени файла if ( $file_extention == "csv" || $file_extention == "CSV" ) $csv_file_extention_correct = TRUE; И сравниваем с нужным нам расширением if ( !$csv_file_extention_correct ) { echo 'Неверный тип файла, попробуйте еще раз !Назад'; } Если расширение неверное - выводим сообщение об этом Оставшийся код выполняет окончательную обработку информации в файле - в данном примере выводит описания из выгруженного файла на страницу |
|