Войти
WarZesФорум

Пишу свой великий движок (комментарии) (5 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#60
20:26, 4 янв. 2012

норм ты таймер напиши а то 200 с лишним fps эт не хорошо так то


#61
20:30, 4 янв. 2012

это дебаг, запуск из студии и ноутбук.

#62
20:48, 4 янв. 2012

ну эт понятн

лан вообщем а так то супер желаю дописать до конца это чудо

#63
8:16, 5 янв. 2012

спс

#64
14:34, 16 янв. 2012

Я все еще пишу... И вообщем-то что-то уже более-менее готовое (для версии 0.1) имеется. Хотел сделать демку со сценой (ландшафт, небо, травка, деревья, домики набегают :) ), но столкнулся с кое-какими проблемами которые и решаю, так что пока только новая диаграмма либ:
FlowchartDiagram3 | Пишу свой великий движок (комментарии)

Напомню, зеленное - это статические либы, то есть отдельные части кода в виде отдельных проектов. Я конечно понимаю, вам больше интересует что там внутри этих либ... И я покажу в свое время, но сейчас такое дело - я все время все меняю и устоявшейся архитектуры еще нет... Да хотя бы вспомните, как выглядела первая диаграмма либ и какая она сейчас... Конечно кто-то скажет что это не правильно, что архитектура должна была быть проработана до написания проекта... И она была проработана, но я стремлюсь не к конечному результату а к самому процессу и делаю идеальный для себя движок:)

#65
18:44, 16 янв. 2012

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

Черт возьми - оно работает:) кстати то что я здесь называю статическими библиотеками (потому что они по своей природе таковы) в проектировании называется подсистемами или пакетами. Далее после определения пакетов уже начинают определять классы в каждом из них... Но обычно пакеты пропускают.

Как вы видите, у моего движка сейчас 20 с чем-то статичных либ. Когда я все это начинал, у меня был страх - что это не заработает, будет глючным, начнет тормозить. Страх этот появился потому что я не видел ни в одном движке или игре больше трех отдельных либ (типа большинство ошибаться не может:) ). Все страхи оказались беспочвенны... Да еще и оказалось что к примеру Crytek  делает точно также, гляньте CryEngine и вы увидите кучу либ (хотя они динамические). Я решил не делать 20 динамических либ - неудобно, да и кстати динамические влияют на производительность.
Также мне удалось добиться того что пользователю нужно линковать к проекту только Application.lib. Проблема с заголовками решается еще проще. Так что ленивые будут рады - им не придется прописывать сотни путей

Еще плюс - повышается скорость компиляции проекта, ведь работа обычно ведется над одним модулем и не нужно ждать когда весь движок соберется чтобы проверить что-нибудь

Есть и минус - нехилый вес дистрибутива - сейчас все либы занимают 400+ мб, в жатом виде 15 мб. Тогда как одна динамическая либа занимала бы всего 2 мб. Я думаю что можно здесь сделать. Один из вариантов - precomiled header, он уменьшает вес на 1/3, но пока я не хочу его вводить.. Возможно еще поможет unit cpp (или как-то так - когда создается один cpp и к нему линкуются все остальные) - но это также буду делать перед релизом. С другой стороны конечный проект похудел на 50 кб :) и сейчас exe файл а также application.dll вместе весят всего 2,89 МБ. Так что на конечного пользователя это не влияет.

Теперь о моих маленьких требованиях к пакетам. Оптимально чтобы в одной либе было 5-10 тысяч строк чистого кода. Если их больше то эта либа - кандидат на разделение на две или больше либ. Минимально - 1000 строк кода. Если меньше и в будущем больших изменений не предвидется то данную либу надо слить с другой.

#66
20:35, 16 янв. 2012

я правильно понимаю, что по картинке engine взаимодействует с dx, а dx с твоим render?

#67
21:10, 16 янв. 2012

>Еще плюс - повышается скорость компиляции проекта, ведь работа обычно ведется над одним модулем и не нужно ждать когда весь движок соберется чтобы проверить что-нибудь
CPP-файлы тоже не будут перекомпилироваться, если не изменять и заголовочники, которые они включает. Как у тебя работает программа после изменения заголовочного файла?

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

#68
21:29, 16 янв. 2012

war_zes
  Такой, может немного отвлеченный вопрос.
А почему все-таки ты решил писать движок, а не игру?
Ведь игра интереснее.

#69
0:14, 17 янв. 2012

war_zes
Можешь дать загрузчик ms3d и дать ссылку на программу где эти модели можно создавать?
Я сам пишу свой движок, но толька для OpenGL 2.1+ и OpenAL.
Помоги, пожалуйста.

#70
2:36, 17 янв. 2012

VIP_Artemka
> engine взаимодействует с dx, а dx с твоим render?
Стрелочки показывают вхождение а не использование или взаимодействие. То есть это не то что Engine использует рендер. Это означает что пользователь обращается к рендеру через Engine, а не напрямую. Вообще сейчас Engine имеет всего один класс Engine и удобно связывает другие пакеты с проектом пользователя. Также хочу сказать что я не собираюсь на ближайшие несколько лет думать о OpenGL. Только DirectX и Windows

gammaker
> CPP-файлы тоже не будут перекомпилироваться, если не изменять и заголовочники,
> которые они включает. Как у тебя работает программа после изменения
> заголовочного файла?
но я сейчас пишу движок, а значит изменяю. Полная перекомпиляция занимает 10-15 минут. Тогда как компиляция одной либы (даже полная) от силы минуту-две.

