forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Clear Engine (Понятный движок) (http://forum.boolean.name/showthread.php?t=18702)

pozitiffcat 12.11.2013 00:20

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

Clear engine позиционирует себя, как легковесный, переносимый трехмерный движок для написания игр на языке c++. Прежде всего уделается внимание на легкое использование движка.
Движок имеет мало зависимостей сторонних библиотек, и поэтому может быть легко перенесен на другие платформы.

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

На данный момент компилируется под Windows, Linux, Mac OS X, iOS.
В альфа стадии умеет:
Шейдеры
Jpeg
Скелетная анимация
Встроенные шейдеры
Встроенное освещение
Делегаты для работы с объектами
Камеры

Не начинал еще писать доку.
Теоретически, уже что-то можно на нем делать.
В планах сделать билд систему, что бы было очень легко компилировать под различные системы, бинарный формат данных модели. Загрузка TGA, думаю других более сложных форматов не будет, скорей всего будет написан свой формат. Есть конвертер ms3d в формат движка с анимациями, но я забыл включить его в архив, кому надо зареквестите (все рвно никто пробывать не будет).
Шейдер для нормал мапов хочу включить из коробки.. ток надо бы оптимизировать.. на iphone4 3 кубика уже падает fps. Скелетка из 50ти костей в иерархии и 2к вершинами дает 20 фпс, если разместить из 10 штук одновременно (фрустума нет еще)

Хочу из движка сделать что нибудь легковесное и простое, подобного, бесплатного ничего не нашел...

На сайте есть скомпиленая демка для винды x64

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

Посмотреть видео:
Сайт движка: http://malcdevelop.org/

moka 12.11.2013 01:16

Ответ: Clear Engine (Понятный движок)
 
Молодцом! Много попыток, таки выйдет что-то.

Только сразу вопрос: почему XML?
Это же ужасно тяжеловесный формат, и читаемость в нём для 3д формата ну вообще не нужно.
Даже JSON и то лучше был бы, или ещё лучше - BSON.
Но XML - это весьма в прошлом тем более для такого типа данных..

Давай больше скринов и видео!

jimon 12.11.2013 01:34

Ответ: Clear Engine (Понятный движок)
 
Вложений: 1
вроде неплохо как для первого движка, правда довольно наивный подход к архитектуре

Цитата:

Хочу из движка сделать что нибудь легковесное и простое, подобного, бесплатного ничего не нашел...
попробуй выбросить наследование на данном этапе вообще, вместо ILoader + CJpegLoader сделать просто ImageLoader который уже сам поймет что это за изображение и как его загружать

интерфейс INode в принципе вроде-как компонентно-ориентированый, зачем ему тогда быть интерфейсом ? просто сделай его Node и пили туда компоненты в стиле mesh, sprite, sound, script и тд

IScene ? IMesh ? ISkeleton ?? ITexture ??? и что у тебя будет CScene, CFastScene, CVeryFastScene ?! :crazy: легковесное и простое оно не про ооп головного мозга, оно про YAGNI


HolyDel 12.11.2013 07:10

Ответ: Clear Engine (Понятный движок)
 
пример синтаксиса в студию?

Цитата:

думаю других более сложных форматов не будет
dds, ktx, нативные мобильные форматы

Цитата:

попробуй выбросить наследование на данном этапе вообще, вместо ILoader + CJpegLoader сделать просто ImageLoader который уже сам поймет что это за изображение и как его загружать
да ну. как минимум CTgaLoader у него точно будет. А потом может и еще тыща форматов.

Цитата:

IScene ? IMesh ? ISkeleton ?? ITexture ??? и что у тебя будет CScene, CFastScene, CVeryFastScene ?!
http://forum.boolean.name/showpost.p...8&postcount=30

pozitiffcat 12.11.2013 08:53

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270036)
вроде неплохо как для первого движка, правда довольно наивный подход к архитектуре


попробуй выбросить наследование на данном этапе вообще, вместо ILoader + CJpegLoader сделать просто ImageLoader который уже сам поймет что это за изображение и как его загружать

интерфейс INode в принципе вроде-как компонентно-ориентированый, зачем ему тогда быть интерфейсом ? просто сделай его Node и пили туда компоненты в стиле mesh, sprite, sound, script и тд

IScene ? IMesh ? ISkeleton ?? ITexture ??? и что у тебя будет CScene, CFastScene, CVeryFastScene ?! :crazy: легковесное и простое оно не про ооп головного мозга, оно про YAGNI


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

pozitiffcat 12.11.2013 08:54

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka (Сообщение 270034)
Молодцом! Много попыток, таки выйдет что-то.

Только сразу вопрос: почему XML?
Это же ужасно тяжеловесный формат, и читаемость в нём для 3д формата ну вообще не нужно.
Даже JSON и то лучше был бы, или ещё лучше - BSON.
Но XML - это весьма в прошлом тем более для такого типа данных..

Давай больше скринов и видео!

Иду по стопам Ogre3D так сказать )))
PS: насчет скринов, я хочу запилить няшную демо сценку в стиле HL2, правда моделер из мя никакой ))) и систему пост процессинга запилить надо для пущей няшности, пока что нечего показывать, разве что анимированного чувачка ))) Могу под ubuntu x64 собрать кому интересно, или вечером под мак ось, когда дома появлюсь...

pozitiffcat 12.11.2013 09:07

Ответ: Clear Engine (Понятный движок)
 
Вложений: 1
Пример синтаксиса:
Точка вкода в приложение не main, а main_ce(), т.к. в разных системах в разных местах точка входа, например в андроид там нужно входит уже после инициализации приложения. Далее:
PHP код:

// подсовываем драйвер рендера и размер окна (размер окна игнорится на мобилках)
auto core Ce::createCore(Ce::createDriver(), glm::vec2(800480));
// создаем сценку
auto scene core->createScene();
// настраиваем параметры
scene->setPerspective(45core->windowSize().core->windowSize().y1.0100.0);
// точка обзора (может быть INode, тогда этот view matrix игнорится и берется из INode, это как бы дефолтный обзор)
scene->setViewMatrix(glm::lookAt(glm::vec3(00, -5), glm::vec3(000), glm::vec3(010)));
// загружаем аним модельку
std::shared_ptr<Ce::INodenode2 core->loadNode("dwarf.xml");
node2->setParent(scene->rootNode()); // можно scene->rootNode()->addNode(node2);
node2->setPosition(glm::vec3(0, -0.50));
node2->setScale(glm::vec3(0.030.030.03));
node2->setAnimation(0300true10);
// свет, светом может быть любая нода, что самое крутое можно модельку заставить быть источником света
auto light core->createPreparedNode(Ce::E_PN_CUBE);
Ce::SLightInfo lightInfo;
lightInfo.ambient glm::vec4(0.00.00.01.0);
lightInfo.diffuse glm::vec4(1.0);
light->enableLighting(lightInfo);
light->setParent(scene->rootNode());
light->setPosition(glm::vec3(00, -2));
light->setScale(glm::vec3(0.10.10.1));
core->start(); 

Код на pastebin

запилил нормал мапы из коробки, достаточно просто назначить текстуру нормалей на объект

Это конечно самый простой пример. Более сложный во вложении.
Подумал, надо в вершину запихать тангенсы и бинормали, чтобы нормал мапы быстрее считать, не нравится мне их производительность на мобилках.
https://bitbucket.org/pozitiffcat/clear_engine

оффтоп: блин когда запилят подсветку синтаксиса для c++

Mr_F_ 12.11.2013 12:25

Ответ: Clear Engine (Понятный движок)
 
Цитата:

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

Цитата:

Встроенное освещение
как много источников света обрабатываешь?

Цитата:

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

Цитата:

Есть конвертер ms3d
кто юзает мс3д вообще? тебе нужна лёгкость использования - давай из major 3д пакетов экспорт, достаточно из FBX хотя бы.

Цитата:

scene->setViewMatrix
ну это движок же, всё таки нужна какая-то реализация камеры имхо, которой трансформ задаётся как обычной ноде, а не так. и получается камеру нельзя запарентить?

----
Цитата:

Ce::SLightInfo lightInfo;
glm::lookAt(glm::vec3(0, 0, -5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0))
ну и не по теме, просто интересно, неужели я единственный человек, который не любит писать много букв и называет классы короткими словами типа "Light", делает using namespace чтобы не перебивать его 150 раз и делает функции, принимающие сразу цифорки без троекратных "glm::vec3"? подобную многобуквенную хрень нередко вижу в чужом коде, а потом хвалятся что у них движок весит 5 мегабайт.

pozitiffcat 12.11.2013 12:59

Ответ: Clear Engine (Понятный движок)
 
Цитата:

проще байтики писать, чем громоздкий хмл. и грузить байтики проще.
xml проще руками поменять, например имя текстуры, а так да, байтики лучше.
Цитата:

как много источников света обрабатываешь?
из коробки один источник, но в шейдер заносятся бесконечное кол-во при рендере сцены, можно запилить потом чтоб ограничивал и включал только те, что рядом как в Огре
Цитата:

к тому же либы на всё это есть
хочу помаксимуму избавится от зависимостей, оставив лишь жизненно необходимые. (так же потом можно выпилить glm, но хз оправдано ли это)
Цитата:

кто юзает мс3д вообще? тебе нужна лёгкость использования - давай из major 3д пакетов экспорт, достаточно из FBX хотя бы.
ну я этим еще не занимался, естественно надо же )))
Код:

ну это движок же, всё таки нужна какая-то реализация камеры имхо
там можно задать ноду в качестве камеры

Насчет не по теме. Ну этому кому как удобней, мне больше нравится без using namespace...

Цитата:

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

Mr_F_ 12.11.2013 13:10

Ответ: Clear Engine (Понятный движок)
 
Цитата:

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

jimon 12.11.2013 13:55

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от HolyDel (Сообщение 270039)

ну дык, 2007 год, я после этого еще 6 лет движки писал, и понял что не в ооп счастье :crazy: мудрость она такая

pozitiffcat 12.11.2013 13:56

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270052)
ну вертексы руками менять точно никто не будет, наверное есть смысл тогда разделить описание материалов и геометрию.

Ну это потом запилится, пока так. Естественно я об этом подумал :rolleyes:

pozitiffcat 12.11.2013 13:58

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270055)
ну дык, 2007 год, я после этого еще 6 лет движки писал, и понял что не в ооп счастье :crazy: мудрость она такая

я разделил на интерфейсы, что бы скрыть реализацию, пилить pimpl не хочется, как то мне это костыльновато видится, да и pimp больше подходит для скрытия реализации объектов создаваемых на стеке. имхо

HolyDel 12.11.2013 14:11

Ответ: Clear Engine (Понятный движок)
 
Цитата:

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

pozitiffcat 12.11.2013 14:22

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от HolyDel (Сообщение 270058)
и к чему пришел щас?
я пока не нашел более удобный способ разделения интерфейсов и реализации.

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


Часовой пояс GMT +4, время: 11:46.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot