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)

.Squid 16.07.2010 14:24

Ответ: Exotic Engine
 
"Интитий" доставляэ

Igor' 16.07.2010 14:48

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

Сообщение от .Squid (Сообщение 155000)
"Интитий" доставляэ

По этому и "Интитий" а не "Сущностей" :p

is.SarCasm 16.07.2010 14:52

Ответ: Exotic Engine
 
Объктов нэ?

Igor' 16.07.2010 14:57

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

Сообщение от Igorian (Сообщение 155004)
Объктов нэ?

Нэ, имено "Интитий", так-как в движке Object это Scene Node, а Entity это игровая сущность.

Mr_F_ 17.07.2010 13:49

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

Вот допилил експортёр карт для Autodesk 3dsmax.
Хитёр! А как скрипт понимает что в максе ентити, а что браш? и как строишь там секторы и порталы? в идеале прога должна основываясь на брашах поделить весь левел на бсп-секторы и сама найти между ними порталы.

Igor' 17.07.2010 16:08

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

Сообщение от Mr_F_ (Сообщение 155145)
Хитёр! А как скрипт понимает что в максе ентити, а что браш? и как строишь там секторы и порталы? в идеале прога должна основываясь на брашах поделить весь левел на бсп-секторы и сама найти между ними порталы.

1) Это не скрипт, это плагин.
2) От BSP решил отказатся будут просто секторы и порталы
3) Что порталы, что секторы а что браши определяет дизайнеры, наример чтобы модель была сектором нужно просто в имени указать exSector а чтобы порталом exPortal, остальное будет либо брашеми, либо интитиями - это намного оптимальнее чем авто определение, например если указать в User Defined Properties Dynamic=On - то браш станет интитией, так-же интиями могут быть простые Helper'ы.

Igor' 20.07.2010 03:21

Ответ: Exotic Engine
 
Вложений: 1
SSAO немного переделал.

.Squid 20.07.2010 03:29

Ответ: Exotic Engine
 
Шо эта на скрине за полосы??

Igor' 20.07.2010 03:37

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

Сообщение от .Squid (Сообщение 155564)
Шо эта на скрине за полосы??

Где ты там полосы увидил?

.Squid 20.07.2010 03:39

Ответ: Exotic Engine
 
А там есть еще что-то кроме темно-серых полос на светло-сером фоне?

Igor' 20.07.2010 03:43

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

Сообщение от .Squid (Сообщение 155566)
А там есть еще что-то кроме темно-серых полос на светло-сером фоне?

Трололо?
Яж вроде написал что на скрине SSAO, если ты незнаеш что это такое, увы я тут не причём...

Knightmare 20.07.2010 10:46

Ответ: Exotic Engine
 
Хрень это а не SSAO. Ты опять не знаешь теории. Ты ее никогда не знаешь, хрен там. Это же ппц так затенить прямой (!) угол. Или у тебя деффект зрения и ты вот так видишь окружающий мир? Сочувствую, ага:-)
Крутые эффекты с красивыми аббревиатурами это круто, вот только иногда хотя бы стоит задумываться, как оно выглядит в реальной жизни, если не можешь осилить физические законы, лежащие в основе.

Igor' 20.07.2010 10:56

Ответ: Exotic Engine
 
Вложений: 1
Цитата:

Сообщение от Knightmare (Сообщение 155573)
Хрень это а не SSAO. Ты опять не знаешь теории. Ты ее никогда не знаешь, хрен там. Это же ппц так затенить прямой (!) угол. Или у тебя деффект зрения и ты вот так видишь окружающий мир? Сочувствую, ага:-)
Крутые эффекты с красивыми аббревиатурами это круто, вот только иногда хотя бы стоит задумываться, как оно выглядит в реальной жизни, если не можешь осилить физические законы, лежащие в основе.

Ой посмотритика какие мы умные, смотри аттачмен гений.

Почитай про Screen Space Ambient Occlusion гений, мне не нужно знать как оно в жизни мне достаточно просто реализовать уже известный алгоритм.
В аттачменте картинка где явно видно что из 6 сеймлов один будет как "свет", остальные будут "тень".

Knightmare 20.07.2010 10:58

Ответ: Exotic Engine
 
facepalm.avi
Школьный курс оптики тебе поможет.

Igor' 20.07.2010 12:16

Ответ: Exotic Engine
 
Вложений: 1
Цитата:

Сообщение от Knightmare (Сообщение 155575)
facepalm.avi
Школьный курс оптики тебе поможет.

Для особо одарёных отрендерил туже сцену в 3dsmax c помощью mental ray c матералом Ambient Occlusion...

Knightmare 20.07.2010 12:17

Ответ: Exotic Engine
 
Тут правильно. У тебе - хрень.

Igor' 20.07.2010 12:18

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

Сообщение от Knightmare (Сообщение 155593)
Тут правильно. У тебе - херня.

Хах, картинки почти идентичны, очки одень :p

SBJoker 20.07.2010 12:26

Ответ: Exotic Engine
 
Вообще то плотность тени зависит от раскрытости угла... у тебя чот незаметно этого.

Knightmare 20.07.2010 12:27

Ответ: Exotic Engine
 
Вложений: 2
В максе:
Вложение 10778
У тебя:
Вложение 10779
Угол не может вот так поглотить весь свет, только если он не обложен материалом являющимся абсолютно черным телом, которого в природе не существует (модели в расчет не берем, тут близко не тот случай).

SBJoker 20.07.2010 12:33

Ответ: Exotic Engine
 
Вот совместил рисунки и применил автоконтраст для выравнивания тона.
Разница очевидна.

Igor' 20.07.2010 12:50

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

Сообщение от Knightmare (Сообщение 155597)
В максе:
Вложение 10778
У тебя:
Вложение 10779
Угол не может вот так поглотить весь свет, только если он не обложен материалом являющимся абсолютно черным телом, которого в природе не существует (модели в расчет не берем, тут близко не тот случай).

То чно всё серое - не результат SSAO, а просто выставленый амбиент!

Knightmare 20.07.2010 12:53

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

Сообщение от Igor' (Сообщение 155604)
То чно всё серое - не результат SSAO, а просто выставленый амбиент!

Ололошеньки. Я тибя умоляю, почитай ты теорию, эта фраза невероятно феерична.

Igor' 20.07.2010 13:04

Ответ: Exotic Engine
 
Вложений: 1
Цитата:

Сообщение от Knightmare (Сообщение 155605)
Ололошеньки. Я тибя умоляю, почитай ты теорию, эта фраза невероятно феерична.

Знаеш есть такая штука, Ambient Pass завётся где отрисовывается сцена c домножением на коефициен Ambient Light, почитай теорию..

Вот с амбиентом 1.0,1.0,1.0

Knightmare 20.07.2010 13:07

Ответ: Exotic Engine
 
Тяжелый случай.
Цитата:

почитай теорию..
Knightmare, в отличие от тебя, был хорошим мальчиком и внимательно слушал преподавателей физики и математики в школе и универе. Поэтому он знает и что такое AO, и что такое SSAO, и как их реализовать, и почему твой скрин говно.

Igor' 20.07.2010 18:30

Ответ: Exotic Engine
 
Вложений: 2
Вот к водичке добавил туман, ещё хочу каустику =)

Fatalix3d 20.07.2010 21:54

Ответ: Exotic Engine
 
Водичка отличная, а насчет SSAO вроде везде в играх он как у Игоря? С максом имхо сравнивать не правильно вроде там чистый АО а тут SSAO?

Mr_F_ 21.07.2010 01:18

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

вроде везде в играх он как у Игоря?
в крайзисе лучше, ясен пень же

FDsagizi 21.07.2010 09:23

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

Сообщение от Igor' (Сообщение 155604)
То чно всё серое - не результат SSAO, а просто выставленый амбиент!

А разве амбиент не учитываеться во время расчета расчета освещения ?

Igor' 21.07.2010 09:24

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

Сообщение от FDsagizi (Сообщение 155763)
А разве амбиент не учитываеться во время расчета расчета освещения ?

Амбиент учитывается в Ambient Pass.

Igor' 24.07.2010 13:30

Ответ: Exotic Engine
 
Вложений: 1
Вот сделал эмуляцию AlphaToCoverage c помощью ноиза, для AlphaToCoverage нужен мультисеймплинг - а его увы заюзать нет возможности...

Ну и также добавил секторы и порталы в движок и пару новых функций в класс движка:

Код:


                // Find sectors for point
                bool worldFindSectors( Vector<int>& sectorList , const vec3_t& point );

                // Find sectors for sphere
                bool worldFindSectors( Vector<int>& sectorList , const vec3_t& point , float radius );

                // Find nearest sector for point
                int worldFindNearestSector( const vec3_t& point );

                // Find nearest sector for sphere
                int worldFindNearestSector( const vec3_t& point , float radius );


ARA 24.07.2010 21:06

Ответ: Exotic Engine
 
У меня такой же баг с деревьями был в GTA4 нойзовый. Там ещё тени нойзовые были позорные :)

Mr_F_ 25.07.2010 14:01

Ответ: Exotic Engine
 
слышал что патчи намного улучшают тени в гта4

Igor' 30.07.2010 09:51

Ответ: Exotic Engine
 
Вот сеть наконецто с физикой доделал, сеть через UDP но с гарантированой доставкой пакетов, работает просто:

Код:

#include "..\sdk\inc\engine.h"
#include "..\sdk\inc\font\font.h"
#include "..\sdk\inc\console\console.h"
#include "..\sdk\inc\movie\clip.h"
#include "..\sdk\inc\texture\texture.h"
#include "..\sdk\inc\sound\sound.h"
#include "..\sdk\inc\object\object.h"
#include "..\sdk\inc\camera\camera.h"
#include "..\sdk\inc\model\model.h"
#include "..\sdk\inc\player\player.h"
#include "..\sdk\inc\light\light.h"
#include "..\sdk\inc\light\directionallight.h"
#include "..\sdk\inc\light\spotlight.h"
#include "..\sdk\inc\light\omnilight.h"
#include "..\sdk\inc\light\pointlight.h"
#include "..\sdk\inc\terrain\terrain.h"
#include "..\sdk\inc\water\water.h"
#include "..\sdk\inc\cl\compute.h"
#include "..\sdk\inc\material\material.h"
#include "..\sdk\inc\spatial\spatial.h"
#include "..\sdk\inc\game\game.h"
#include "..\sdk\inc\physic\physic.h"
#include "..\sdk\inc\collision\collision.h"
#include "..\sdk\inc\rigidbody\rigidbody.h"
#include "..\sdk\inc\log.h"
#include "..\sdk\inc\network\network.h"

using namespace ex;



void testCmd( const String& ){
}



static Cmd_t* test = NULL;
static PlayerSpectator* player = NULL;
static Engine* engine = NULL;
static Network* network = NULL;
static Physic* physic = NULL;
static SpotLight* sun = NULL;
static ObjectModel* sky = 0;
static Font* font = 0;


void ServerChat( int msg ) {
        if( msg == NMSG_PACKET ) {
                SocketPacket packet;
                if( ServerSocket::read(packet) )
                        engine->print("message form client %i: %s\n",packet.peerId,(char*)packet.data);
                else
                        return;

                for( int i = 0; i < ServerSocket::getPeerCount(); i++ ) {
                        if( i == packet.peerId ) continue;
                        SocketPacket opacket;
                        opacket.length = packet.length;
                        opacket.data = packet.data;
                        ServerSocket::write(ServerSocket::getPeer(i),opacket);
                }
        }
}

void ClientChat( int msg ) {
        if( msg == NMSG_PACKET ) {
                SocketPacket packet;
                if( !ClientSocket::read(packet) ) return;
                engine->print("message: %s\n",(char*)packet.data);
        }
}

void Say( const String& text ) {
        SocketPacket packet;
        packet.length = text.size() + 1;
        packet.data = (byte*)text.c_str();
        ClientSocket::write(packet);
}

bool init(){
        engine = Engine::get();
        physic = Physic::get();
        network = Network::get();


        font = new Font("arial.ttf",16);
       
        sun = new SpotLight();
        sun->setIntensity(1.0f);
        sun->setColor(float3(1.0f,1.0f,1.0f));
        sun->setShadows(true);
        sun->setRadius(200.0f);
        engine->worldAddLight(sun);



        test = Console::get()->createCmd("test",testCmd,Cmd_t::CHEAT);
        Console::get()->createCmd("say",Say);


        engine->worldAmbient(vec3_t(0.6f,0.6f,0.6f));
        engine->worldFogRange(vec2_t(0.0f,120.0f));



        ObjectModel* box = ObjectModel::createBox();
        box->setOrigin( vec3_t(0,20,0) );
        engine->worldAddObject(box);
    RigidBody* body = new RigidBody(box,CollisionShape::createModelBox(box),20.0f);
        physic->addObject(body);

        float x_offset = 0,z_offset = -5.0f;
        for( int z = 0; z < 10; z++ ) {
                x_offset = -5.0f;
                for( int x = 0; x < 10; x++ ) {
                        ObjectModel* box = ObjectModel::createBox();
                        box->setOrigin(vec3_t(x_offset,-2,z_offset));
                engine->worldAddObject(box);
            Collider* collider = new Collider(box,CollisionShape::createModelBox(box),0);
                physic->addObject(collider);
                        x_offset += 1.2f;
                }
                z_offset += 1.2f;
        }

        player = new PlayerSpectator();
        engine->worldAddPlayer(player);
        engine->worldSetPlayer(player);
        player->getView()->setFar(2048.0f);

        Collider* collider = new Collider(player->getView(),CollisionShape::createSphere(1.0f),1);
        collider->setObject( player->getView() );
        physic->addObject(collider);

        network->setServerCallback(ServerChat);
        network->setClientCallback(ClientChat);

        return true;
}

bool frame( float delta ){
        if( engine->getKey( KC_ESCAPE ) ) return false;       


        if( engine->getKey( KC_F3 ) ){
                engine->worldFog(true);
        }

        if( engine->getKey( KC_F4 ) ){
                engine->worldFog(false);
        }

        if( engine->getKey( KC_SPACE ) ){
                sun->setOrient( player->getView()->getOrient() );
                sun->setOrigin( player->getView()->getOrigin() );
        }

        return true;
}

bool guiFrame( float delta ) {
        font->enable(engine->getWindowWidth(),engine->getWindowHeight());
        font->printf(2,2,0,"Visible sectors: %i\n",engine->worldGetVisibleSectors());
        font->disable();
        return true;
}

#ifdef EX_WIN32
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
        int argc = 1;
        char *argv[256];
        argv[0] = "none";
        while(*lpCmdLine && argc < 256) {
                while(*lpCmdLine && (*lpCmdLine <= ' ' || *lpCmdLine == '"')) lpCmdLine++;
                if(*lpCmdLine) {
                        if(*lpCmdLine == '"') lpCmdLine++;
                        argv[argc++] = lpCmdLine;
                        while(*lpCmdLine && *lpCmdLine > ' ' && *lpCmdLine != '"') lpCmdLine++;
                        if(*lpCmdLine) *(lpCmdLine++) = '\0';
                }
        }
#else
int main( int argc , char** argv ) {
#endif

        Engine* engine = Engine::create();
        engine->main(init,NULL,frame,guiFrame);
        Engine::destroy();

        return 0;
}

Cоздание сервера и приконекчивание к нему осуществляется в консоли c помощью комманд:

server_create <port>
server_destroy
client_connect <address:port>
client_disconnect