gammaker
> Придётся распространять движок в исходных кодах либо иметь несколько копию lib
> для каждого компилятора.
Сейчас оно  все равно не кросскомпиляторно. Используются всякие студийные плюшки. Потом да, для основных компиляторов будет свой дистрибутив... Да и остальных, помоему еще только MinGW, и возможно Intel C++ compiler (который я все одно не видел). Вообщем это не сложно и так даже лучше - пользователь качает только то что ему нужно... И всегда статические можно переделать в динамические (помним о том что только Windows) чтобы можно было в случае надобности использовать на специфичных компиляторах или других языках

gammaker
> Почему нельзя сделать единственную библиотеку?
Много кода, а еще Дейкстра в пушистых семидесятых сказал что надо делить код как можно сильнее, человеческий мозг не способен охватить его весь:) И как я уже сказал, это оказалось изобретением велосипеда... В проектировании эта система называется разделением системы на подсистемы/пакеты (конечно, это может быть не разделение на либы, но сам принцип аналогичен) И об важности этого процесса для крупных проектов написано у Макконелла в его Совершенном коде. И я не могу понять почему в опенсорс так не делают.... В коммерческих делают (CryEngine 15 динамических либ движка)

Renegade
> А почему все-таки ты решил писать движок, а не игру?
Для игры нужен движок:) Посмотрел я на другие, да и подумал - легче свой написать чем в них разобраться... Да и не пишу я с нуля (но и копипастом не занимаюсь):)
Игру оно может и веселей делать, да только пока есть кто-то кто решает все организационные проблемы... Но когда вместо кода игры начинаешь думать - как найти моделеров/художников, весь фан исчезает. Или в часовых колупаниях чужих игр на контент, как тут на гаймдеве советуют делать в начале чтобы потом команду привлечь. Это не фан


yarovoyevgenii
> ссылку на программу
milkshape

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

#71
2:52, 17 янв. 2012

По стрелочкам получается render входит в dx, а dx в engine. Т.е. из engine получаем доступ к dx, а из dx к render?

#72
3:05, 17 янв. 2012

VIP_Artemka
примерно так:) Engine является наивысшим уровнем. Далее уже фреймворк и уровень приложения

VIP_Artemka
> render входит в dx
под вхождением тут наследование:) То есть  оба dx унаследованы от render, а значит рендер в них входит. Я не вынес dx рендер на другой уровень чтобы не усложнять архитектуру... А кроме того фреймворк уровень является необязательным, значит на него выносить не стоит. Application отвечает за все приложение, так что на него тоже не стоило выносить... И еще раз Engine - это либа, чья цель объединить все остальные либы и этим облегчить компиляцию и юзабельность (когда пользователь работает с движком через одну либу а не тыщу других)
Кроме того dx 9 - это пережиток того что я еще не разобрался достаточно хорошо в dx 11 - он будет выброшен в будущем, поэтому я и не стал выносить их на новый уровень
Я только сейчас заметил что на схеме ошибка - FMOD и PhysX - нет таких либ у меня (это от старой схемы осталось - забыл поправить) а даже если бы и были, они должны поменяться местами с Sound и Physics

И да, это все не абстрактно, когда специфичный код (dx рендеры, physx, fmod) на общем уровне. Но я и не собирался делать очередного мультимонстра работающего даже на холодильниках, во-первых не потяну, во-вторых мне это не нужно, для этого у меня есть 2D Sapphire в котором я научился работать в 3D.

#73
8:19, 17 янв. 2012

war_zes
> Для игры нужен движок:) Посмотрел я на другие, да и подумал - легче свой
> написать чем в них разобраться...
  Пока ты пишешь движок, ты бы уже игру написал. Я вот сразу пишу игровой
код и если походу дела появляется потребность в новой фиче, то я ее встраиваю
в игру. Двига как такового нет, есть куча демок DX SDK откуда я беру кусочки
кода.
  И да, я видел готовые движки и в свое время пользовался конструктором игр,
да - это круто! Но, ИМХО, там куча возможностей которые для самой игры то, и не
нужны совсем (большую часть кода можно смело выбросить).

#74
8:41, 17 янв. 2012

Renegade
> Пока ты пишешь движок, ты бы уже игру написал. Я вот сразу пишу игровой
> код и если походу дела появляется потребность в новой фиче, то я ее встраиваю
> в игру. Двига как такового нет, есть куча демок DX SDK откуда я беру кусочки
> кода.
Плавали, знаем. Из четыре месяцев работы над битвами в руинах, три месяца ушли на обход глюков Огра, из которых один так и не был решен (который про экспорт - когда вместо вменяемой текстуры на модели было нечто из мятого стекла), а второй - тени и ландшафт.. То есть я эти три месяца не игру писал, а рылся в огре в поисках очередной недокументированной возможности обойти получившийся ужас

Renegade
> Двига как такового нет, есть куча демок DX SDK откуда я беру кусочки
> кода.
Но ведь движок это куча внутренних механизмов к игр не имеющих отношение (к примеру батч, или там отложенное освещение), если писать по ходу потребностей, то игру написать можно, но будет же тормозить

Страницы: 1 2 3 4 5 6 Следующая »
WarZesФорум

Тема в архиве.