Программирование игр для Windows. Советы профессионала
Автор: kotmatros255 от 8-07-2020, 07:07, Коментариев: 0
Категория: КНИГИ » ПРОГРАММИРОВАНИЕ
Название: Программирование игр для Windows. Советы профессионала
Автор: Андре Ламот
Издательство: Вильямс
Год: 2003
ISBN: 5-8459-0422-6
Формат: pdf
Страниц: 877
Размер: 14,1 Mb
Язык: Русский
Книга предназначена для читателей, интересующихся вопросами разработки игр в операционной системе Windows. В ней освещены разнообразные аспекты программирования игр — от азов программирования до серьезного рассмотрения различных компонентов DirectX, от простейших физических моделей до сложных вопросов искусственного интеллекта. Книга будет полезна как начинающим, так и профессиональным разработчикам игр для Windows, хотя определенные знания в области программирования (в частности, языка программирования C или C++), математики и физики существенно облегчат изучение материала.
Нашел ошибку? Есть жалоба? Жми!
Пожаловаться администрации
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
М.: Вильямс, 2004. — 1424 с. — ISBN 5-8459-0627-X
Данная книга представляет собой продолжение книги Андре Ламота Программирование игр для Windows. Советы профессионала и посвящена созданию трехмерных игр. В книге освещены различные аспекты разработки трехмерных игр, однако основное внимание уделяется вопросам программирования трехмерных игр — в частности, представления трехмерных объектов, их визуализации с учетом свойств материала объектов, освещения, перспективы, а также таким специфическим вопросам трехмерной визуализации, как создание различных визуальных спецэффектов и т. п. В книге также рассматриваются многие сопутствующие вопросы — создание и применение звуковых эффектов и музыкального сопровождения, использование различных форматов файлов и соответствующего инструментария.
Книга написана выдающимся специалистом в области программирования игр с многолетним стажем, и полезна как начинающим, так и профессиональным разработчикам игр для Windows. Однако следует учесть, что она рассчитана в первую очередь на опытного специалиста, владеющего языком программирования C++, а также имеющего определенную математическую подготовку. Хотя данная книга может рассматриваться как отдельное издание, желательно приступать к ней после ознакомления с упомянутой ранее книгой.
Оглавление.
Предисловие.
Об авторе.
О техническом редакторе.
Благодарности.
Введение.
Введение в программирование трехмерных игр.
Основы программирования трехмерных игр.
Краткий курс Windows и DirectX.
Виртуальный компьютер для программирования трехмерных игр.
Трехмерная математика и преобразования.
Запутанный мир математики.
Создание математической библиотеки.
Введение в трехмерную графику.
Визуализация трехмерных каркасных объектов.
Основы трехмерной визуализации.
Основы моделирования освещения и поверхностей тел.
Интерполяционные методы затенения и аффинное отображение текстур.
Отсечение в трехмерном пространстве.
Организация буфера глубины и видимость.
Секреты трехмерной визуализации.
Методы сложного текстурирования.
Алгоритмы разбиения пространства и определения видимости.
Освещение и тени.
Анимация, физическое моделирование и оптимизация.
Анимация, движение и обнаружение столкновений.
Технологии оптимизации.
Предметный указатель.
Обновлено 23.06.2022
Просмотров 2018
Tricks of the Windows Game Programming Gurus Second Edition
Книга предназначена для читателей, интересующихся вопросами разработки игр в операционной системе Windows. В ней освещены разнообразные аспекты программирования игр — от азов программирования до серьезного рассмотрения различных компонентов DirectX, от простейших физических моделей до сложных вопросов искусственного интеллекта. Книга будет полезна как начинающим, так и профессиональным разработчикам игр для Windows, хотя определенные знания в области программирования (в частности, языка программирования C или C++), математики и физики существенно облегчат изучение материала.
Автор: Andre LaMothe
Скачать (PDF)
Видео
Делаю РАБОЧИЕ ИГРЫ в PowerPoint, MS Word (2048)
Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8
Как Сделать Игру Без Программирования
С чего начать делать игры | Разработка для новичков
Делаю игру на ОЧЕНЬ СТАРОМ ноутбуке
Игра Gems Of War — PvP и новая неделя [Stream 7/2023]
КАК СДЕЛАТЬ ИГРУ НА C# + WinForms ЗА 30 МИНУТ? 👾 #1
ДУМ И ЗЕЛЬДА В ТАБЛИЦАХ! Игры в Microsoft Excel
Программирование на Java: создание игры Змейка. Часть 1.
Игры, которые обучат вас программированию
5 популярных игр и их языки программирования
Написал 3D Игру в Консоли!
Я пытался изучить программирование с нуля за 7 дней и вот что получилось в итоге
Windows 18! Microsoft, что ты сделала??!!
Игры для программистов, о которых вы наверняка не слышали. GeekBrains
Как сделать Flappy Bird на С++
ТОП 5 ИГР, которые учат программированию | ИГРЫ ДЛЯ ПРОГРАММИСТОВ
Как научиться программировать с нуля играя в игры. Java, JavaScript, C++, C#, Python, PHP, Ruby
Разработка игры на Python | Pygame. Урок #1
Учим Unity за 1 час! #От Профессионала
Книги для создания своего игрового движка?
Посоветуйте пожалуйста книги о создании своего игрового движка с нуля, или же посоветуйте книгу для создания графической библиотеки, или же подобные к нему литературу.
Если есть подобный вопрос с ответом, кинь пожалуйста на него ссылку.
-
Вопрос заданболее года назад
-
578 просмотров
Андре Ламот программирование игр для windows
lodev.org/cgtutor/raycasting.html
Потом смотри статьи, курсы, туториалы, доки, книги, посвященные OpenGL, OpenAL, разработки многопоточных приложений, открытые репозитории движков на Github, вот здесь хороший по компьютерной графике https://www.scratchapixel.com, про ai книга Ian Mullington, вообще, списку конца нет, движок — это программная система из ряда программных продуктов, поэтому либо строишь свой в основном из открытых библиотек, либо умираешь от старости не доделав до конца.
www.amazon.com/Game-Engine-Black-Book-Doom/dp/1987418433
А еще Фень Юань — программирование графики под windows
Пригласить эксперта
Бесперепестивняк. Может и слова такого не существует, поэтому 20 ошибок там простительны)
Игровой движок это сотня программистов с вышкой в математике. Никак не парень с тостера с банальными вопросами. Простите.
-
Показать ещё
Загружается…
05 февр. 2023, в 13:57
10000 руб./за проект
05 февр. 2023, в 12:13
20000 руб./за проект
05 февр. 2023, в 11:27
15000 руб./за проект
Минуточку внимания
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
//Sunday - Main.cpp #define WIN32_LEAN_AND_MEAN #define INITGUID #include <windows.h> #include <time.h> #include <ddraw.h> // DEFINES //////////////////////////////////////////////// #define WINDOW_CLASS_NAME "WINCLASS" #define WINDOW_TITLE "Graphics Console" #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 #define WINDOW_BPP 16 // bitdepth of window (8,16,24,32) // note: if windowed and not // fullscreen then bitdepth must // be same as system bitdepth // also if 8-bit the a pallete // is created and attached #define WINDOWED_APP 0 // 0 not windowed, 1 windowed #define MSG_ERROR MessageBox(NULL, "ERROR", "MSG_ERROR", MB_OK) #define _RGB16BIT565(r, g, b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11)) #define _RGB32BIT(a, r, g, b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24)) // PROTOTYPES ///////////////////////////////////////////// int Game_Init(void *parms=NULL); int Game_Shutdown(void *parms=NULL); int Game_Main(void *parms=NULL); // GLOBALS //////////////////////////////////////////////// LPDIRECTDRAW7 lpdd = NULL; LPDIRECTDRAWSURFACE7 lpddsprimary = NULL; LPDIRECTDRAWSURFACE7 lpddsback = NULL; DDSURFACEDESC2 ddsd ; HWND main_window_handle = NULL; // save the window handle HINSTANCE main_instance = NULL; // save the instance char buffer[256]; // used to print text int window_closed; // FUNCTIONS ////////////////////////////////////////////// void Plot16(int x, int y, int red, int green, int blue, UINT *buffer, int mempitch) { buffer[x+y*(mempitch >> 1)] = _RGB16BIT565(red, green, blue); } void Plot32(int x, int y, int alpha, int red, int green, int blue,UINT *buffer, int mempitch) { buffer[x+y*(mempitch >> 2)] = _RGB32BIT(alpha, red, green, blue); } int Game_Init(void *parms) { if(FAILED(DirectDrawCreateEx(NULL, (void**)&lpdd, IID_IDirectDraw7, NULL))) return(0); if(FAILED(lpdd -> SetCooperativeLevel(main_window_handle, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT))) return(0); if(FAILED(lpdd -> SetDisplayMode(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_BPP,0,0))) return(0); ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.dwBackBufferCount = 1; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX |DDSCAPS_FLIP; if(FAILED(lpdd -> CreateSurface(&ddsd, &lpddsprimary, NULL))) return(0); ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; if(FAILED(lpddsprimary -> GetAttachedSurface(&ddsd.ddsCaps, &lpddsback))) return(0); return(1); } int Game_Main(void *parms) { if(window_closed) return(0); if(GetAsyncKeyState(VK_ESCAPE)) { PostMessage(main_window_handle, WM_DESTROY,0,0); window_closed = 1; } ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); if(FAILED(lpddsprimary -> Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL))) return(0); UCHAR *back_buffer = (UCHAR *)ddsd.lpSurface; if (ddsd.lPitch == WINDOW_WIDTH) memset(back_buffer, 0, WINDOW_WIDTH*WINDOW_HEIGHT); else { UCHAR *dest_ptr = back_buffer; for (int y=0; y<WINDOW_HEIGHT; y++) { memset(dest_ptr,0,WINDOW_WIDTH); dest_ptr+=ddsd.lPitch; } } for(int i=0; i<500; i++) { int x=rand()%WINDOW_WIDTH; int y=rand()%WINDOW_HEIGHT; back_buffer[x+y*ddsd.lPitch] = _RGB16BIT565(255, 255, 255); } if(FAILED(lpddsprimary -> Unlock(NULL))) return(0); while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT))); Sleep(500); return(1); } int Game_Shutdown(void *parms) { if(lpddsback) { lpddsback -> Release(); lpddsback = NULL; } if(lpddsprimary) { lpddsprimary -> Release(); lpddsprimary = NULL; } if(lpdd) { lpdd -> Release(); lpdd = NULL; } return(1); } LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_CREATE: { return(0); } break; case WM_PAINT: { return(0); } break; case WM_DESTROY: { PostQuitMessage(0); return(0); } break; default:break; } return (DefWindowProc(hwnd, msg, wparam, lparam)); } // WINMAIN //////////////////////////////////////////////// int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,LPSTR lpcmdline, int nshowcmd) { WNDCLASSEX winclass1; HWND hwnd; MSG msg; srand(1); ZeroMemory(&winclass1, sizeof(winclass1)); winclass1.lpszClassName = WINDOW_CLASS_NAME; winclass1.lpfnWndProc = WindowProc; winclass1.cbSize = sizeof(WNDCLASSEX); winclass1.hInstance = hinstance; winclass1.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass1.hCursor = LoadCursor(NULL, IDC_ARROW); winclass1.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass1.hIconSm = LoadIcon(NULL, IDI_APPLICATION); winclass1.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; if(!RegisterClassEx(&winclass1)) return(MSG_ERROR); if (!(hwnd = CreateWindowEx(NULL, WINDOW_CLASS_NAME, WINDOW_TITLE, WS_POPUP | WS_VISIBLE,0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hinstance, NULL))) return(MSG_ERROR); main_window_handle = hwnd; main_instance = hinstance; Game_Init(); while(TRUE) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } Game_Main(); } Game_Shutdown(); return(msg.wParam); } |