ria pc game
translate to English   translate to Chinese
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
24 марта 2019 18:22
Вход Регистрация Забыли пароль ?

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2)
        Мастер-класс: Создание моде
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Онлайн-сервис для подсчёта статистики ключевых слов

megainformatic - Пишем слайдер на javascript с нуля

megainformatic - Логика работы слайдера на javascript

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob - часть реализации для личного кабинета

megainformatic - Пишем свою соц. сеть - Реализация файлового хранилища предложений в csv-файле

megainformatic - Тестирование подключения к платежной системе ЕДИНЫЙ КОШЕЛЕК (w1.ru) с использованием скрипта эмулятора

megainformatic - Пишем свою cms - шаг 1

megainformatic - Пишем свою cms - шаг 2

megainformatic - Пишем свою cms - шаг 3

megainformatic - бесплатная флеш игра freeway fury 2 - разработчик Serius Games

megainformatic - бесплатные флеш игры сторонних разработчиков

megainformatic - Как я осваивал Flash

megainformatic - Список уроков на тему создания flash приложений и игр

megainformatic - Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр

проект портала Идеи Комфорта

megainformatic - игра Веселый Буквоежка

megainformatic - игра Веселый Буквоежка

megainformatic - Использование cron, crontab и планировщика задач

megainformatic - Совместное использование jquery и mootools или других js-фреймворков

megainformatic - Модуль content php performer для megainformatic cms

megainformatic - Пишем компактный слайдер

megainformatic - Что нужно знать для создания сайта ?

megainformatic - Что нужно знать для создания сайта ? Глава 2 - Кодировки и DOCTYPE

megainformatic - Что нужно знать для создания сайта ? Глава 3 - Идём дальше - нанизываем новый код - где объявляются стили css и код javascript

megainformatic - Что нужно знать для создания сайта ? Содержание

megainformatic - Что нужно знать для создания сайта ? css - стили

megainformatic - preg_match или Использование регулярных выражений в php

megainformatic - статьи Тимонина Андрея - Flash. Содержание

megainformatic - статья Тимонина Андрея - Flash. Подготовка к работе.

megainformatic - статья Тимонина Андрея - Flash. Hello world.

megainformatic - статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

megainformatic - Тимонин Андрей - Несколько слов о себе

megainformatic - статьи Тимонина Андрея - уроки из области веб программирования, создания казуальных игр

megainformatic - статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

megainformatic - статья Тимонина Андрея - Хронология работы программы. Создаем Лог

megainformatic - статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

megainformatic - статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

megainformatic - статья Тимонина Андрея - States. Создаем менеджер состояний игры.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

megainformatic - статья Тимонина Андрея - Таймер. Выводим время игры.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем основной класс обработки графики.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем первое приложение.

megainformatic - Что нужно знать для создания сайта ? float - использование в css - стилях

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 2 - пишем свою композицию COLD

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 3 - экспериментируем с композицией COLD

megainformatic - Что нужно знать для создания сайта ? Стандартные шрифты для сайта

megainformatic - Что нужно знать для создания сайта ? ASC II Коды символов

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 4 - пишем первый вариант композиции COLD

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. СОДЕРЖАНИЕ

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. Энергетический кокон

megainformatic - Модуль галерей для любой cms

megainformatic - Портфолио выполненных проектов сайтов и приложений

megainformatic - Мои Музыкальные Миры - страница 2

megainformatic - megainformatic cms rs

подробнее

Обновленная версия Эмулятора игры Электроника ИМ-02 Ну, Погоди ! версия 1.20 от 2.03.2017


Было замечено, хотя правда не сразу, некоторое размытие картинки. Причем в более старой
версии написанной еще на delphi 7 directx 8.1 этого не наблюдается.
А в версии 1.10 для c++ directx 9 наблюдается.

Теперь эта проблема исправлена. В версии 1.20 для c++ directx 9 картинка также стала ясной
и четкой.

Для сравнения приведены скриншоты.

Изображение в новой обновленной версии 1.20

Эмулятора игры Электроника ИМ-02 Ну, Погоди ! версия 1.20 от 2.03.2017





Изображение в версии 1.10

Эмулятора игры Электроника ИМ-02 Ну, Погоди ! версия 1.10





     
  Эмулятор электронной игры Электроника ИМ-02 "Ну, Погоди!", версия 1.10  
     
  Эмулятор электронной игры Электроника ИМ-02 "Ну, Погоди!"  
 

Стоимость: 500 руб.

 
     
  Скриншоты Электроника ИМ-02 Ну,Погоди! эмулятор

Электроника ИМ-02 Ну,Погоди ! эмулятор - основной экран
Электроника ИМ-02 Ну,Погоди ! эмулятор - игровой процесс
Электроника ИМ-02 Ну,Погоди ! эмулятор - Призовой мультфильм при наборе трижды по 999 очков
Электроника ИМ-02 Ну,Погоди ! эмулятор - меню опций
Электроника ИМ-02 Ну,Погоди ! эмулятор - окончание игры при наборе 3х штрафных очков


 
     
   
     
  Данная версия внешне ничем не отличается от 1.00, изменения в основном внутренние - версия 1.10 была полностью переработана под DirectX9c и переписана на C++, объем дистрибутива сократился с 2,45 до 2,09 Mb  
     
 

Эмулятор электронной игры, которая была популярна в конце 80-х-начале 90-х
годов 20 века - Электроника ИМ02 "Ну, Погоди!".

Игра на внимание и быстроту реакции.

Смысл игры: управляя волком ловить катящиеся с 3х или 4х лотков яйца и набрать
максимум очков. Если не поймать яйцо в корзинку оно разобъется. При этом
игрок получает 1 или 0,5 штрафных очка в зависимости от того, выглядывал ли
в этот момент из окошка заяц. Если заяц выглядывал, то волк как будто бы
отвлекся на него, поэтому штраф меньше.

 
     
  системные требования: Windows 98SE/2000/XP SP2/DirectX 9c/Celeron 997/128 Mb RAM/32 Mb Video/DirectX-sound card/около 5 Mb HDD/клавиатура, мышь.  
     
  О разработке данной игры - купите полную версию игры и получите бесплатно полный исходный код игры для компиляции в delphi 7 или 2006 и уроки delphi directx 8.1 содержащие статьи по созданию собственной 2D/3D игры в среде delphi directx  
     
 

Игра продолжается до трех штрафных очков.

Особенности эмулятора:

- полная аналогия электронной игры "Ну, Погоди!";

- режимы часов и будильника;

- дополнительные возможности, которых не было в оригинальной игре:

- возможность паузы в игре;
- сохранение текущей и загрузка ранее сохраненной игры;
- при наборе 999*3 очков долгожданный сюрприз: Вас ждет небольшой мультфильм.

 
     
  Эмулятор электронной игры Электроника ИМ-02 "Ну, Погоди!"  
 
 
     
 

Режимы игры и режимы эмулятора:

Кнопка игра А - яйца одновременно могут скатываться с любых 3-х лотков;
Кнопка игра Б - яйца одновременно могут скатываться с 4-х лотков;
Кнопка Время - режим показа текущего времени

Кнопка Часы - не используется
Кнопка Будильник - возможность установки подачи сигнала будильника в заданное время

Режимы часов и будильника можно включать в режиме Рестарта (много волков, яиц и прочего на экране), после проигрыша. Во время работы в режимах игра А или игра Б кнопки Время и Будильник не реагируют (это имеет место в оригинальном электронном варианте игры). Напротив даже во время начатой игры игру можно запустить снова - кнопки игра А, игра Б реагируют стартом новой игры даже во время начатой игры (этого не было в оригинальном электронном варианте, но сделано для удобства).

Меню эмулятора:

Игра > Перезапуск - ре-старт игры
Игра > Выход - выход из игры
Опции > Пауза - пауза в игре
Опции > Сохранить - сохранение текущей игры в выбранный файл
Опции > Загрузить - загрузка ранее сохраненной игры

Замечание: перед сохранением или загрузкой лучше включить режим паузы в игре (клавиши P (английская), F2 или пункт меню Опции > Пауза, если этого не сделать, то поскольку игра может развиваться молниеносно, Вы просто не успеете адекватно отреагировать на загруженную ситуацию.

Опции > Подсказка - выводить подсказку о нажатии F1

Опции > Показ FPS - выводить частоту кадров

Опции > Сложность - окно уровня сложности игры. Новый уровень сложности начинает работать только после старта новой игры.

? > Помощь или F1 - справка по управлению игрой

? > О игре - краткая справка о программе

? > Сайт МегаИнформатик - запуск браузера и показ основных проектов Мега Информатик


Управление игрой:

для нажатия нужной кнопки на эмулируемой панели электронной игры
используйте мышь.

кроме того, в качестве клавиш управления волком могут служить:
E O или 7 9
D K или 1 3 - на цифровой клавиатуре

Пауза в игре - F2 или P

Для сохранения и загрузки текущей игровой ситуации используйте Меню эмулятора.

Автор эмулятора: Синицин А.С.

 
     
  Эмулятор электронной игры Электроника ИМ-02 "Ну, Погоди!"  
 
 
     
  гарантийный талон  
     
 

Документальное подтверждение того, что автор приобрел игру "Ну, Погоди!" 14 мая 1990 года. Электронная игра была произведена на Калужском радиоламповом заводе им. 50-летия СССР 27 апреля 1990 года, заводской номер 212487.

Итак, это было 20 лет назад. Теперь игрушка снова обрела жизнь и Вы можете снова в нее играть.

 
     
подробнее

     
 

Видео урок посвященный созданию игры на примере игры Ну, Погоди ! - рождение игры часть 2.

Элементарные и простые игры на примере которых можно в delphi 7 на directx 8.1 api научиться создавать игры.

 
     
 
Урок 4 Построение класса приложения
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 1] [далее] [к содержанию]
 
Из предыдущих уроков вы уже почерпнули некоторую информацию о том, как строится и функционирует типичное D3D-приложение. Эта информация является общей для всех приложений DirectX написанных как на C++, так и на Delphi. Разница лишь связана с синтаксическими особенностями данных языков программирования и средами программирования в которых происходит работа.
 
Здесь и далее мы познакомимся с основными особенностями Direct3D-приложения, которые необходимо учитывать при разработке его базового класса.
 
За основу мы возьмем класс CD3DApplication, рассмотрим и протестируем на конкретных примерах его особенности, а далее покажем класс, который используется в игре "Ну, Погоди!" и проведем небольшое сравнение.
 
С исходным кодом класса CD3DApplication вы можете познакомиться заглянув в модуль D3DApp.pas из папки common библиотеки delphi directx 8.1
 
Данный класс является абстрактным (также как и например TForm), поэтому нужно сначала создать производный класс от данного, а затем уже работать с новым созданным классом, используя его для своих целей, что и происходит во всех примерах из DirectX SDK.
 

CD3DApplication производится напрямую от TObject.

Основное назначение класса - обеспечение работы WinAPI-приложения с использованием также DirectX API, другими словами данный класс предоставляет удобный для работы интерфейс для вызова необходимых приложению интерфейсов Windows и главным образом интерфейсов DirectX.

 

Основные методы этого класса - это

Create

Destroy

Create_

Run

MsgProc

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

OneTimeSceneInit

InitDeviceObjects

RestoreDeviceObjects

FrameMove

Render

InvalidateDeviceObjects

DeleteDeviceObjects

FinalCleanup

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

 
В качестве основы для изучения данного класса и экспериментов с ним мы возьмем пример SwitchScreenModes
[downloads:12] из предыдущего урока. Для экспериментов над кодом класса CD3DApplication советую Вам взять файл D3DApp.pas и его копию разместить внутри папки того проекта в котором Вы будете проводить эксперименты. При этом среда Delphi будет использовать локальную копию вместо копии из папки common, а Вы сможете проводить какие угодно изменения не вмешиваясь в оригинальный код D3DApp.pas
 
Класс приложения CD3DApplication функционирует абсолютно по тем же правилам, которые мы рассмотрели в предыдущих уроках.
 

Метод Create задает начальные значения для множества полей данного класса,

в частности запоминается ссылка на самого себя -

g_pD3DApp := Self;

задаются начальные размеры окна приложения

m_dwCreationWidth := 400;
m_dwCreationHeight := 300;

и ряд других, назначение которых Вы узнаете из дальнейшего повествования

 
Данный метод - метод конструктора класса, вызывается при создании нового объекта данного класса и выполняет базовую начальную инициализацию заданных полей класса теми значениями, которые заданы в реализации данного конструктора, все остальные поля обнуляются или выставляются в nil (если это указатели)
 

