Пример синтаксиса:
Точка вкода в приложение не main, а main_ce(), т.к. в разных системах в разных местах точка входа, например в андроид там нужно входит уже после инициализации приложения. Далее:
// подсовываем драйвер рендера и размер окна (размер окна игнорится на мобилках)
auto core = Ce::createCore(Ce::createDriver(), glm::vec2(800, 480));
// создаем сценку
auto scene = core->createScene();
// настраиваем параметры
scene->setPerspective(45, core->windowSize().x / core->windowSize().y, 1.0, 100.0);
// точка обзора (может быть INode, тогда этот view matrix игнорится и берется из INode, это как бы дефолтный обзор)
scene->setViewMatrix(glm::lookAt(glm::vec3(0, 0, -5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0)));
// загружаем аним модельку
std::shared_ptr<Ce::INode> node2 = core->loadNode("dwarf.xml");
node2->setParent(scene->rootNode()); // можно scene->rootNode()->addNode(node2);
node2->setPosition(glm::vec3(0, -0.5, 0));
node2->setScale(glm::vec3(0.03, 0.03, 0.03));
node2->setAnimation(0, 300, true, 10);
// свет, светом может быть любая нода, что самое крутое можно модельку заставить быть источником света
auto light = core->createPreparedNode(Ce::E_PN_CUBE);
Ce::SLightInfo lightInfo;
lightInfo.ambient = glm::vec4(0.0, 0.0, 0.0, 1.0);
lightInfo.diffuse = glm::vec4(1.0);
light->enableLighting(lightInfo);
light->setParent(scene->rootNode());
light->setPosition(glm::vec3(0, 0, -2));
light->setScale(glm::vec3(0.1, 0.1, 0.1));
core->start();
Код на pastebin
запилил нормал мапы из коробки, достаточно просто назначить текстуру нормалей на объект
Это конечно самый простой пример. Более сложный во вложении.
Подумал, надо в вершину запихать тангенсы и бинормали, чтобы нормал мапы быстрее считать, не нравится мне их производительность на мобилках.
https://bitbucket.org/pozitiffcat/clear_engine
оффтоп: блин когда запилят подсветку синтаксиса для c++