forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   C3D Engine (http://forum.boolean.name/showthread.php?t=16433)

pozitiffcat 17.07.2012 20:14

Ответ: C3D Engine
 
Что такое подмапленые может я так и делаю...

HolyDel 17.07.2012 20:22

Ответ: C3D Engine
 
http://forum.boolean.name/showthread.php?t=16880

pozitiffcat 24.07.2012 15:48

Ответ: C3D Engine
 
Сделал визард для эклипса (как отдельное приложение, проще поддерживать). Генерирует готовый проект, который рисует пустую сцену. Программисту остается лишь добавлять код. Сразу либы кладет куда надо и т.д. со стандартным функционалом визардов эклипса особо не развернешься без костылей

pozitiffcat 24.07.2012 17:01

Ответ: C3D Engine
 
Добавил некоторые вещи в TODO, думаю выложу бету, когда закончу с документированием. Сейчас занимаюсь документированием. Выложу бинарники библиотек к студии и мастер к эклипсу. Бинарники для андроида будут идти с мастером. Эклипс должен быть настроен на андроид сдк, и установлен ADT плагин

pozitiffcat 26.07.2012 20:39

Ответ: C3D Engine
 
Запилил динамические тени от одного источника освещения

pozitiffcat 27.07.2012 11:44

Ответ: C3D Engine
 
Добавил callback класс для работы с шейдерами и entity - можно творить что угодно
выглядит это следующим образом:
Код:

class SHCallback : public ocge::IShaderCallback
{
        ocge::Oint mycolor;
public:
        void onCreate(ocge::IShader* shader)
        {
                mycolor = shader->getUniformHandle("mycolor");
        }
        void onEntityRender(ocge::IShader* shader, ocge::IEntity* entity)
        {
                if(entity->getName() == "cube")
                        shader->setUniform4f(mycolor,0,1,0,1);
                else
                        shader->setUniform4f(mycolor,1,0,0,1);
        }
};

Код:

ocge::IShader* cbshader = engine->createShader(sh_vert, sh_frag);
        cbshader->setCallback(new SHCallback());

Код:

cube->setShader(cbshader);
Чорт. Никак не зарелизю бэтку... стока в голову лезет идей, которыми я хочу поделиться.

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

HolyDel 27.07.2012 12:04

Ответ: C3D Engine
 
Цитата:

if(entity->getName() == "cube")
shader->setUniform4f(mycolor,0,1,0,1);
else
shader->setUniform4f(mycolor,1,0,0,1);
чото ты все намешал.
коллбэк вешаем или на шейдер или на ентити. а у тебя как то на все вместе.

pozitiffcat 27.07.2012 12:13

Ответ: C3D Engine
 
так надо чтобы onCreate вызывался один раз когда устанавливаем в шейдер колбэк. Представь скока раз вызовется onCreate при установке колбыка на каждый entity. У меня onCreate вызывается только при setCallBack, т.к. установки хэндлов юниформов касаются только шейдера а не entity.
обработка ентити в колбэке нужна например для генерации матрицы какой то особенной и т.п. еще будет метод onSceneRender
onSceneRender выполняется 1 раз на сцену, а onEntityRender для каждого ентити
Короче может я плохо объяснил, но вобщем так надо, это моя реализация, и она ничем не мешает разработке. ))

pozitiffcat 27.07.2012 12:19

Ответ: C3D Engine
 
Например так:
Код:

class SHCallback : public ocge::IShaderCallback
{
        ocge::Oint mycolor;
        ocge::Oint MVP;
        glm::mat4 VP;
public:
        void onCreate(ocge::IShader* shader)
        {
                mycolor = shader->getUniformHandle("mycolor");
                MVP = shader->getUniformHandle("MVP");
        }
        void onEntityRender(ocge::IShader* shader, ocge::IEntity* entity)
        {
                glm::mat4 mvp = VP * entity->getModelMatrix(true);
                shader->setUniformMat4fv(MVP, 1, glm::value_ptr(mvp));
                if(entity->getName() == "cube")
                        shader->setUniform4f(mycolor,0,1,0,1);
                else
                        shader->setUniform4f(mycolor,1,0,0,1);
        }
        void onSceneRender(ocge::IShader* shader, ocge::ISceneManager* smgr)
        {
                VP = engine->getProjectionMatrix() * smgr->getCamera()->getViewMatrix();
        }
};


HolyDel 27.07.2012 12:43

Ответ: C3D Engine
 
по крайней мере идея стала понятна.

Цитата:

smgr->getCamera()
одна камера в сцене?

pozitiffcat 27.07.2012 13:31

Ответ: C3D Engine
 
нет камер скока угодно, тока одна камера активна. На вьюпорты не делятся, ибо у меня не такой универсальный движок. Можно заюзать 2D спрайт с текстурой срендереной с какойнибудь камеры (это если например захочется сделать зеркало заднего вида)

pozitiffcat 27.07.2012 17:43

Ответ: C3D Engine
 
Загладил стандартные тени.
Добавил установку атрибутов cast shadows и receive shadows, их можно использовать в своих шейдерах
Включаются тени 1 строкой кода
PHP код:

light->setCastShadow(true); 

PS. страшный FPS из-за intel 4500, у меня даже без теней такой fps на встроеном видео
UPD, будет мощная система колбэков. Я продумал тут кое чего.. это очень удобный механизм для разработки и управлением всем. Можно очень гибко использовать объекты, вплоть до создания своих типов

pozitiffcat 01.08.2012 17:11

Ответ: C3D Engine
 
Ну вот я и закончил со спецэффектами, да и впринципе список ToDo почти подошел к концу, теперь наконец допишу доку и выложу скоро бету (примерно неделя)
фото отчет: запилил постэффекты
4х проходный блум (фозможно будет изкаробки, отдельная функция уже есть)

HolyDel 01.08.2012 19:24

Ответ: C3D Engine
 
что на скрине? какой это блум? это же блур.

pozitiffcat 01.08.2012 21:08

Ответ: C3D Engine
 
блум предусматривающий сглаживание картинки.. подпилить просто надо, особо не разбирался


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

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