Метод Destroy - метод деструктора класса, вызывается при удалении объекта класса. При этом освобождается память занятая объектом и связанными с ним ресурсами. Если таких ресурсов достаточно много и они занимают значительный объем, то выполнение метода может занимать значительное время - вспомните любую игру, в которую Вы играли в последний раз, почему игра по выходу из нее закрывается не сразу, а через некоторое время? Именно поэтому.

Помимо внутренних полей самого класса, производный класс применяемый при реализации той или иной игры может использовать множество вложенных классов (являясь для них контейнером), эти классы в свою очередь также могут содержать вложенные и т.д. В конечном счете в память загружаются с диска какие-либо ресурсы, используемые игрой - текстуры, модели, шейдеры, звуковые и музыкальные файлы, текст и т.п. При закрытии приложения все загруженные ресурсы должны быть из памяти удалены, чтобы освободить ее для других приложений.

Теперь Вам должно быть понятно то, почему чем больше игра, тем дольше она запускается при старте или закрывается при выходе из неё.

 
Особенностью данного метода является то, что он должен вызываться не напрямую, а посредством метода Free. Для этих же целей можно применять функции SAFE_DELETE и FreeAndNil
 

Метод Create_ - представляет метод начальной инициализации класса приложения. Его имя происходит от имени оригинального метода Create на C++. Но поскольку в языке Delphi для конструктора и деструктора применяются специальные имена (Create и Destroy), а в языке C++ имя конструктора и деструктора совпадает с именем класса, то данный метод и получил такое название. Знак подчеркивания обозначает, что данный метод именно метод инициализации, а не метод конструктора!

Внутри данного метода вызывается весь код, необходимый для начальной инициализации DirectX-приложения:

создается объект Direct3D, выполняется создание списка графических устройств, создается окно приложения (если требуется), задается стиль, границы окна и рабочей области, запускается DXTimer осуществляющий периодические процессы D3D-приложения - цикл подготовки кадра и цикл отрисовки, вызывается виртуальный метод OneTimeSceneInit осуществляющий однократную инициализацию, должен быть реализован в производном классе, поэтому его работа целиком зависит от того, как он будет реализован, наконец метод Initialize3DEnvironment выполняет окончательную инициализацию 3D-среды, главным образом создавая объект IDirect3DDevice8 на основе параметров, которые были получены на предыдущих этапах выполнения.

После этого приложение переходит в состояние готовности. Это означает, что начинаются периодические процессы, выполняющие циклическую работу:

метод Run - если приложение работает как WinAPI, то данный метод вызывается напрямую и будет запущен цикл проверки сообщений на основе которого и работает типичное WinAPI-приложение.

метод MsgProc - представляет реализацию оконной процедуры приложения, которая отвечает за обработку поступающих в неё сообщений от системы. Эти сообщения играют важную роль, т.к. при помощи них и происходит собственно работа приложения в системе Windows. При каких-либо событиях, например, нажатии пользователем клавиши или перемещении мыши система реагирует на них и создает соответствующие сообщения. Эти сообщения попадают в очередь сообщений и если предназначены конкретному приложению имеющему фокус, то система передает их ему. Помимо описанных в качестве сообщений могут быть любые другие - достаточно заглянуть в код метода MsgProc и вы увидите как обрабатывается приложением сообщение об активации/деактивации приложения, реакция на команду окна меню и т.д.

 
Оставшиеся методы - OneTimeSceneInit, InitDeviceObjects, RestoreDeviceObjects, FrameMove, Render, InvalidateDeviceObjects, DeleteDeviceObjects, FinalCleanup

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

 

Назначение метода OneTimeSceneInit состоит именно в однократном его вызове. Внутри данного метода можно создавать такие объекты, которые необходимо создать лишь однократно при начальном старте - объект DirectInput, некоторые общие ресурсы, которые будут использоваться на протяжении всего приложения.

InitDeviceObjects - в отличие от предыдущего метода может вызываться и не один раз, однако перед его вызовом необходимо вызывать DeleteDeviceObjects т.е. сначала удалить все используемые объекты, иначе это приведет к ошибкам.

Методы RestoreDeviceObjects и InvalidateDeviceObjects также работают в логической паре. После инвалидации объектов их обязательно нужно восстановить, перед восстановлением обязательно инвалидировать. Иначе это опять же приведет к ошибкам. В этих методах нуждаются объекты, зависимые от текущего устройства. Если вдруг произошел его сброс, то происходит инвалидация, после чего нужно обязательно выполнить восстановление. К таким объектам относятся модели, шейдеры.

 

Метод FrameMove - исходя из названия "движение кадра" - отвечает за подготовку следующего кадра анимации. Как таковая отрисовка в нем не происходит. Его основное назначение - это вызов метода UpdateInput который выполняет опрос устройств ввода клавиатуры и мыши, а также выполнение всех необходимых вычислений, которые осуществляют перемещение персонажей, логику игры и прочее

От сложности процессов, происходящих внутри данного метода напрямую будет зависеть производительность приложения, потому что данный метод в паре с методом Render периодически вызывается таймером DXTimer через минимальные интервалы времени, чем и определяется FPS - частота кадров.

Метод Render - не должен содержать слишком "тяжеловесного" кода, т.к. его основная задача - как можно быстрее отрисовать то, что было подготовлено на предыдущей стадии. Для ускорения работы данного метода выполняются различные подготовительные стадии, в частности, отсечение объектов, не попадающих в поле зрения камеры. Правильное выполнение этого процесса (естественно внутри FrameMove, а не внутри Render) гарантирует то, что игра "не будет тормозить" даже при кажущемся большом количестве игровых объектов присутствующих в игровой сцене. Они просто будут исключаться из цикла отрисовки, если не попадают в определенную область видимости.

 
Итак, вкратце мы рассмотрели что к чему. Пора приступить к экспериментам. Под экспериментами я понимаю более углубленное изучение кода класса CD3DApplication. Мы будем брать части кода и комментировать их, исключая из компиляции, затем наблюдать результат полученный при этом. Этим методом не всегда, но очень часто можно лучше уяснить для себя как работает та или иная часть приложения. Кроме того, такие эксперименты будут крайне полезны Вам если у Вас еще не очень достаточно опыта в программировании игр и приложений вообще. Такие эксперименты позволят получить общее представление о методах тестирования и отладки кода.
 

Откроем пример SwitchScreenModes и копию модуля D3DApp.pas, которую Вы должны были скопировать из папки common в папку данного проекта

Открыть модуль D3DApp.pas достаточно просто - в коде модуля SwitchModesUnit.pas найдите имя D3DApp в списке uses и удерживая нажатой клавишу [Ctrl] щелкните по этому имени левой кнопкой мыши.

Модуль D3DApp.pas будет открыт для Вас. Чтобы удостовериться, что Вы действительно работаете с копией, а не с оригиналом из папки common, попробуйте выполнить сохранение. Если диалог укажет на папку проекта, а не на common, значит всё верно, можно смело приступать к экспериментам!

 

Для начала мы заглянем внутрь метода CD3DApplication.Create_ и выясним несколько фактов:

Как происходит построение списка адаптеров и какой видео режим выбирается по умолчанию - нам нужно будет поработать с кодом внутри BuildDeviceList

Какие особенности учитываются при реализации Initialize3DEnvironment для инициализации 3D-среды

 

Самый простой эксперимент - закомментируем кусок кода -

{hr:= BuildDeviceList;
if FAILED(hr) then
begin
SAFE_RELEASE(m_pD3D);
Result:= DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
Exit;
end;}

заключив его в фигурные скобки, выполним компиляцию, запустим приложение и посмотрим что произошло.

Мы получим Generic application error и приложение будет закрыто. Даже ничего не зная о функционале работы CD3DApplication из этого можно заключить, что данный код является критичным для работы приложения.

Раскомментируем код и отправимся вглубь метода BuildDeviceList для экспериментов внутри него.

Замечу, что показанная техника экспериментов с комментированием участков кода для лучшего уяснения его назначения и работы уже рассматривалась в ряде статей, в частности в - Теория и практика 3D-игр

 

Для быстрого перехода к реализацию BuildDeviceList также достаточно щелкнуть по этому идентификатору левой кнопкой мыши вкупе с клавишей [Ctrl].

Посмотрим как происходит работа внутри данного метода в режиме отладки. Для этого достаточно установить в нужной строке кода контрольную точку останова и запустить приложение в режиме отладки.

 
 
Для этого щелкаем левой кнопкой мыши в указанной позиции и там появится красный кружок вместо синего (как на рисунке).
 
 
Запускаем приложение в режиме отладки кнопкой Run как показано на рисунке.
 

Для пошагового исполнения кода используем клавишу [F8]. Для входа в код вызываемых процедур и функций можно использовать [F7].

Параллельно можно исследовать содержимое переменных наблюдая как изменяются их значения.

Сначала мы наблюдаем как выбираются все видео- режимы чьё разрешение >= 640x480

Отфильтровываются все подобные видеорежимы, отличающиеся лишь частотой покадровой развертки.

Заносятся в список только имеющие уникальный формат текстуры, отсортировываются в порядке увеличения разрешения и качества формата текстур.

Далее выясняется количество доступных графических устройств в системе, имеют ли они тип HAL (аппаратный уровень абстракции), могут ли использоваться в оконном режиме, совместимы ли с режимом рабочего стола, поддерживается ли аппаратная трансформация вершин, выясняется формат буфера глубины и т.п.

Таким образом основная задача данного метода - выборка наиболее подходящих видеорежимов и занесение их в список доступных.

 

Какой режим выставляется по умолчанию?

Все видеорежимы попадают в поля структуры m_Adapters представляющей список адаптеров в системе. Каждый адаптер в свою очередь имеет список устройств, список видеорежимов, форматов и т.д.

В конце данного метода выставляется текущий адаптер и устройство -

m_Adapters[a].dwCurrentDevice := d;
m_dwAdapter := a;
m_bWindowed := True;

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

Для полного ответа на поставленный вопрос в методе Create_ попробуйте сразу после выполнения BuildDeviceList добавить такой тестовый код -

var

//**
cd: Cardinal;
//нужно объявить как глобальную переменную вне метода Create_
//**

{...}

//остальное уже в методе Create_

hr:= BuildDeviceList;
if FAILED(hr) then
begin
SAFE_RELEASE(m_pD3D);
Result:= DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
Exit;
end;

//**
cd := m_Adapters[m_dwAdapter].dwCurrentDevice;
//**

 

установив точку останова на коде созданной строки вы можете получить в режиме отладки информацию о том, какое текущее устройство устанавливается по-умолчанию.

Используя нижеследующий код, который Вы можете почерпнуть из метода BuildDeviceList можно получить всю необходимую информацию -

var

//**
CurrentDevice, DeviceModeNum: Cardinal;
DesktopMode: TD3DDisplayMode;
p_AdapterInfo: PD3DAdapterInfo;
pDeviceInfo: PD3DDeviceInfo;
DeviceCurrentMode: TD3DModeInfo;
//**

//аналогично нужно объявить как глобальные переменные вне метода Create_, если сделать локальные, то их значения могут стать недоступны при отладке из-за оптимизации в регистрах процессора, поэтому для целей отладки и проверки получаемых значений нужны глобальные переменные

//**
CurrentDevice := m_Adapters[m_dwAdapter].dwCurrentDevice;
DesktopMode := m_Adapters[m_dwAdapter].d3ddmDesktop;
p_AdapterInfo := @m_Adapters[m_dwAdapter];
pDeviceInfo := @p_AdapterInfo^.devices[CurrentDevice];
DeviceModeNum := pDeviceInfo^.dwCurrentMode;
DeviceCurrentMode := pDeviceInfo^.modes[DeviceModeNum];
//**

теперь всё сразу становится очевидно -

сначала определяется текущее устройство CurrentDevice, затем текущий режим рабочего стола (если это Вам потребуется), считывается информация о текущем адаптере, по ней определяется информация о текущем устройстве pDeviceInfo, затем считывается номер текущего видеорежима и определяются его параметры

 

Двигаемся дальше. Если будет обнаружено, что обработчик окна m_hWnd пуст, т.е. требуется создать окно средствами WinAPI, то оно будет создано. Иконка, указатель мыши, цвет фона, стиль, границы, размеры задаются далее.

Если обработчик окна не был пуст, то запоминается указатель на старую оконную процедуру и устанавливается новый, обрабатывающий поступающие сообщения внутри метода MsgProc, а также вызывающий старую оконную процедуру. Это гарантирует корректную обработку поступающих приложению сообщений даже при использовании VCL-окон и приложения работающего на основе TApplication, как это имеет место в примерах всех предыдущих уроков и игре "Ну, Погоди!". Если забыть про этот важный момент - при создании собственного базового класса D3D-приложения, то можно долго гадать о причинах возможных ошибок и некорректной его работы.

 

Метод OneTimeSceneInit целиком зависит от реализации его в производном классе.

Остается рассмотреть метод Initialize3DEnvironment и поэкспериментировать с ним.

 

Заглянув в первые строки кода данного метода сразу определяем, что текущий видеорежим это pModeInfo

вызов AdjustWindowForChange; на самом деле выполняет скрытие окна полноэкранного режима

Далее идет настройка параметров отображения и самое интересное, что служит ответом на второй вопрос, поставленный в конце 3 урока

// Create the device
{//**
hr := m_pD3D.CreateDevice(m_dwAdapter, pDeviceInfo^.DeviceType,
m_hWndFocus, pModeInfo^.dwBehavior, m_d3dpp,
m_pd3dDevice);
}

hr := m_pD3D.CreateDevice(m_dwAdapter, pDeviceInfo^.DeviceType,
m_hWndFocus,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
m_d3dpp,
m_pd3dDevice);

В чём же причина? Если заглянуть в документацию по DirectX 8 ,то в описании IDirect3D8::CreateDevice вы найдете список значений параметра BehaviorFlags

среди них D3DCREATE_PUREDEVICE = $10; и D3DCREATE_HARDWARE_VERTEXPROCESSING = $40; именно то значение, которое имеет данный флаг если использовать строку кода, которая показана закомментированной (зеленого цвета)

Приведенный чуть ниже код исправляет данный недостаток! Причина объяснена в документации по DirectX 8 -

D3DCREATE_PUREDEVICE
Specifies that Direct3D does not support Get* calls for anything that can be stored in state blocks. It also tells Direct3D not to provide any emulation services for vertex processing. This means that if the device does not support vertex processing, then the application can use only post-transformed vertices.

Т. е. установка данного флага не позволяет вызывать методы Get* и требует использования только пост-трансформированных вершин. Метод GetViewport как раз и не выдает при этом нужной информации!

 
оставшийся код располагает окно поверх остальных окон (если используется оконный режим), проверяются возможности устройства и формируется соответствующая информационная строка m_strDeviceStats, запоминаются параметры бэк-буфера, отображается указатель мыши и ограничивается его перемещение заданной областью, происходит вызов методов InitDeviceObjects и RestoreDeviceObjects, в случае ошибок происходит переключение на более низкий уровень возможностей графического устройства и рекурсивный вызов метода Initialize3DEnvironment.
 
По окончании выполнения метода Create_ приложение переходит в состояние готовности и запускается непрерывный цикл отрисовки вызывающий поочередно методы FrameMove и Render. Это происходит внутри метода TAppForm.ApplicationEventsIdle
 
 
 
[назад] [страница 1] [далее] [к содержанию]
 
 
     
     
     
     
подробнее

     
 
Урок 3 Оконный и полноэкранный режимы работы D3D-приложения
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 2] [далее] [к содержанию]
 
Опираясь на код приложения, который Вы создали в предыдущем уроке рассмотрим особенности, которые Вам нужно учесть при реализации работы в оконном/полноэкранном режимах
 
В первую очередь для проверки правильности созданного кода управления от DirectInput попробуйте добавить показ/отключение показа FPS. Для этого Вам нужно заглянуть в исходный код игры "Ну, Погоди!" и реализовать работу методов CountFPS, ShowFPS
 

Обратите внимание, что код метода TD3DGameApp.CreateInputObjects

должен выглядеть следующим образом -

procedure TD3DGameApp.CreateInputObjects;
begin
SetDefaultDefKeys;
m_DXInput := TDXInput.Create(Self);
m_DXInput.ActiveOnly := False;
// задает использование DirectInput всегда, независимо от активности приложения
m_DXInput.Exclusive := False;
//эксклюзивный режим нужен только тогда, когда Вы хотите использовать собственный //курсор мыши, прорисовываемый средствами Direct3D
end;

В качестве действия ShowFPSTrigger внутри DefineDefaultKeys нужно задать какую-либо клавишу.

вызов метода ShowFPS нужно добавить внутри UpdateInput

 
Теперь переходим непосредственно к рассмотрению особенностей переключения между оконным/полноэкранным режимами.
 

Индикатор активности приложения m_bIsActive устанавливается в методе TD3DGameApp.MsgProc

при получении системного сообщения WM_ACTIVATEAPP

m_bIsActive := BOOL(wParam);

 

Однако если Ваше приложение основано на классе TForm и использует для старта класс TApplication (как это имеет место в нашем случае), то данный метод (MsgProc) не получает данного сообщения в момент активации.

Вместо этого активацию нужно выполнить реализовав для класса TForm обработчики событий OnActivate и OnDeactivate-

procedure TMainForm.FormActivate(Sender: TObject);
begin
if g_d3dApp <> nil then
g_d3dApp.m_bIsActive := True;
end;

procedure TMainForm.FormDeactivate(Sender: TObject);
begin
if g_d3dApp <> nil then
g_d3dApp.m_bIsActive := False;
end;

 

При реализации переключения в полноэкранный режим могут возникнуть некоторые сложности. Мы возьмем за основу пример SwitchScreenModesInVCL, рассмотрим его особенности и попробуем внедрить их в другой пример - FullscreenMode, основанный на коде из предыдущих уроков.

 
Прежде всего отметим, что код примера SwitchScreenModesInVCL основывается на примере VCLTex из Delphi DirectX SDK Алексея Баркового (http://www.clootie.ru). Особенности касающиеся работы с текстурами удалены, внимание уделено лишь переключениям режимов Полноэкранный/Оконный в приложении на основе VCL и особенностям использования DX8_DIUtil8.pas (модуль для работы с DirectInput8 из Delphi) с классом CD3DApplication.
 
Как и в наших предыдущих уроках код приложения построен на основании двух классов. Первый класс производный от - TForm из VCL, второй подобен TD3DGameApp, но происходит от CD3DApplication из модуля D3DApp.pas библиотеки с общим кодом.
 

Схема работы приложения аналогичная, тому, что имело место в предыдущих уроках. Однако есть ряд особенностей, которые нужно учесть при переносе кода в пример FullscreenMode.

Какие же?

 

Прежде всего, если Вы заглянете в код SwitchScreenModesInVCL внутри модуля SwitchModesUnit.pas,

то обнаружите новый класс - TAbstractApp. Этот класс используется как переходное звено между классом приложения CD3DApplication не являющимся TForm и объектом TDXInput, требующим для своего использования именно такого класса.

Происходит всё довольно просто. Внутри класса CMyD3DApplication производного от CD3DApplication объявляется поле соответствующего типа, а в методе OneTimeSceneInit вызывается создание данного поля и задание для него указателя на обработчик окна данного класса.

Код внутри самого класса выполняет запоминание ссылки на оконную процедуру класса, а сама она выполняет не что иное, как вызов метода MsgProc класса CMyD3DApplication.

Используя объект FAbstractApp при создании объекта TDXInput достигается требуемый эффект. Класс TDXInput извлекает нужные ему параметры из объекта FAbstractApp, а приложение работает как ни в чем не бывало.

Если Вы посмотрите на код примеров из предыдущих уроков, то там класс TD3DAbstractApp является базовым для класса TD3DGameApp.

Такие сложности были связаны с тем, что модуль DX8_DIUtil8.pas был разработан на основе аналогичного кода из библиотеки DelphiX. Эта библиотека хоть и уже несколько устарела, послужила основой для данного модуля, поскольку не удалось разрешить некоторые проблемы, связанные с использованием оригинальных файлов для DirectInput8 из DirectX SDK на C++ при конверсии примеров на Delphi.

Получился компромисс.

 

Для примера SwitchScreenModesInVCL была выполнена следующая подготовка:

класс формы TAppForm, объект g_AppForm.

На форме располагаются

MainDisplayPanel: TPanel

и

ToggleFullscreen: TButton;

последняя применяется вместо пункта меню TMainMenu переключения режимов (для простоты).

 

Код выполняющий собственно переключение оконного/полноэкранного режимов - это обработчик события по нажатию на кнопку ToggleFullscreen

Этот же код вызывается при срабатывании действия DirectInput c именем ChangeWindowModeKey и

внутри FullScreenWndProc - для переключения в оконный режим по нажатию [Esc]ape

 

Этот метод - CD3DApplication.ToggleFullscreen

как видим часть класса CD3DApplication и реализован внутри D3DApp.pas

 

Внутри данного метода происходят следующие интересные вещи:

получаем информацию о адаптере, устройстве и режиме

pAdapterInfo := @m_Adapters[m_dwAdapter];
pDeviceInfo := @pAdapterInfo^.devices[pAdapterInfo^.dwCurrentDevice];
pModeInfo := @pDeviceInfo^.modes[pDeviceInfo^.dwCurrentMode];

используемом для формирования изображения D3D-приложения.

Если устройство не поддерживает оконный режим, то остаемся в полноэкранном режиме

Переключаем текущее состояние с оконного на полноэкранное (или наоборот)

Выполняем настройку для возможного изменения размеров рабочей области окна

Выставляем параметры отображения

Учитываем изменившиеся размеры окна

Располагаем окно в нужной позиции поверх всех остальных

 
Это лишь краткое описание того, что на самом деле происходит в коде (подробнее см. сам код примера)
 
Сравним это с тем, что имеет место в примере FullscreenMode (для Вас он уже есть в готовом виде, в конце данного урока), а пока нужно рассмотреть особенности внутри метода TD3DGameApp.SwitchDisplayModes
 

здесь информацию об адаптере, устройстве и режиме мы берем из -

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

Однако дальше видно, что если режим будет полноэкранный, потребуется знать параметры текущего видеорежима, возможно переход в этот режим дает ошибку из-за несоответствия размеров окна?

Какой текущий видеорежим использовался во время старта приложения?

Это мы можем узнать из метода TD3DGameApp.CreateDisplayObjects

 

Здесь видно, что для оконного режима не заданы размеры для

m_d3dpp.BackBufferWidth := m_dwScreenWidth;
m_d3dpp.BackBufferHeight := m_dwScreenHeight;

в D3DApp.pas (CD3DApplication.Initialize3DEnvironment) они задаются,

как задается и m_d3dpp.hDeviceWindow := m_hWnd;

причем как для оконного, так и для полноэкранного

 

аналогично поступим и в нашем примере

возвращаемся к методу TD3DGameApp.SwitchDisplayModes

ошибка происходит в методе m_pd3dDevice.Reset( m_d3dpp );

и ясно почему - не учитывается обработчик окна для оконного и полноэкранного режимов, а также заданные размеры окна в этих режимах.

Как это происходит в примере SwitchScreenModesInVCL ?

TAppForm.FormShow

fMyApp.m_hWnd := m_hwndRenderWindow;
fMyApp.m_hWndFocus := m_hwndRenderFullScreen;

Далее можно просмотреть где в коде CD3DApplication встречаются вхождения на m_hWnd и m_hWndFocus

 

Также интерес вызывает параллельный вопрос:

если m_hWnd и m_hWndFocus разные обработчики, а при создании TDXInput указывается лишь один из них, то как это скажется на работе устройств DirectInput?

 

Итак, что мы имеем в коде SwitchScreenModesInVCL ?

TAppForm.FormShow >

CMyD3DApplication.Create - всё предельно просто и ясно.

для полноэкранного режима создается отдельное окно - m_hwndRenderFullScreen

fMyApp.m_hWnd := m_hwndRenderWindow;
fMyApp.m_hWndFocus := m_hwndRenderFullScreen;

 

CD3DApplication.Create_ >

BuildDeviceList - сбор данных о дисплейном адаптере и установка режима 640х480 16 бит

т. к. m_hWnd уже <> 0, то в качестве окна используется fMyApp.m_hWnd := m_hwndRenderWindow; (см. TAppForm.FormShow)

 
FOldWndProc задаем для текущего окна
 

if (m_hWndFocus = 0) then
m_hWndFocus:= m_hWnd;

окно фокуса также иное

 

сохраняем свойства окна, запускаем таймер, инициализируем сцену и 3D-среду (Environment)

CD3DApplication.Initialize3DEnvironment - остановимся подробнее также на данном методе

здесь мы видим как определяется текущий видеорежим (заданный в BuildDeviceList)

проводится настройка изменений размеров

настраиваются следующие параметры отображения -

будет ли режим оконным

m_d3dpp.Windowed := pDeviceInfo^.bWindowed;

{...}

m_d3dpp.hDeviceWindow := m_hWnd; //независимо от оконный/полноэкранный!!!

if (m_bWindowed) then //размеры буфера подготовки кадра, его формат
begin
m_d3dpp.BackBufferWidth := m_rcWindowClient.right - m_rcWindowClient.left;
m_d3dpp.BackBufferHeight := m_rcWindowClient.bottom - m_rcWindowClient.top;
m_d3dpp.BackBufferFormat := pAdapterInfo^.d3ddmDesktop.Format;
end else
begin
m_d3dpp.BackBufferWidth := pModeInfo^.Width;
m_d3dpp.BackBufferHeight := pModeInfo^.Height;
m_d3dpp.BackBufferFormat := pModeInfo^.Format;
end;

устройство создается как

// Create the device
hr := m_pD3D.CreateDevice(m_dwAdapter, pDeviceInfo^.DeviceType,
m_hWndFocus, pModeInfo^.dwBehavior, m_d3dpp,
m_pd3dDevice);
//т. е. при создании устройства ему передается обработчик окна фокуса

 

Пример FullscreenMode(18 Кб)

[downloads:11]

Прежде чем открывать пример из среды Delphi и компилировать Вам понадобится расположить в папке примера файлы D3DX81ab.dll и DXErr81ab.dll (их найдете в дистрибутиве игры "Ну, Погоди!" или в папке с исходным кодом, можно также в архиве с общим кодом)

Взять из дистрибутива игры "Ну, Погоди!" папку Media\texures

Взять из исходного кода игры "Ну, Погоди!" папку common находящуюся внутри папки projects\2d_games\NuPogodi\source

Только после этого пример будет нормально компилироваться и работать!!!

Об этом уже неоднократно упоминалось, а также написано внутри readme.txt приложенном к архиву данного примера, но еще раз напоминаю, чтобы не возникало вопросов.

 

имеет следующие особенности

TMainForm.InitD3DApp - данный метод вызывается при показе формы окна приложения однократно пока g_d3dApp = nil.

Внутри него происходит создание объекта g_d3dApp, создание окна для полноэкранного режима

Метод TD3DGameApp.Create_ - внутри данного метода лишь задаются размеры окна для структур

m_rcWindowBounds и m_rcWindowClient

и вызывается метод начальной инициализации сцены

Внутри TD3DGameApp.CreateDisplayObjects

m_d3dpp.hDeviceWindow := m_hWnd; //указывает на обработчик окна формы приложения

но при создании указывается обработчик окна полноэкранного режима

hr := pD3D.CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
m_hWndMain, D3DCREATE_HARDWARE_VERTEXPROCESSING,
m_d3dpp, m_pd3dDevice );

 

TD3DGameApp.SwitchDisplayModes

{...}

AdjustWindowForChange; //важный метод, если его не использовать (попробуйте закомментировать),

то сквозь изображение полноэкранного режима "проблескивают" элементы рабочего стола.

m_d3dpp.hDeviceWindow := m_hWnd; //указывает на обработчик окна формы приложения, все сообщения будут посылаться ему даже при полноэкранном режиме

m_pd3dDevice.Reset - работает корректно именно при верном использовании обработчиков окон в указателях, особенно важно, что при создании устройства был указан обработчик окна полноэкранного режима (попробуйте заменить на обработчик окна формы с расположенном на нём TPanel, что имеет место в нашем случае и данный метод сразу же будет давать ошибку во время попытки переключения в полноэкранный режим) - приложение просто будет закрываться в связи с ошибкой

 
TD3DGameApp.CheckForLostFullscreen - метод ForceWindowed и его реализация опущены для некоторого упрощения кода
 
FullScreenWndProc - оконная процедура полноэкранного режима, если хотите узнать почему в полноэкранном режиме нет курсора мыши и как его установить - загляните сюда. Здесь же видно по какому сообщению (клавише) осуществляется выход из полноэкранного режима
 

И еще напоследок ряд замечаний, которые не имеют прямого отношения к теме данного урока, но будут всё же интересны

TD3DGameApp.DrawGameView

метод

// Erase the screen
m_pd3dDevice.Clear( 0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,
FillColor, 1.0, 0 );

вызывается вне BeginScene ... EndScene

влияет ли это на производительность?

 

При попытке использовать код, выводящий изображение текстуры в примере SwitchScreenModes по аналогии с примером FullscreenMode не удается добиться такого же вида текстуры в рабочем окне, как в примере FullscreenMode. Почему?

 

 

Вот и сам пример SwitchScreenModes. (13 Кб)

[downloads:12]

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

 
[ответы на поставленные вопросы] - для самопроверки
 
[назад] [страница 2] [далее] [к содержанию]
 
 
     
     
     
     
подробнее

     
     
  Добро пожаловать в систему управления сайтом megainformatic cms !  
     
  [к содержанию] [назад] [далее]  
     
 

6)  Основы продвижения созданного сайта

 
     
 

Чтобы Ваш сайт стал известен пользователям, чтобы поисковые системы проиндексировали его и главное, чтобы Ваш сайт стал приносить Вам какую-то пользу - решать поставленные Вами бизнес-задачи, приносить материальную отдачу и многое другое.

Это и есть то, что именуют продвижением сайта.

 
     
 

Какие методы для этого существуют и как их применить ?

Вам нужно усвоить одну главную вещь - Ваш сайт станет популярным только если на него будут заходить как можно больше пользователей и на него будут ссылаться как можно больше других сайтов.

Эти две простые истины наверное известны каждому. Вопрос в том, как их правильно применить.

 
     
 

Известны следующие методы продвижения:

1) Регистрация сайта в основных поисковых системах - Google, Yandex, Rambler, Mail, Nigma и других - данный метод применяется однократно для вновь созданных сайтов, чтобы ускорить его индексацию поисковыми системами;

2) Поисковая оптимизация - для сайта выбирается набор ключевых фраз, по которым ведется оптимизация контента для улучшения результатов выдачи вашего сайта в поисковых запросах выбранных поисковых систем; Эта работа также должна проводиться на начальном этапе, т. к. впоследствии исправить допущенные грубые ошибки, приводящие к ухудшению положения сайта в результатах запросов, гораздо сложнее;

3) Регистрация в каталогах, размещение объявлений на электронных досках, реклама на форумах, участие в баннерных сетях, сетях обмена ссылками; Этот метод достаточно трудоемкий, но его можно и нужно применять как можно чаще как для вновь созданных, так и для уже более-менее известных сайтов;

4) Организация списков-рассылки. Данный способ вы сможете применить сами используя модуль mail-list.php. Вам нужно будет лишь постепенно сформировать базу данных пользователей вашего сайта и впоследствии рассылать им новости;

5) Повышение спроса на услуги сайта за счет улучшения качества и ассортимента предостовляемых продуктов и услуг. Этот пункт думаю достаточно понятен - чем больше, лучше, качественнее и полезнее информация, предоставляемая Вашим сайтом, тем больше вероятность повышения его популярности.

6) Продвижение сайта вне сети интернет. Этот метод является более трудоемким и дорогостоящим по сравнению с перечисленными выше методами. Он подразумевает публикацию в печатных изданиях, в СМИ и другие подобные способы. Эффект от применения этого способа может быть разным, всё зависит от Ваших возможностей и наличия хотя бы минимального начального продвижения по пунктам 1-5.

7) Дорвейные сети и автопродвижение. Этот способ частично перекликается со способом 3. А заключается он в следующем - вы создаете собственную сеть из множества сайтов, которые имеют перекрестные ссылки. Таким образом занимаясь продвижением каждого сайта в сети в отдельности вы получаете дополнительный выигрыш от автопродвижения сайтов, т. к. они ссылаются друг на друга. Этот метод также в какой-то степени требует большого опыта и специального инструментария. Но он также и достаточно перспективный.

 
     
  Возможно вы уже знаете и про другие способы, которые я забыл упомянуть, ну что ж, остается лишь пожелать вам удачи в деле создания и продвижения своего сайта !!!  
  [к содержанию] [назад] [далее]  
     
  Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2)  
     
  модель коммандного центраСкачать готовую модель вы можете кликнув по картинке.  
     
  Этот объемистый урок расскажет Вам как научиться создавать нечто подобное: всем известно, что вышла игра StarCraft 2 компании Blizzard. Об этой игре ходят легенды. Но не дожидаясь когда вам удастся засесть за игру, а также для того, чтобы пополнить свои навыки и умения попробуем вообразить себя "крутым дизайнером" (прямо как из Blizzard) и попробовать создать модель и текстуру для коммандного центра из StarCraft 2.  
     
 

Цели и задачи данного урока:

- познакомить читателя с профессиональным (или близким к этому) созданием моделей для игр в 3ds max 7 (или выше) на примере модели Коммандный Центр из StarCraft 2;

- показать как сделать для созданной модели текстурную развертку;

- используя средства Photoshop 8 (или выше) нарисовать текстуру;

В результате данного урока Вы получите модель готовую для внедрения в игру и узнаете, что создание моделей и текстур интересный и увлекательный процесс, если к этому правильно подойти!

Навыки полученные в уроке позволят Вам создавать модели и текстуры для своих игр ничуть не хуже чем в StarCraft 2 (а может даже лучше !), а также позволят Вам совершенствоваться дальше. И это самое главное!

 
     
  Итак, приступим!  
     
  Как научиться делать то, о чем не написано ни в одном справочнике или пособии по дизайну. О чём не расскажет матерый профи в области создания игр. (Может ему просто некогда?).  
     
  Один из шуточных законов гласит: Тот кто не умеет - учит, Кто умеет - работает, Кто не умеет ни учить ни работать - руководит.  
     
  Из этого следует, что те кто отлично умеют что-то делать - делают это. Им просто некогда, да и незачем делиться своими знаниями.  
     
  Как же быть нам, тем кто хочет научиться, но еще не совсем умеет? Попробуем разобраться.  
     
  Взгляните на этот скриншот (из игры StarCraft 2)  
     
  скриншот (из готовящейся игры StarCraft 2)  
     
  Красиво, ничего не скажешь... Видите в левом нижнем углу Коммандный Центр?  
     
  Коммандный Центр  
     
  Можно ли создать такой же, только свой? Можно! Вопрос только в том как к этому лучше подойти.  
     
  Лучше всего начать с создания модели. А картинка послужит нам как бы скетчем, по которому мы и осуществим весь цикл создания - от модели и текстуры до готового объекта.  
     
  Сначала расположим наш скетч более удобно - запустим Photoshop той версии которая у Вас есть (лучше конечно 8 или выше).  
     
  Перетащим данную картинку из Проводника в окно Photoshop, она и откроется.  
     
  В панели слоёв открывшаяся картинка содержит 1 заблокированный слой (Фон). Разблокируем его двойным щелчком по нему или созданием дубликата слоя - правая кнопка мыши по слою в панели слоев > Dublicate Layer (Дублировать слой).  
     
  разблокируем слой  
     
  Теперь ничто не мешает нам повернуть изображение Коммандного Центра более удобным образом - Edit > Transform > Rotate  
     
  вращаем наш скетч  
     
  Наведя курсор мыши на маленькие квадраты (захваты) появившиеся по краям изображения тянем за один из уголков (можно в левом верхнем углу изображения). О том что вращать можно будет свидетельствовать изменившийся курсор - курсор вращения.  
     
  вращаем на -49,2 градуса  
     
  Нажимаем галочку в панели свойств или Enter подтверждая тем самым наше действие.  
     
  Теперь нужно избавиться от перспективного искажения имеющего место в изображении (игровая камера снимала объект под углом).  
     
  Для этого используем Edit > Transform > Perspective  
     
  устранение перспективных искажений  
     
  На рисунке показано как расположить манипуляторы перспективного искажения.  
     
  Конечно это не устранит полностью первоначальное искажение, но все-таки улучшит внешний вид, а нам только этого и надо.  
     
  Единственное что еще можно сделать - это немного увеличить картинку, а то Коммандный Центр стал как-то немножечко мелковат - Edit > Transform > Scale  
     
  готовый к работе скетч  
     
  С помощью этих нехитрых манипуляций мы получили готовый к работе скетч, т.е. рисунок (зарисовку) - называйте как нравится - готовую для изучения и построения чего-то подобного.  
     
  Теперь, глядя на этот, готовый скетч нужно создать новое изображение и построить свой, более упрощенный скетч который подойдет для создания модели -  
     
  построение упрощенного скетча  
     
  Здесь представлены уже 2 вида нашего будущего Коммандного Центра - в проекциях сверху и сбоку, чего уже будет вполне достаточно для создания модели в 3ds max. Кроме того, в правом верхнем углу разместился оригинальный рисунок. Он тоже будет помогать в создании отдельных деталей, которые не были отражены в упрощенном скетче.  
     
  О том как собственно нарисовать сам упрощенный скетч можно узнать из других статей представленных на нашем сайте, в том числе из Уроков Photoshop.  
     
  Мы же переходим непосредственно к созданию модели. Запускаем 3ds max той версии которая у Вас есть (лучше 7 или выше).  
     
  [продолжение...]  
     
  уроки 3ds max  
     
     
     
megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 1,1991