![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
php |
|
||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.2.2003 Репутация: 3 Всего: 3 |
Программирование игрового движка GR-Engine.
Автор: php (Танцер Максим aka Verg) Введение. Здравствуйте друзья! Представляю вашему вниманию свой первый коллективный проект посвящённый циклу статей по разработке и программированию игрового движка. Первый цикл статей будет предназначен в основном для начинающей аудитории для тех кто ещё не умеет программировать, но уже хочет быстро начать "делать свою игру" без каких-либо лишних заморочек. Второй и последующие циклы будут описывать методы и структуру движка и будет уже предназначен для более профессиональной аудитории. В приведённых статьях будет взят примером игровой движок GreenRay Engine (впоследствии будет называться сокращенно GRE) моей собственной разработки, далее он будет выкладываться блоками всё в новых и новых статьях (всё будет полностью открытым кодом - OpenSource, никаких вызовов из библиотек, что как правило присуще коммерческим версиям движков), так что можно будет его обсуждать и коллективно его дорабатывать, вносить изменения и дополнения, можно даже критиковать, только не очень сильно, т.к это всё делается и приводится в качестве примера, и я сам пока не являюсь профессиональным программистом в области программирования 3D и буду учиться вместе с вами. Примечание! Сразу стоит оговориться разработка движка будет вестись в среде Visual Studio 2005 (v8.0) в связке C++ и DirectX 9.0c и будут рассматриваться аспекты связанные только с разработкой и программированием GRE, создание моделей, текстур и прочее в данных статьях рассматриваться не будут этим занимаются другие разработчики из нашей команды, так, что все вопросы связанные с моделированием или Photoshop будут адресовываться именно им (Master Lucky и Zerg). Все обсуждения, дополнения, критику, отловленные баги (а они будут ![]() предлагаю вести в отдельных топиках, а затем дополненную и обработанную информацию я буду дополнять в самих статьях (пока так, а потом посмотрим как далее пойдёт) Так что все желающие прошу присоединяться!!! ![]() Итак начнём: Часть 1. Подготовка к разработке. 1.1. Описание возможности движка. Сначала опишем, что уже включает и умеет сам движок GRE версии 3.0 (версию 2.0 разбирать не будем, т.к изначально он разрабатывался на Delphi): 1. Поддержка довольно большого кол-ва полигонов (максимально тестируемое пока было 300 тыс. полигонов при этом fps (Frames Per Second) - кол-во кадров в секунду) даже не менялось, в принципе я считаю, что при таком кол-ве можно смоделировать неплохой по размерам городской квартальчик (игру GTA (первая часть) в расчёт не берём каково там кол-во полигонов было я не знаю!) 2. Поддержка шейдеров версии 2.0 и 3.0 (освещение по Фонгу) 3. Используется уже готовый физический движок от NVidia PhysX (ранее принадлежал Ageia PhysX а до этого вообще был платный и назывался Novodex до сих пор многие операторы и процедуры начинаются с аббревиатуры Nx, но об этом позже когда будем разбирать сам физический движок) 4. Поддержка аудио библиотек и воспроизведение mp3 5. Управление и камера от первого лица с использованием DirectInput 6. Небольшой пользовательский "интерфейсик" с полупрозрачными окнами, и вырезанием окон различной формы по маске одного цвета (естественно слово "окно" здесь должно звучать утрировано, т.к никаких окон в 3D не существует их нужно эмулировать самому, обычно это отрисовка полигона во ViewPorte или некоторые применяют Sprites, я выбрал отрисовку полигона). Примечание! Полигон - это весьма абстрактное понятие, обычно служит для визуализации 3D объекта в пространстве и являются составным обычно состоит из треугольников, соответственно сам треугольник состоит из 3х вершин, затем 3D Render объединяет эти вершины в результате на экране мы видим "цельный" треугольник залитый так сказать пикселями (точками) одного или более цветами, на пиксельном уровне уже обычно работают через шейдеры (ретушь, закраска), (в принципе используя шейдеры полигон можно закрасить и разными цветами) о шейдерах будем рассказывать позже. 7. Отрисовка небесного куба – SkyBox. Создание иллюзии большого пространства, как бы общее окружение облака, горы и прочее.. (позже попробуем разобраться с весьма интересной технологией 3D SkyBox суть его заключается в проецировании уменьшенной фоновой декорации с использованием уменьшенных 3D моделей в реальную сцену окружения, при помощи специальной проецирующей камеры, в рез-те чего создаётся иллюзия огромнейших игровых пространств или больших возвышающихся объектов с применением относительно малого кол-ва полигонов, данная технология впервые была реализована разработчиками в игре Half-Life 2) 1.2. Самое начало.. Далее, что следует разобрать это структуру игрового движка, т.е из чего он состоит и с чего начинает программист взявшись за его разработку. Примечание! Вообще данный раздел содержит пример простейшего создания проекта в среде разработки Visual Studio и предназначен для самых самых новичков, тех кто вообще ничего не смыслит в программировании и считаю, что по приведённому здесь материалу с иллюстрациями в два счёта можно создать новый проект, единственное требование это наличие всех необходимых материалов и средств для разработки – это Visual Studio, DirectX SDK 9.0c и NVidia PhysX.. Итак, приступим: 1) Для начала устанавливаем среду Visual Studio 2005 (у кого нет желательно "приобрести", также подойдёт и более новая версия VS 2008): ![]() Убираем всякую лишнюю "лабуду" в то время как программа установки спросит какие компоненты нужно установить, оставляем только то, что указано на рисунке ниже: ![]() Примечание ! Maintenance Mode у меня потому, что Visual Studio на момент написания статьи уже было установлено на моём компьютере, у вас может быть и по другому. Далее после того как завершится установка Visual Studio устанавливаем DirectX SDK. 2) Устанавливаем DirectX 9.0 (я пока использую версию DirectX 9.0c April 2005, т.к более устойчивая да и менее глючная (в процессе разработки движка в более новых версиях были выявлены некоторые баги) но в последствии придётся всё же использовать новую версию DX если планируется двигаться дальше вместе с прогрессом и осваивать DX 10 ![]() ![]() ![]() 3) Скачиваем с сайта NVidia физический движок PhysX и устанавливаем его: Сначала желательно установить так называемое системное программное обеспечение необходимое для нормального функционирования физического движка для этого придётся скачать файл под названием PhysX_8.10.13_SystemSoftware.exe и установить его: ![]() После этого скачиваем файл PhysX_2.8.1_SDK_Core.msi (это PhysX SDK собственной персоной) и устанавливаем его: ![]() 4) Создаём новый проект, для этого запускаем Visual Studio и заходим в меню File->New->Project… как показано на рисунке ниже: ![]() В появившемся окне выбираем Project types (тип проекта) – General, Templates (шаблоны) – Empty Project, Name (имя проекта) – GRDebugger, Location (месторасположение папки с проектом) – выбираем любое нажав на кнопку Browse (у меня GreenRay), убираем галочку с Create directory for solution, короче говоря делаем всё в точности как показано на рисунке ниже: ![]() Все теперь мы создали совершенно новый пустой проект под названием GRDebugger (имя файла проекта называется GRDebugger.sln этот sln – файл сокращённо от Solution является базовым запустив его по клику мыши мы тут же мгновенно запустим наш проект для отладки и компоновки). Всё поехали дальше.. 5) Прописываем пути для заголовочных файлов и библиотек: Данная операция необходима для того, чтобы среда Visual Studio понимала и знала во первых где находится само DirectX SDK (SDK – Software Developers Kit) ну и соответственно где находится необходимый для работы DirectX-овский "бутор" это различные заголовочные header (*.h) и *.cpp (C++) файлы, все вызовы идут через них и основным промежуточным звеном является либы (*.lib файлы) это двоичные файлы необходимые для взаимодействия между API-кодом нашей программы и ядром DirectX (Сами файлы ядра находятся в папке Windows\System32 в виде динамических библиотек и имеют имена типа d3d9.dll, d3dx9_36.dll и др. разные имена. Код данных библиотек не доступен никому (кроме самой компании Мелкософт конечно которая их и разрабатывает), мы можем лишь использовать или вызывать из них необходимые нам функции, но не смотреть, а тем более редактировать их, это относится не только к DirectX SDK, но и к PhysX SDK тоже да и вообще к любому виду SDK. Как прописывать подобные библиотеки будет описано ниже в п.7) Заходим в меню Tools->Options ![]() В появившемся окне слева в списке раскрываем дерево Projects and Solutions и выбираем VC++Directories, затем сверху из выпадающего списка Show directories for: необходимо выбрать Library files здесь как раз и будет прописан путь к нашим либам для этого нажимаем на пустом месте мышью где находятся другие прописанные пути необходимые среде Visual Studio, и нажимаем на кнопку с троеточием и выбираем путь к папке с либами, у меня по умолчанию путь: C:\Program Files\Microsoft DirectX 9.0 SDK (April 2005)\Lib\x86 У вас путь может быть другой в зависимости от версии установленного SDK, обычно по умолчанию он устанавливается в Program Files. Важно! Данный путь должен быть прописан в самом верху списка т.е до списка уже имеющихся там путей, для этого выделяем наш прописанный путь мышью затем нажатием на стрелку вверх перемещаем данный путь в самый верх списка, если этого не сделать то это будет вызывать ошибку во время компиляции проекта. Смотрим рисунок ниже: ![]() Примечание ! Иногда возникает ситуация когда программа установки DirectX SDK автоматически находит и сама прописывает пути в среде Visual Studio их нужно удалить и всё равно прописать или указать вручную, будьте внимательны это очень важный момент !!! Примечание ! Если заметить, то выше был указан путь к 32х разрядным версиям библиотек, но счастливые обладатели 64х разрядных систем могут указать путь и к 64х разрядным версиям библиотек !! Путь тогда будет выглядеть уже следующим образом: C:\Program Files\Microsoft DirectX 9.0 SDK (April 2005)\Lib\x64 Также аналогичным образом прописываем пути к заголовочным (*h – файлам и *cpp), выбираем из выпадающего списка под названием Show directories for: Include files и прописываем или указываем путь: C:\Program Files\Microsoft DirectX 9.0 SDK (April 2005)\Include ![]() И нажимаем ОК Добавлено @ 14:12 6) Прописываем пути для заголовочных файлов и библиотек PhysX SDK: Аналогичным образом как описано выше прописываем пути к PhysX SDK для Library files Путь будет выглядеть следующим образом: C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\lib\Win32 Для Include files будет несколько путей: C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Cooking\include C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Foundation\include C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\NxCharacter\include C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Physics\include C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Physics\include\cloth C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Physics\include\fluids C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\Physics\include\softbody C:\Program Files\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.1\SDKs\PhysXLoader\include ![]() Нажимаем кнопку ОК. Всё PhysX SDK прописан.. 7) Прописываем необходимые Libraries (Lib-библиотеки): Это необходимо для дальнейшей компиляции и разработки самого движка, поэтому пропишем их все и сразу, чтоб в дальнейшем к ним не возвращаться и не акцентировать на них своё внимание, для этого заходим в меню Project->GRDebugger Properties… или нажимаем комбинацию клавиш Alt+F7 ![]() В появившемся окне в раскрывающемся "дереве" выбираем Configuration Properties->Linker->Input далее нажимаем мышью на пункте Additional Dependencies в поле появится кнопка с троеточием для выбора подключаемых библиотек см. рисунок ниже: ![]() В окне Additional Dependencies прописываем через пробел или нажимаем Enter после каждой библиотеки: Список необходимых библиотек: d3d9.lib d3dx9.lib d3dx9d.lib d3dxof.lib dinput.lib dinput8.lib dxguid.lib winmm.lib dsound.lib strmiids.lib PhysXLoader.lib ![]() После того как все либы (*.lib) прописаны нажимаем OK. В принципе библиотеки можно было бы прописать и в теле программы, используя конструкции типа:
Я выбрал способ непосредственной интеграции библиотек в "тело" проекта. Теперь, что касается strmiids.lib остутствие её будет вызывать ошибку после процесса компиляции данная либа не прилагается в поставке DirectX SDK, её можно взять из файла: Sound_Modules.rar в самом низу статьи. После, того как вы скачаете этот файл его нужно разархивировать в папку: C:\GreenRay\GRDebugger\Sound_Modules\Lib Этот lib-файл будет необходим нам в будущем во время реализации функции проигрывания mp3-файлов в движке, также нужно скачать раздел Common для работы со звуком он частично взят из раздела DirectShow (были взяты только файлы необходимые для работы с mp3), находится в том же файле: Sound_Modules.rar Раздел Common нужно разархивировать в папку: C:\GreenRay\GRDebugger\Sound_Modules\Common Теперь нужно прилинковать эти файлы к среде Visual Studio, делаем, это точностью также как мы поступали с DirectX SDK и PhysX SDK. Заходим в меню Tools->Options, в появившемся окне Options из списка слева раскрываем Projects and Solutions и выбрать VC++Directories, далее из выпадающего списка Show directories for: выбираем Library files и прописываем путь куда мы ранее разархивировали файл strmiids.lib, он должен быть в папке C:\GreenRay\GRDebugger\Sound_Modules\Lib ![]() Дальше прописываем путь к ранее скачанной папке Common, аналогично только в выпадающем списке Show directories for: выбираем Include files: и прописываем путь C:\GreenRay\GRDebugger\Sound_Modules\Common ![]() Нажимаем кнопку ОК. Всё все необходимые либы у нас есть и прописаны. Часть 2. Проектирование игрового движка. 2.1. Создание игрового полотна. Под таким страшным названием скрывается обычное создание виндового (Windows) окна, которое будет служить "подложкой" для вывода и отрисовки трёхмерного пространства и всей графики и игровой сцены в целом. 1) Сначала создадим файл Form_Layer.cpp (в принципе название может быть и любое другое, на ваше усмотрение, но всё же советую создавать все модули с названиями как у меня, иначе впоследствии потеряем все связки, да и вообще потом получится "каша" особенно в разделе #include я буду приводить код с одним названием модуля, а у вас будет называться по другому, в прочем ваше дело ![]() Для этого в "дереве" нашего проекта выбираем Source Files и нажимаем на нём правой кнопкой мыши, далее из выпадающего меню выбираем Add->New Item… ![]() В появившемся окне New Item в колонке Categories: выбираем пункт Code, в Templates выбираем C++ File (.cpp), в строке Name: прописываем имя файла Form_Layer, Создадим папку под названием Engine_Modules где будут храниться модули и исходные коды самого движка, так удобнее, для этого заходим в папку где находится наш ранее созданный проект, она должна быть по пути C:\GreenRay\GRDebugger\ и в ней создаём папку Engine_Modules, затем возвращаемся к Visual Studio в строке Location: указываем местоположение где будет находиться этот файл. Необходимо, чтобы он создался в папке Engine_Modules поэтому в строке Location: будет путь C:\GreenRay\GRDebugger\Engine_Modules см. рисунок ниже: ![]() Всё нажимаем кнопку Add Теперь таким же образом нужно создать заголовочный Header File (.h), для этого также в "дереве" проекта нажимаем правой кнопкой на Header Files и выбираем Add->New Item.. В появившемся окне New Item в колонке Categories: выбираем пункт Code, в Templates выбираем Header File (.h), в строке Name: также прописываем имя файла Form_Layer, Location: остаётся тот же без изменений C:\GreenRay\GRDebugger\Engine_Modules Всё снова нажимаем кнопку Add. У нас появилось в "дереве" нашего проекта два файла – файл содержащий код .cpp и заголовочный файл .h содержащий вызовы процедур или функций и прочие параметры необходимые для работы всего проекта в целом. Но для нормального взаимодействия между файлом кода .cpp и .h его нужно прописать в среде Visual Studio, тут ничего нового заходим в меню Tools->Options в окне Options из списка выбираем Project and Solutions->VC++Directories и в выпадающем списке Show directories for: выбираем Include files и добавляем туда путь C:\GreenRay\GRDebugger\Engine_Modules ![]() Нажимаем ОК, файлы прилинкованы к проекту. Всё вся эта канитель завершена, небось уже поднадоела вся эта процедура по собиранию и компоновке движка ? ![]() Ок теперь всё скомпоновано, среда Visual Studio настроена, и можно начинать полноценное программирование.. 2) Создание полотна для вывода графики. Возвращаемся к "дереву" нашего проекта, делаем двойной щелчок мыши на файле Form_Layer.cpp перед нами появится пустой экран где можно вводить код. Вот вам домашнее задание: Необходимо создать окно на Win API, и продумать методы и процедуры инициализации Direct3D, определить, какие возможности поддерживает ваша видеокарта…. Шутка ![]() Копируем и вставляем этот код в ваше пустое окно файла Form_Layer.cpp:
Теперь делаем двойной щелчок мыши в "дереве" проекта на файле Form_Layer.h Код у него будет следующим:
Не забываем после этого нажать кнопку сохранить, пробуем скомпилировать проект, нажав на зелёную стрелку вверху окна Visual Studio: ![]() Если процесс компиляции завершился ошибкой то внизу окна рабочей среды выводится окно отладки содержащее информацию об ошибке, где можно отладить или устранить причину ошибки, двойным кликом мыши по надписи с ошибкой среда программирования как правило позиционирует и устанавливает курсор на участке кода вызвавшего эту ошибку, обычно она выводится в окне Output: ![]() Если же процесс компиляции прошёл нормально, то перед нами должно появиться окно как на рисунке представленном ниже: ![]() Поздравляю вы совершили первый шаг по созданию вашего игрового движка. Двигаемся дальше.. 3) Инициализируем Direct3D: В "дереве" нашего проекта нажимаем правой кнопкой мыши на Header Files в появившемся меню выбираем Add->New Item далее в окне Categories: Выбираем категорию Code, в окне Templates: выбираем Header File (.h), далее в поле Name: вводим GR_Engine, а в поле Location: указываем путь к папке C:\GreenRay\GRDebugger\Engine_Modules В общем выполняем все те же действия, что мы и делали ранее когда создавали файл модуля Form_Layer, кто уже забыл читаем Часть 2 п.2.1. Далее снова в "дереве" нашего проекта нажимаем правой кнопкой мыши уже на Source Files в появившемся меню выбираем Add->New Item далее в окне Categories: Выбираем категорию Code, в окне Templates: выбираем С++ File (.сpp), далее в поле Name: вводим GR_Engine, а в поле Location: указываем путь к папке C:\GreenRay\GRDebugger\Engine_Modules Всё теперь в "дереве" нашего проекта к существующим Form_Layer.h и Form_Layer.cpp добавилось ещё два файла под названием GR_Engine.h и GR_Engine.cpp соответственно. Делаем двойной щелчок в "дереве" проекта на файле Form_Layer.h, стираем у него всё содержимое и меняем на это:
Потом делаем двойной щелчок на файле Form_Layer.cpp также удаляем всё его содержимое и меняем на это:
Тут же быстренько нажимаем на GR_Engine.h и вставляем это:
Это сообщение отредактировал(а) php - 5.9.2014, 07:07 --------------------
Джедаи не пройдут.. |
||||||||||||
|
|||||||||||||
php |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.2.2003 Репутация: 3 Всего: 3 |
Теперь снова нажимаем на GR_Engine.cpp и вставляем следующий код:
Не забываем сохраниться, затем компилируем наш проект, в итоге должно появиться уже не белое как ранее, а чёрное окно как на рисунке: ![]() Это говорит, что наше Direct3D устройство нормально создалось и инициализировалось, Так как происходит очистка заднего буфера, то экран становится чёрным, в принципе можно "поиграться" с цветом заднего буфера, его цвет задаётся в строке:
В параметре: D3DCOLOR_XRGB(0,0,0) – это RGB палитра, так, что к примеру выставление параметра D3DCOLOR_XRGB(255,0,0) приведёт к заливке экрана красным цветом, величина 255 это интенсивность цвета и лежит в пределах от 0..255. Всё! заготовка ("болванка" так сказать) нашего игрового движка полностью готова, на её основе можно полноценно дальше создавать игру, добавляя все новые и новые возможности. В последующих частях мы продолжим разбирать движок GRE, "прикрутим" к нему игровую камеру, загрузим высокополигональную модель, добавим освещение и SkyBox. Продолжение следует.. _________________________________________________________________________ © Digital Dreams Development Inc., 2009 (С) GR-Engine Technical Documentation. Любая публикация изложенного материала только с разрешения автора. Это сообщение отредактировал(а) php - 5.9.2014, 07:11 --------------------
Джедаи не пройдут.. |
||||
|
|||||
net968 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 13.2.2009 Репутация: нет Всего: нет |
жду с нетерпением продолжения.Респект тебе
![]() |
|||
|
||||
LVI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 25.3.2009 Репутация: нет Всего: нет |
В последней версии Microsoft DirectX SDK нет библиотнки "dinput.lib" осталась только "dinput8.lib",
поэтому для нормальной компиляции ее нужно убрать из списка добавляемых библиотек. |
|||
|
||||
php |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.2.2003 Репутация: 3 Всего: 3 |
Ок спасибо за поправку!
--------------------
Джедаи не пройдут.. |
|||
|
||||
pirat77 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 10.11.2008 Репутация: нет Всего: нет |
Спасибо за урок
![]() ![]() |
|||
|
||||
ISergeyN |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 11.10.2008 Где: Україна Репутация: нет Всего: 2 |
||||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
php, молоток, неплохо расписал
![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Master Lucky |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 22.1.2008 Где: Торонто, Канада Репутация: нет Всего: нет |
Макс, клёва, продолжай в том же духе! Такими темпами скоро мы с тобой уже и игрушку свою забабахаем!
![]() Добавлено через 3 минуты
А ты попробуй без комментов в коде разобраться...... |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
Каждый день ![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
ISergeyN |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 11.10.2008 Где: Україна Репутация: нет Всего: 2 |
Вот это странный код
|
|||
|
||||
php |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.2.2003 Репутация: 3 Всего: 3 |
Цитата:
Вот это странный код код C++ 1: 2: 3: 4: 5: 6: 7: 8: if (m_pDirect3D==NULL)//if (!m_pDirect3D) { if (m_pDirect3D != NULL) //это зачем ? эсли словие ни когда не сработает! m_pDirect3D->Release(); // MessageBoxA(NULL,"GR_Engine.cpp: Failed To Create Direct3D Interface..", "GreenRay Engine Error",MB_SYSTEMMODAL|MB_ICONERROR); m_pResult = E_FAIL; } ![]() ISergeyN Вы пред тем что до этого идет хоть удосужились прочитать? Добавлено через 13 минут и 52 секунды Master Lucky, да я соббсно могу код вообще без комментариев выкладывать мне же легче будет, но смысл тогда всего этого и этой затеи вообще?, так что ваше замечание абсолютно верно - поддерживаю! --------------------
Джедаи не пройдут.. |
|||
|
||||
ISergeyN |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 11.10.2008 Где: Україна Репутация: нет Всего: 2 |
Та вроде нет.
|
||||
|
|||||
php |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.2.2003 Репутация: 3 Всего: 3 |
А вы уверены, что в результате ошибки функция Direct3DCreate9(D3D_SDK_VERSION) вернёт
значение NULL я лично не уверен! --------------------
Джедаи не пройдут.. |
|||
|
||||
ISergeyN |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 11.10.2008 Где: Україна Репутация: нет Всего: 2 |
Уверен. В справке по DirectX
|
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |