forum.boolean.name

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

Mr_F_ 24.02.2010 09:31

Ответ: HxEngine
 
Цитата:

функцию просчёта Inverse Kinematic для скелета
откуда спер?)

Igor' 24.02.2010 09:53

Ответ: HxEngine
 
Цитата:

Сообщение от Mr_F_ (Сообщение 139147)
откуда спер?)

Былобы чего и откуда переть... Вобщем в Blender есть IK Solver.

Dream 24.02.2010 17:47

Ответ: HxEngine
 
Цитата:

Сообщение от Igor' (Сообщение 139051)
Добавил класс Debugger,который позволяет включать\отключать отрисовку отладочной информации,такой как скелет,баунб бокс и т.д
Также добавил в класс Mesh функцию просчёта Inverse Kinematic для скелета,функция computeCCD,просчитывает для нужной кости и её родителя(рекурсия) IK,вобщем с помощью неё можно делать спокойно тоже самое что и в дополнении Locomotion для Unity.

Охотник сцапал Луиса!

Igor' 24.02.2010 23:42

Ответ: HxEngine
 
Вложений: 1
Cделал сеймпл по альфа блендингу,показывает альфа сортировку.
В сцене 6400 полу-прозрачных кубиков с текстурой.

Сам бленд для матереала делается лёгким движением руки:

Код:

#define BLEND_ALPHA GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA

material->setAlphaBlend(true,BLEND_ALPHA);
material->setColor(float4(1,1,1,0.5f));


Igor' 25.02.2010 08:48

Ответ: HxEngine
 
Cделал фонувую загрузку ресурсов,щас вот стриминг текстур делаю...

Igor' 26.02.2010 01:45

Ответ: HxEngine
 
Вложений: 1
Cекретные разработки :)

Igor' 28.02.2010 18:07

Ответ: HxEngine
 
Вложений: 1
Мышинка :)
Тестировал загрузку кубмап,и хелперы. Думаю вот заставить её ездить.

Igor' 08.03.2010 03:06

Ответ: HxEngine
 
Пишу расширения для движка GameEngine,который будет базироватся на Server-Client cистеме,готов мастер сервер.

Igor' 29.03.2010 17:28

Ответ: HxEngine
 
Немного перековырял архитектуру.
Добавил потдержку OpenGL 3.2,теперь матереалы абстрактны,тоесть пишем свой тип матереала для конретных задач и в файле указываем в качестве имя класса матереала,свой:
Код:

<Material>
 <Class name="StandartMaterial"/>
 <DiffuseTexture file="color_map.dds"/>
 <Color r="1.0" g="1.0" b="1.0" a="1.0"/>
<Material/>

Также добавлен единый конфигурационый файл:
Код:


<Video>
  <Width value="1024"/>
  <Height value="768"/>
  <FullScreen value="0"/>
  <MSAA value="None"/>
</Video>

<Texture>
  <Filter mode="Linear"/>
  <Anistropy level="0.0"/>
  <MipStart level="0"/>
</Texture>

<Gui>
  <Resource file="core.xml"/>
</Gui>

<Game>
  <Title name="Squad Engine"/>
</Game>

Преписан ресурсный менеджер который с лёгкостью позволяет грузить ресурсы в отдельном потоке:
Код:

        class BackgroundResourceLoader{
        public:
                SINGLETON(BackgroundResourceLoader);

                void add( Resource* resource );

                void flush();
        };

Но можно и грузить ресурс в текущем потоке юзая макрос:
Код:

    #define ResourceCache(ResourcePtr,ResourceFile) ResourcePtr->setFileName(ResourceFile); ResourcePtr->load();
Так же интии разделены на два типа просто интития Entity,и RenderableEntity тоесть та которую можно отрисовать.
Теперь и написание приложения немного изменилось,тоесть добавлен абстрактный класс EngineListener,в котором есь виртуальные методы init(),shutdown(),update(),и пару связаных с инпутом.
Код:

        class EngineListener : public OIS::MouseListener,public OIS::KeyListener
        {
        public:
       
                EngineListener();
                virtual ~EngineListener();

                virtual void init();
                virtual void shutdown();

                virtual void resize( uint width , uint height );
                virtual void update( uint fps , float deltaTime );

                virtual void minimize();
                virtual void maximize();

       
                virtual bool mouseMoved(const OIS::MouseEvent& _arg);
            virtual bool mousePressed(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id);
            virtual bool mouseReleased(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id);
            virtual bool keyPressed(const OIS::KeyEvent& _arg);
            virtual bool keyReleased(const OIS::KeyEvent& _arg);
};

Юзается так:
Код:

#include "..\Engine\squad.h"


class Game : public Squad::EngineListener{
public:
        bool keyPressed(const OIS::KeyEvent& _arg){
                if( _arg.key == OIS::KC_ESCAPE )
                        Squad::Engine::getInstance().exit();

                return Squad::EngineListener::keyPressed(_arg);
        }
};

void main(){
        Squad::Engine* engine = Squad::Engine::getInstancePtr();
        engine->init(new Game,"");
        engine->main();
        engine->shutdown();
}


FDsagizi 29.03.2010 21:41

Ответ: HxEngine
 
Принимать напрямую сообщения от OIS -а не лучшая идея т.к. не возможность юзать из под редактора это раз - оис не садиться на панели редакторов, и 2 - потом нужно будет переделывать так чтобы можно было выставлять свои кнопки на события...

Igor' 29.03.2010 22:51

Ответ: HxEngine
 
Цитата:

Сообщение от FDsagizi (Сообщение 143551)
Принимать напрямую сообщения от OIS -а не лучшая идея т.к. не возможность юзать из под редактора это раз - оис не садиться на панели редакторов, и 2 - потом нужно будет переделывать так чтобы можно было выставлять свои кнопки на события...

1) На Qt панели\окна OIS спокойно инициализируется.
2) Не вижу проблемы.
3) Редактор на GUI движка - MyGUI,что даже дает буст в быстродействии редактора.

Igor' 29.03.2010 22:59

Ответ: HxEngine
 
Поповоду второго:

Код:

#include "..\Engine\squad.h"


typedef void (*KeyAction)();

static KeyAction keyBind[240]; // всего OIS потдерживает 237 клавиш,округлил.

void ExitAction(){
        Squad::EnginePtr()->exit();
}

class Game : public Squad::EngineListener{
public:
        bool keyPressed(const OIS::KeyEvent& _arg){
               
                if( keyBind[_arg.key] != 0 )
                        keyBind[_arg.key]();

                return Squad::EngineListener::keyPressed(_arg);
        }
};

void main(){
        memset(keyBind,0,sizeof(keyBind));
        keyBind[OIS::KC_ESCAPE] = ExitAction;

        Squad::Engine* engine = Squad::Engine::getInstancePtr();
        engine->init(new Game,"");
        engine->main();
        engine->shutdown();
}


FDsagizi 30.03.2010 07:10

Ответ: HxEngine
 
Цитата:

Сообщение от Igor' (Сообщение 143571)
1) На Qt панели\окна OIS спокойно инициализируется.
2) Не вижу проблемы.

Значит это была проблема именно с огром....

Цитата:

3) Редактор на GUI движка - MyGUI,что даже дает буст в быстродействии редактора.
MyGUI Как гуи для редактора не очень здоровая идея - в нем нету многих мелочей типа, там нежу нормального - TreeView, даже банально иконки поставить в элементы List не получиться...

Хотя версия 4,0 гуи, обесчает быть крутой - но это нужно жадть и то не факт.

Igor' 30.03.2010 08:49

Ответ: HxEngine
 
Цитата:

Сообщение от FDsagizi (Сообщение 143622)
MyGUI Как гуи для редактора не очень здоровая идея - в нем нету многих мелочей типа, там нежу нормального - TreeView, даже банально иконки поставить в элементы List не получиться...

Хотя версия 4,0 гуи, обесчает быть крутой - но это нужно жадть и то не факт.

Ну я переодически общаюсь с разработчиками,недавно специально по моей просьбе my.name допилил плагин веб браузера.

Igor' 02.04.2010 02:20

Ответ: HxEngine
 
Теперь рендеринг карты глубины и шедоумап ещё проще:

Код:

        class World : public BaseWorld{
        public:
                World();
                virtual ~World();

                virtual void clear();

                virtual void addEntity( Entity* entity );
                virtual void addRenderableEntity( RenderableEntity* entity );
            virtual const Vector<Entity*>* getEntityList()const;

                virtual void removeEntity( Entity* entity );
                virtual void removeRenderableEntity( RenderableEntity* entity );
                virtual const Vector<RenderableEntity*>* getRenderableEntityList()const;

                virtual void update( float delta );

                // normal sorted rendering
                virtual void renderFrontToBack( Camera* camera );
                virtual void renderBackToFront( Camera* camera );

                // normal rendering with sort for alpha blend
                virtual void render( Camera* camera , bool sort = true );

                // depth only rendering
                virtual void renderDepth( Camera* camera );
               
                // shadow depth rendering
                virtual void renderShadowDepth( Camera* camera );

        protected:
                Vector<Entity*> entities;
                Vector<RenderableEntity*> renderable_entities;
        };

Теперь "мир" имеет методы renderDepth,и renderShadowDepth,renderShadowDepth отличается от renderDepth тем что отрисовываются только те интиии у которых флаг ShadowCaster равен true.


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

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