Igor' 09.08.2010 22:12

Ответ: Exotic Engine
 
Вложений: 1
Сделал потдержку скриптования постфилтров, пишем шейдеры и скрипт и всё новый пост фильтр готов, никокого лишнего кода.

Пример блума:

Код:

<?xml version="1.0"?>

<Register>
 <ScreenTexture register="screen" />
 <RenderTarget register="bright0" width="ScreenWidthDiv2" height="ScreenHeightDiv2" format="R8G8B8" wrap="Clamp" filter="Linear" />
 <RenderTarget register="bright1" width="ScreenWidthDiv4" height="ScreenHeightDiv4" format="R8G8B8" wrap="Clamp" filter="Linear" />
 <RenderTarget register="ds0" width="ScreenWidthDiv2" height="ScreenHeightDiv2" format="R8G8B8" wrap="Clamp" filter="Linear" />
 <RenderTarget register="ds1" width="ScreenWidthDiv4" height="ScreenHeightDiv4" format="R8G8B8" wrap="Clamp" filter="Linear" />
 <Shader register="blurX" file="XBlur.ps" />
 <Shader register="blurY" file="YBlur.ps" />
 <Shader register="bright" file="Bright.ps" />
 <Shader register="bloom" file="Bloom.ps" />
 <Float register="threshold" value="0.1" />
 <Float register="scale" value="1.0" />
</Register>

<Pass>
  <SetRenderTarget register="ds0" slot="0" />
  <SetTexture register="screen" name="screen" />
  <SetFloat register="threshold" />
  <SetShader register="bright" />
</Pass>

<Pass>
  <SetRenderTarget register="bright0" slot="0" />
  <SetTexture register="ds0" name="screen" />
  <SetShader register="blurX" />
</Pass>

<Pass>
  <SetRenderTarget register="ds0" slot="0" />
  <SetTexture register="bright0" name="screen" />
  <SetShader register="blurY" />
</Pass>

<Pass>
  <SetRenderTarget register="ds1" slot="0" />
  <SetTexture register="screen" name="screen" />
  <SetFloat register="threshold" name="threshold" />
  <SetShader register="bright" />
</Pass>

<Pass>
  <SetRenderTarget register="bright1" slot="0" />
  <SetTexture register="ds1" name="screen" />
  <SetShader register="blurX" />
</Pass>

<Pass>
  <SetRenderTarget register="ds1" slot="0" />
  <SetTexture register="bright1" name="screen" />
  <SetShader register="blurY" />
</Pass>

<Pass>
  <SetTexture register="ds0" name="downsample0" />
  <SetTexture register="ds1" name="downsample1" />
  <SetTexture register="screen" name="screen" />
  <SetShader register="bloom" />
  <SetFloat register="scale" name="scale" />
</Pass>


Igor' 11.08.2010 08:01

Ответ: Exotic Engine
 
Закончил написание експортёра скелетной анимации, также самой анимации в движке:

Код:


                // add animation
                int addAnimation( const AnimationSet& anim , int bone = -1 );

                // set animation blend weight
                void setAnimationWeight( int id , float weight , int bone = -1 );

                // get animation blend weight
                float getAnimationWeight( int id , int bone = -1  )const;

                // set animation playing speed
                void setAnimationSpeed( int id , float speed , int bone = -1 );

                // get animation playing speed
                float getAnimationSpeed( int id , int bone = -1  )const;

                // is animation playing
                bool isAnimationPlaying( int id , int bone = -1  )const;

                // play animation
                void playAnimation( int id , int bone = -1  );

                // pause animation
                void pauseAnimation( int id , int bone = -1  );

                // stop animation
                void stopAnimation( int id , int bone = -1  );

Можно применять отдельно анимации к определёной кости для этого в функциях есть аргумент bone - айди кости, cама анимация как и везде плавная интерполяция между кадрами и блендинг.
Сейчас осталось поправить пару багов и добавить инверсную кинематику и всё будет шаколадно =).

ARA 11.08.2010 10:17

Ответ: Exotic Engine
 
Скажи, будет ли поддерживаться экспорт скиннинга-плагина Bones Pro 4?
Если да, аниматоры будут тебя на руках носить =)

Igor' 11.08.2010 12:39

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

Сообщение от ARENSHI (Сообщение 157962)
Скажи, будет ли поддерживаться экспорт скиннинга-плагина Bones Pro 4?
Если да, аниматоры будут тебя на руках носить =)

А что это такое? В первый раз о таком слышу...

ЗЫ Вот записал видео теста анимации http://www.youtube.com/watch?v=z46TVjqr3Lc
ЗЫЗЫ Вот ещё одно но с настроеной прозрачностью стекляной защитки на шлеме http://www.youtube.com/watch?v=j6lNqRv4WvE

Igor' 13.08.2010 16:30

Ответ: Exotic Engine
 
Вложений: 1
Новый скриншот:

Igor' 15.08.2010 00:05

Ответ: Exotic Engine
 
Вложений: 1
Первая своя модель, сделаная ведущим 3D-Дизайнером проекта =)

Mr_F_ 15.08.2010 15:27

Ответ: Exotic Engine
 
за эффектами и светом не видно модели. и мне кажется у него со лбом чето не то.

Igor' 19.08.2010 02:48

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

Сообщение от Mr_F_ (Сообщение 158492)
за эффектами и светом не видно модели. и мне кажется у него со лбом чето не то.

О да, а эпики то и незнают что из за такого то освещения моделей не видно :-D, ориентировался при настройке освещения в сцене на Gears Of War.

All
Разрабатывается фраймворк для создания игр Client-Server, конечно большенство классов будет специально для разработки шутеров и экшенов, но это по сути не будет мишать делать тот-же рейсинг, так-как есть класс транспорта.

Есть базовый класс GameEntity от которого наследуются свои интии, уже есть всячески триггеры, чарактеры и тому подобное, приведу листинг GameEntity:

Код:


        class GameEntity : public GameClass {
        public:
                enum {
                        FIELD_SPAWNED = EX_BIT(0),
                        FIELD_KILLED = EX_BIT(1),
                        FIELD_ACTIVE = EX_BIT(2),
                };

                GameEntity();
                virtual ~GameEntity();

                // set name
                void setName( const String& name );

                // get name
                String getName()const;

                // get name hash
                int getNameHash()const;

                // get class name
                virtual String getClassName()const;

                // is player
                virtual bool isPlayer()const;

                // is character
                virtual bool isCharacter()const;

                // is pickup
                virtual bool isPickup()const;

                // is trigger
                virtual bool isTrigger()const;

                // is vehicle
                virtual bool isVehicle()const;

                // is server side entity
                virtual bool isServerEntity()const;

                // is not dead
                bool isAlive()const;

                // is active
                bool isActive()const;

                // is spawned
                bool isSpawned()const;

                // spawn
                virtual void spawn();

                // kill
                virtual void kill( GameEntity* attacker );

                // activate
                virtual void activate();

                // touch
                virtual void touch( GameEntity* caller );

                // use
                virtual void use( GameEntity* caller );

                // set health
                virtual void setHealth( int health );

                // get health
                virtual int getHealth()const;

                // take deamage
                virtual void takeDeamage( GameEntity* attacker , int deamage );

        protected:
                String name;
                int    nameHash;
                int    state;
        };

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

.Squid 19.08.2010 02:54

Ответ: Exotic Engine
 
Што такое deamage?

Igor' 19.08.2010 04:59

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

Сообщение от .Squid (Сообщение 158900)
Што такое deamage?

Это мой кривой английский :-D, а так это повреждения =)

Dream 19.08.2010 13:18

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

Код:

        // is player
                virtual bool isPlayer()const;

                // is character
                virtual bool isCharacter()const;

                // is pickup
                virtual bool isPickup()const;

                // is trigger
                virtual bool isTrigger()const;

                // is vehicle
                virtual bool isVehicle()const;

                // is server side entity
                virtual bool isServerEntity()const;


ооо да. это так красиво! столько мусора в базовом классе, имхо

Igor' 19.08.2010 14:56

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

Сообщение от Dream (Сообщение 158928)
ооо да. это так красиво! столько мусора в базовом классе, имхо

Посмотри сколько так называемого мусора в таких базовых классах у дядек из Valve,Epic Games...
ЗЫ Иногда я просто удивляюсь некоторым людям с этого форума...

HolyDel 19.08.2010 16:48

Ответ: Exotic Engine
 
не универсально.
вдруг я хочу сделать игру про колобков, некоторые из которых телепаты. где bool GameEntity::isTelepathy()?

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

Dream 19.08.2010 16:49

Ответ: Exotic Engine
 
а я не перестаю удивлятся некоторым движкоделам, которые в случае чего говрят смотреть на движки дядек из Epica и Valve

Igor' 19.08.2010 17:35

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

Сообщение от HolyDel (Сообщение 158969)
не универсально.
вдруг я хочу сделать игру про колобков, некоторые из которых телепаты. где bool GameEntity::isTelepathy()?

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

Ок, будем мыслить логически, нам нужно узнать к какому типу оносится наша интития к классу GameVehicle или например к классу GameCharacter так-как например у триггера тачем может воспользоватся только либо чарактер, либо транспорт в котором находется чарактер, и тут встаёт вопрос как это сделать как можно удобнее чем многочисленые проверки на пренадлеженость класса к типа чарактера или транспорта так-как у всех интитий наследуюемых от GameEntity свой ClassName, таже если мы будем хранить SuperClass у всех своих интитий нам придётся долго рекурсией проверять не пренадлеженость интитии или её супер класса к типа чарактера, для этого и нужны такие функции базовые как isCharacter,isVehicle, так-как GameTrigger,GamePickup,GameCharacter и т.р базовые классы игровой логики, твой же калабок будет отнаследован либо от GameCharacter если это будет персонаж управляемый ИИ либо от GamePlayer если им будет управлять игрок а то что это именно твой колобок можно будет узнать по getClassName() функции которая возвращает имя класса интити или по хешу названия класса.
На доступном языке объяснил?

Цитата:

Сообщение от Dream (Сообщение 158969)
а я не перестаю удивлятся некоторым движкоделам, которые в случае чего говрят смотреть на движки дядек из Epica и Valve

Привожу в пример Epic Games \ Valve из за того что таким как ты безполезно что-то обяснять, приходится приводить примеры.

pax 19.08.2010 17:48

Ответ: Exotic Engine
 
хорошо что я люблю пользоваться интерфейсами и мне достаточно проверить if(obj is IPlayer)

Dream 19.08.2010 17:57

Ответ: Exotic Engine
 
много букофффф.. бредятина. вопрос был не в том зачем тебе getClassName
, а в том что у тебя много лишних методов, которые ничего не дают (isCharacter,isVehicle и т.д.). проще было уже сделать енум с перечислением существующих типов обьектов, и добавить виртуальный метод GetType() - EObjectType. вобщето класс GameEntity лучше сделать абстрактным. у всех наследников перегрузить GetType() с возращением типа обьекта

Igor' 19.08.2010 18:01

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

Сообщение от Dream (Сообщение 158983)
много букофффф.. бредятина. вопрос был не в том зачем тебе getClassName
, а в том что у тебя много лишних методов, которые ничего не дают (isCharacter,isVehicle и т.д.). проще было уже сделать енум с перечислением существующих типов обьектов, и добавить виртуальный метод GetType() - EObjectType. вобщето класс GameEntity лучше сделать абстрактным. у всех наследников перегрузить GetType() с возращением типа обьекта

Не умничай, перед тем как писать опять очередную ересь сначало прочитай мой пост с "много букфффф", isCharacter и тому подобное и так перегружается а вот например GetType() не сможет тебе сразу сказать что интития является и GameCharacter и GamePlayer, хотя если использовать bitfiled то всё возможно, ты у себя можеш всё что-то хочеш делать, мне совершено по барабану как у тебя будет что-то работать и будет ли вобще работать....

Dream 19.08.2010 18:04

Ответ: Exotic Engine
 
уфффф... я здаюсь, да, у тебя мего мощный движок! и будет стопятсот бесполезных функция Is. но зато как это удобно и красиво!

HolyDel 19.08.2010 18:56

Ответ: Exotic Engine
 
я ошибся.
все забываю, что ты пишешь ИГРОВОЙ движок, а не мультимедийный. в таком случае возражений не имею ))
как я понимаю он будет под один какой то жанр? т.е. лайнес, наприер, я на нем не напишу, или напишу, но будет жуткий оверхед?

Igor' 19.08.2010 22:41

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

Сообщение от HolyDel (Сообщение 158992)
я ошибся.
все забываю, что ты пишешь ИГРОВОЙ движок, а не мультимедийный. в таком случае возражений не имею ))
как я понимаю он будет под один какой то жанр? т.е. лайнес, наприер, я на нем не напишу, или напишу, но будет жуткий оверхед?

Гм, не казуалку на нем точно не написать =)

Reks888 19.08.2010 23:05

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

Сообщение от Igor' (Сообщение 159019)
Гм, не казуалку на нем точно не написать =)

Этот двойной Not - по программистски:-D
Ты имел ввиду что на нем написать можно только казуалку, или моя твоя не понимать?

HolyDel 20.08.2010 17:39

Ответ: Exotic Engine
 
наверное пропущена ета запятая:
Гм, не, казуалку на нем точно не написать =)

Igor' 20.08.2010 19:35

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

Сообщение от HolyDel (Сообщение 159122)
наверное пропущена ета запятая:
Гм, не, казуалку на нем точно не написать =)

Да, бывает...

Igor' 25.08.2010 20:48

Ответ: Exotic Engine
 
Вложений: 1
Cделал BSP, для галочки, хотя конечно использование BSP иногда даёт профит, правдо всяких PVS нету, наверно заместо PVS сделаю просто окклюжн куллинг.
BSP можно скомпилировать из простой модели, функцией Bsp::compile которая компилирует BSP и сохраняет сразу в файл, либо загрузить уже из файла Bsp::create(filename), либо создать из модели Bsp::create(model)

Код:


        ObjectModel* arena = ObjectModel::create("arena.mesh");
        Bsp::compile(arena,"arena.bsp");
        Bsp* arena_bsp = Bsp::create("arena.bsp");
        delete arena;
        renderer->setBsp(arena_bsp);


HolyDel 25.08.2010 21:50

Ответ: Exotic Engine
 
ачо, нужная фича.

фпс чтото не очень много, для такой сцены.

Igor' 25.08.2010 22:25

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

Сообщение от HolyDel (Сообщение 159823)
ачо, нужная фича.

фпс чтото не очень много, для такой сцены.

Это VSync и дебаг сборка.

Данил 02.09.2010 23:00

Ответ: Exotic Engine
 
честно - дохрена эффектов. все какое-то слишком цветное и блестящее.
сделай хоть один скрин с нормальным количеством эффектов, а не с "посмотри, У меня блум есть!"

pax 28.01.2011 14:25

Ответ: Exotic Engine
 
Что-то давно новостей не было, как продвигается работа над движком?

ARA 28.01.2011 14:44

Ответ: Exotic Engine
 
Автор либо забил, либо в армии :)

Knightmare 28.01.2011 15:47

Ответ: Exotic Engine
 
Великий и ужасный начал новый двиг. Хотя стоп. Тот двиг он тоже уже забросил. И начал новый. Или его он тоже забросил и уже начал третий (стопитисотый в общем ряде)? Блин, чуваки, я риальне запутался уже сам:-)


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

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