Форум программистов, компьютерный форум, киберфорум
Игровые движки
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/307: Рейтинг темы: голосов - 307, средняя оценка - 4.64
 Аватар для NotGoodEnough
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404

Как написать свой игровой движок с нуля

17.06.2018, 11:36. Показов 57030. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно, тема надоевшая, но я поискал в интернете на эту тему и понял что в интернете(youtube, yandex, habr) нет ничего полезного, вернее оно есть, но без объяснений.

Сразу скажу что, C# я знаю больше чем C++, просьба отталкивать от этого.

Что я подразумеваю под словом 'с нуля'.
1. Нужно определиться с языком программирования. C++ или C#?
Если я напишу: "Мне нужен обоснованный ответ!", будет немного грубо.
По этому, желательно обосновать ответ и написать названия книг по выбранному языку.
Не нужно писать: вот C++ быстрее чем C#, пиши на C++ и т.д.
2. Какой фреймворк? (Если неправильно назвал поправьте)
OpenTK, GLFW и т.д. Источники, где можно поподробнее разобраться.
3. Что нужно знать в языке программирования что бы написать свой игровой движок?
Пример ответа: Нужно уметь пользоваться массивами, отладчиком, искать ошибки и т.д.
4. Ну и с чего стоит начать, после изучения языка.

Вроде всё изложил.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2018, 11:36
Ответы с готовыми решениями:

Написать свой движок с нуля
Как написать свой движок с нуля при помощью C++. Заранее спасибо.

Можно ли в Visual Basic написать свой игровой движок
Здравствуйте господа программисты!!!! Я хотел сделать свою игру, и для этого я искал разные движки для разработки игр в инете. И у...

Свой игровой движок
Я писал 3 раза игровой движок. Теперь предстоит четвертый. Подскажите, на чем лучшего его написать (используется VS 2017)? Добавлено...

16
 Аватар для vindast
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
21.06.2018, 02:25
Ответ на твой вопрос зависит от того что ты хочешь получить на выхлопе?
По тому что если тебе нужен CryBiteUnrealUnity 10K5000 то запросы одни, а если тебе двиг для майнкрафта то запросы другие.

Добавлено через 1 час 0 минут
Я предположу, что ты делаешь CryBiteUnrealUnity 10K5000.

С языком все просто, c# это по сути скриптовый язык. В C# есть встроенный менеджер памяти, что для риалтайма - зло.
В с++ есть возможность прямого управления памятью. У с++ есть шаблоны, что часто очень полезно. В остальном по сути братья близнецы. Хочется тебе с# бери его, если же не хочешь потом жалеть, то с++.

Те же фростбайты, анриалы, юнити и край энжины написаны на c/c++, сам сделай выводы.

Не по теме:

У шарпа вообще плюсов нет :), помогите их найти? Единственный аргумент в таких спорах что я слышал, это дот нет и куча библиотек, так ведь у с++ тоже их море, один qt если вспомнить, а в контексте разработки с нуля с# не о чем



Опять же, если ты будешь писать свой серьезный движ то использовать сторонние библиотеки не будешь, по тому что все будешь писать под свои запросы. По тому openTK тебе не нужен, тебе нужно что-то типа glfw+gluw, которые только лишь создают окно и импортируют функции api opengl (ты же на opengl смотришь?), но можешь и по хардкору #include <GL/gl.h> и самому импортировать функции и создавать окна.

Все что нужно знать об openGL есть тут.

Конкретно тебе нужно знать:
1.1) как создать окно
Первый самый простой этап.
2.1) ты должен узнать что такое шейдер, как его скомпилить на гпу, как его применить.
2.2) как создать vao (обязательно нужно разобраться как использовать несколько атрибутов), и как его выводить (рисовать), тут ты узнаешь что заходит на вход вершинному шейдеру и что выходит из фрагментного.

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

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

Вот от сюда будет начинаться что-то серьезное.
3.1) Нужно будет разобраться с тем что такое fbo, как его создавать, как его применять/чистить и как в него рендерить.
3.2) Зная что такое fbo, нужно будет в первый раз что то отрендерить в текстуру (тобишь в fbo), сделаешь тени.

Вот на этом моменте кончается 90% работы. Можешь начать с этого после изучения языка.




Потом ты еще должен будешь выбрать аудио апи аля OpenAl.

Что нужно знать о языке?
Само собой нужно уметь работать с массивами, циклами (for, while), блоками ветвлений (if/else, switch/case), структуры. Потом ты должен знать как алоцировать память динамически, аля new и delete, указатели ( не умные, а обычные, умные таковыми только называются).
Не плохо бы знать ооп (классы, наследование), опять же, перегрузка и таблицы виртуальных функций для риалтайма зло.

Самые важные вопросы ты не спросил. Это что нужно знать о том что нужно знать о программировании.
Так вот, знать нужно алгоритмы и патерны проектирования. Если с первым все ясно, то второе нужно по тому что иначе твой вдиж станет лапшой с такой скоростью что ты не заметишь.
2
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
23.06.2018, 16:38
Лучший ответ Сообщение было отмечено _lunar_ как решение

Решение

Цитата Сообщение от NotGoodEnough Посмотреть сообщение
1. Нужно определиться с языком программирования. C++ или C#?
С++ конечно же.
название вашей темы - как написать свой игровой движок с нуля.
какие тут могут быть ещё вопросы о выборе языка?
шарп не даст вам ничего, кроме врапперов (обёрток над низкоуровневыми API), а это сразу же потеря в производительности. Речь то всё таки об игровом движке, так что здесь как раз впору говорить о том, что C++ быстрее C#, точнее реализация графических api на плюсах быстрее, т.к. на этом языке вы общаетесь с железом почти на прямую.

Цитата Сообщение от NotGoodEnough Посмотреть сообщение
2. Какой фреймворк?
я бы посоветовал Vulkan API.
перспективный низкоуровневый API, с постоянными обновлениями.
поддерживает большое количество видеокарт и операционных систем (DirectX 12 тоже неплох, но привязан к ограниченному числу видеокарт и только Windows 10).
касаемо DirectX 10 и 11 - не вижу смысла писать на них, если есть 12. Рано или поздно, у всех будет стоять Windows 10 и у всех будут новые железки под капотом с необходимой поддержкой.
доисторический DirectX 9 я вообще не рассматриваю. С таким же успехом можно рекомендовать 7 или 8, а чё такого...
OpenGL тоже прошлый век, Vulkan со временем его вытеснит.
остальное я даже не считаю за графические API.

Цитата Сообщение от NotGoodEnough Посмотреть сообщение
3. Что нужно знать в языке программирования что бы написать свой игровой движок?
вы сами дали ответ, добавлю лишь про классы и векторы (а если вы ещё в Vulkan и векторы замените на AVX инструкции, то будет просто чумовая производительность).

Цитата Сообщение от NotGoodEnough Посмотреть сообщение
4. Ну и с чего стоит начать, после изучения языка.
начать писать свой SDK.
я тут набрасываю понемногу SDK на Vulkan, как только приведу всё в божеский вид, создам на форуме тему или блог с небольшими туториалами.

PS: так для затравочки, моя реализация вулкана, но не окончательная, я уже много чего переделал по другому, но как пример пойдет https://github.com/tesla707/In... Vulkan-API
3
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
27.06.2018, 11:49
Цитата Сообщение от NotGoodEnough Посмотреть сообщение
2. Какой фреймворк?
Если вам нравится C#, то я бы на вашем месте взял бы Unity. Движок написан на С++, для скриптинга используется C#. Движок поддерживает Vulkan.

Действительно, сейчас начинать изучать OpenGL нет особого смысла, потому что OpenGL в Mac и iOS недавно был объявлен deprecated. Это начала конца OpenGL. Я всё равно изучаю OpenGL, потому что есть актуальный WebGL, а WebGL это почти тоже самое что и OpenGL ES. WebGL можно использовать из языка TypeScript, который придумал тот же человек, который придумал C#. Поэтому C# и TypeScript очень похожи. Есть хорошая книга, как научиться делать свой движок на WebGL Build your own 2D Game Engine and Create Great Web Games. Игра на WebGL запускается в один клик на любой платформе. Опять же для веб тоже можно использовать: 2D фреймворк Phaser (он поддерживает TS) или 3D движок Babylon.js, который поддерживает TypeScript и даже написан на нём.
3
5 / 6 / 0
Регистрация: 23.09.2018
Сообщений: 39
07.10.2018, 09:41
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Действительно, сейчас начинать изучать OpenGL нет особого смысла, потому что OpenGL в Mac и iOS недавно был объявлен deprecated. Это начала конца OpenGL
чо за бред, скажи это всем владельцам андроид девайсов коих в разы больше
мультиплатформа (на пк, смартфоны, смарт TV, куча других устройств) это все еще - opengl в том или ином виде
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
06.11.2018, 15:35
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Действительно, сейчас начинать изучать OpenGL нет особого смысла, потому что OpenGL в Mac и iOS недавно был объявлен deprecated. Это начала конца OpenGL.
Я перегнул палку. Я считаю, что смысл изучать актуальный шейдерный OpenGL есть. Даже на Mac, скорее всего, OpenGL не выпилят, просто не будут обновлять, добавлять новые версии. Но по новостям от Khronos у меня впечатление, что Vulkan звучит чаще, чем OpenGL. Как будто Khronos переключилась на Vulkan и сосредоточила основные силы на Vulkan, а OpenGL отодвинула немного в сторону. Получается, что Vulkan идёт на смену OpenGL, чтобы его заменить в будущем на тех же iOS и Android. А с другой стороны OpenGL не должны выпилить полностью с каких-то устройств, по крайней мере, в ближайшее время. Я пока что сосредоточен на изучении OpenGL 3+ и WebGL 1.0 (и 2.0). В основном на OpenTK, потому что так проще изучать, так как можно добавлять GUI на WPF, создавать мини лаборатории по изучению. А так же WebGL, потому что тоже можно добавлять GUI элементы на HTML/CSS.

NotGoodEnough, Есть очень хорошая книга по введению в шейдеры: WebGL. Программирование трехмерной графики WebGL - это тоже самое что и OpenGL. Я её всегда всем советую. Я в восторге от этой книги. Примеры книги легко переводятся на C# и C++. Веб-приложения на WebGL доступны сразу на всех платформах: Mac, Window, Linux, Android и iOS.

Из этой книги тоже примеры можно легко переводить на C# и C++: Build your own 2D Game Engine and Create Great Web Games
1
 Аватар для NotGoodEnough
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
06.11.2018, 15:53  [ТС]
8Observer8, Спасибо
1
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
06.11.2018, 16:08
Пример, как рисовать треугольник с помощью OpenTK на OpenGL 3.1 в трёх проектах: WPF, WinForms и Console:
1
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
14.03.2019, 14:55
NotGoodEnough,

Те кто хочется писать движок не задаёт подобные вопросы без обид. )

На создание движка уходят годы жизни, можете ли вы себе такое позволить?
Лучше берите готовый движок: Unity, HGE и т.д. и делайте сразу игру.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
14.03.2019, 16:17
Цитата Сообщение от NotGoodEnough Посмотреть сообщение
Как написать свой игровой движок с нуля
Цитата Сообщение от NotGoodEnough Посмотреть сообщение
Сразу скажу что, C# я знаю больше чем C++, просьба отталкивать от этого.
I rewrite examples in OpenTK and modern OpenGL 3.1.
1
 Аватар для karrbonn
231 / 64 / 0
Регистрация: 08.01.2019
Сообщений: 391
Записей в блоге: 25
15.03.2019, 21:38
оно того не стоит. их уже достаточно.
побереги себя, жизнь прекрасна
1
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
16.03.2019, 12:51
NotGoodEnough,

Если делать, то выбирай между D3D и OpenGL:

Вот простой вводный урок (Delphi + D3D):

https://mirgames.ru/topics/42
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
26.09.2019, 11:02
Цитата Сообщение от NotGoodEnough Посмотреть сообщение
Как написать свой игровой движок с нуля
сдать тест (ну... тот, который вы недавно сдавали) на форуме хотя бы на 80% и перестать витать в облаках.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
26.09.2019, 11:48
Чтобы начать делать свой движок на OpenGL, нужно сразу начать делать очень простые игры на нём: змейка, арканойд, пакман и т.д. По мере получения знаний и навыков будут развиваться ваши простые игры и движок, становясь всё более сложными. Не даётся всё быстро, легко и само собой. Нужно трудиться, трудиться и трудиться и не сдаваться. Полюбите математику и дело пойдёт веселее.

Когда дойдёте до реализации скелетной анимации загруженной из Blender в Collada (.dae) формат, то рекомендую делать по этим видео урокам, лучшего примера я в сети не нашёл: OpenGL Animation Tutorials

OpenGL Skeletal Animation Tutorial #1

0
1 / 1 / 0
Регистрация: 26.10.2016
Сообщений: 75
24.01.2020, 14:29
Глянь тут
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
24.01.2020, 15:58
Судя по большому множеству крайних созданных тем и постов в профиле автора темы - для программирования игр он выбрал движок Unity и язык C#.
0
 Аватар для Steroid
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
25.01.2020, 12:01
Цитата Сообщение от ILinker Посмотреть сообщение
Те кто хочется писать движок не задаёт подобные вопросы без обид.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2020, 12:01
Помогаю со студенческими работами здесь

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

Стоит ли разрабатывать свой игровой движок
Скорее всего вопрос скинули уже в другую тему , но пока пользуюсь моментом большого онлайна в разделе С++ :D . У меня вопрос к опытным...

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

Написать свой движок
Всем привет !! Появилась такая идейка написать свой CMS не могли бы подсказать что для этого надо изучить и знать , пока я знаю HTML CSS...

Написать свой движок или воспользоваться существующим?
Доброго времени суток, уважаемые форумчане! Работаю в игровом движке Unity3D уже полтора года. Изучил его сверху до низу. Также,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru