Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Проекты > Проекты C++

Закрытая тема
 
Опции темы
Старый 02.02.2010, 02:52   #1
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Exotic Engine

Привецтвую!

Учавствую на даный момент в разработке MMORPG,лид программером клиента,так получилось что сначало хотели юзать Leadwerks Engine для отрисовки графики,но всплыло много камней,ришил писать свой движок,пишу не только для проекта,движок будет общедоступным и фриварным,кроссплатформеным,юзаю OOP,но функционал планирую как в Leadwerks Engine,так же будет CAPI,тобиш функции.

Пока движок в начальной стадии,умеет проигрывать звук( юзается OpenAL, проигрывается mp3,wav,ogg,потдержка стримминга ),работа с гуи( через MyGUI ),и из 3д графики пока только работа с мешами,и шейдерами( через Cg ),и текстурками,так же работа с MRT через FrameBuffer Objects.

В планах,потдержка OpenCL,Deferred Renderer,физики через Newton.

void main(){

	Engine* engine = new Engine();


	// Инициализация
	engine->init(800,600);

	// Создаем мир
	World* world = engine->createWorld();

	Camera* camera = engine->createCamera();
	camera->setLocalPosition(float3(0.0,0.0,-4));

	Texture* colorMap = engine->loadTexture("color_map.dds");
	Texture* normalMap = engine->loadTexture("normal_map.dds");

	Material* material = new Material();
	material->setTexture( 0 , colorMap );
	material->setTexture( 1 , normalMap );
	material->setShader( engine->loadShader("mesh_vertex.cg","mesh_textured_bump_pixel.cg",0) );

	Mesh* cube = MeshUtil::getInstance().createCube();//createCube(material);
	cube->paint(material);
	cube->updateTangents();
	cube->updateBounds();
	//cube->scaleMesh( float3(1,0.1f,1) );

	cube->setLocalPosition(float3(0,0,5));
	cube->setLocalRotation(rotation(float3(0,0,0)*DEG2RAD));


	// OpenAL менеджер
	OpenAL* al = engine->getAL();

	// Грузим звук
	Sound* sound = al->createSound("industrial2.mp3",Sound::STREAM||Sound::LOOP);

	// Добавляем в список проигрываемых
	sound->play();

	while( !engine->keyHit(OIS::KC_ESCAPE) ){

		if( engine->keyHit(OIS::KC_F5) )
			engine->makeScreenshoot();

		// очистка буффера цвета\глубины\стенцила
		engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
		
		cube->turn(float3(.5f,.5f,.5f));
		// рисуем мир
		engine->updateWorld(0.0f);
		engine->renderWorld(0.0f);

		// Вывод на экран
		engine->flip();
	}
	// заверщение работы движка
	engine->exit();
}
Миниатюры
Нажмите на изображение для увеличения
Название: CubicT.jpg
Просмотров: 1172
Размер:	75.9 Кб
ID:	8958  
(Offline)
 
Эти 5 пользователя(ей) сказали Спасибо Igor' за это полезное сообщение:
baton4ik (21.06.2010), HolyDel (02.02.2010), moka (02.02.2010), mr.DIMAS (15.04.2011), Жека (03.02.2010)
Старый 02.02.2010, 03:01   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: HxEngine

Newton - давно уже не актуален. Почему он?
Удачи! Как с производительностью рендера?
(Offline)
 
Старый 02.02.2010, 03:10   #3
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: HxEngine

В планах,потдержка OpenCL,Deferred Renderer,физики через Newton.
Привецтвую
Ньютон уже лет пять как не рулит
Потдержка OpenCL - это серьёзно
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
ARA (02.02.2010), Harter (02.02.2010)
Старый 02.02.2010, 03:10   #4
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Сообщение от MoKa Посмотреть сообщение
Newton - давно уже не актуален. Почему он?
Удачи! Как с производительностью рендера?
Newton - ещё как актуален,дай бог ему здаровья =)
Уж очень мне понравилась в нем система разрушений =)
Вобще ньютон развивается,единственое чего в нем нету это физики мягких тел,надеюсь что пока нету

Ну рендер особо не нагружал,ещё много чего по мимо рендера надо написать.
(Offline)
 
Старый 02.02.2010, 06:13   #5
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Попробывал сделать пост фильтер,вроде получается,пост филтер простой Black & White

struct Input{
   float2 texcoord : TEXCOORD0;
};

struct Output{
   float4 color : COLOR0;
};


void main( in Input In , out Output Out , uniform float4 materialColor , uniform sampler2D texture0 ){

   float saturation = .1f;
   float4 color = tex2D(texture0,In.texcoord);
   float grayscale = color.r * 0.3 + color.g * 0.59 + color.b * 0.11;
   float satgray = clamp(grayscale*(1.0-saturation),0.0,1.0);
   Out.color.x = satgray + saturation * color.x;
   Out.color.y = satgray + saturation * color.y;
   Out.color.z = satgray + saturation * color.z;
   Out.color.w = 1.0f;
}
void main(){

	Engine* engine = new Engine();


	// Инициализация
	engine->init(800,600);

	// Создаем мир
	World* world = engine->createWorld();

	Camera* camera = engine->createCamera();
	camera->setLocalPosition(float3(0.0,0.0,-4));

	Texture* colorMap = engine->loadTexture("color_map.dds");
	Texture* normalMap = engine->loadTexture("normal_map.dds");

	Material* material = new Material();
	material->setTexture( 0 , colorMap );
	material->setTexture( 1 , normalMap );
	material->setShader( engine->loadShader("mesh_vertex.cg","mesh_textured_bump_pixel.cg",0) );

	Mesh* cube = MeshUtil::getInstance().createCube();//createCube(material);
	cube->paint(material);
	cube->updateTangents();
	cube->updateBounds();
	//cube->scaleMesh( float3(1,0.1f,1) );

	cube->setLocalPosition(float3(0,0,5));
	cube->setLocalRotation(rotation(float3(0,0,0)*DEG2RAD));


	// Создаем всё для пост фильтера
	FrameBuffer* buffer = engine->createBuffer(800,600,FrameBuffer::COLOR0);
	Material* postmaterial = new Material();
	postmaterial->setDepthWrite(false);
	postmaterial->setDepthTest(false,0);
	postmaterial->setCullFace(false);
	postmaterial->setAlphaBlend(false);
	postmaterial->setAlphaTest(false,0);
	postmaterial->setTexture(0,buffer->getColorTarget(0));
	postmaterial->setShader( engine->loadShader("post_quad_vertex.cg","post_disaturation_pixel.cg",0) );


	// OpenAL менеджер
	OpenAL* al = engine->getAL();

	// Грузим звук
	Sound* sound = al->createSound("industrial2.mp3",Sound::STREAM||Sound::LOOP);

	// Добавляем в список проигрываемых
	sound->play();

	while( !engine->keyHit(OIS::KC_ESCAPE) ){

		if( engine->keyHit(OIS::KC_F5) )
			engine->makeScreenshoot();

		// устанавливаем рендер в буффер
		engine->setFrameBuffer( buffer);

		// очистка буффера цвета\глубины\стенцила
		engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
		
		cube->turn(float3(.5f,.5f,.5f));
		// рисуем мир
		engine->updateWorld(0.0f);
		engine->renderWorld(0.0f);

		// устанавливаем рендер в бек буффер
		engine->setFrameBuffer(0);

		engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
			
	
		// рисуем квад 
		postmaterial->bind();
		PostQuad::getInstance().render();
		postmaterial->unbind();
		

		// Вывод на экран
		engine->flip();
	}
	// заверщение работы движка
	engine->exit();
}
Движок кст держит Geometry Shader, планирую сделать адаптивную тессиляцию.
Также забыл сказать,есть потдержка мультисеймплов и сжатие данных( архивы ).
Миниатюры
Нажмите на изображение для увеличения
Название: HxBlackAndWhite.jpg
Просмотров: 1025
Размер:	73.8 Кб
ID:	8959  
(Offline)
 
Сообщение было полезно следующим пользователям:
HolyDel (02.02.2010)
Старый 02.02.2010, 11:58   #6
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: HxEngine

а проект мморпг комерческий ??
Россия ?? Украина ??
(Offline)
 
Старый 02.02.2010, 13:41   #7
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Сообщение от IGR Посмотреть сообщение
а проект мморпг комерческий ??
Россия ?? Украина ??
NDA
(Offline)
 
Старый 02.02.2010, 13:47   #8
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: HxEngine

Т.е. первый пост не подпадает под NDA?

З.Ы, в первом посте ты рассказал больше чем тебя спросили потом.
__________________
(Offline)
 
Сообщение было полезно следующим пользователям:
Harter (02.02.2010)
Старый 02.02.2010, 14:35   #9
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Сообщение от SBJoker Посмотреть сообщение
Т.е. первый пост не подпадает под NDA?

З.Ы, в первом посте ты рассказал больше чем тебя спросили потом.
В первом посте я сказал что работаю над MMORPG,не сказал комерческий\не комерческий проект и т.д и т.п. Просто работаю с серьёзными людьми.
(Offline)
 
Старый 02.02.2010, 14:55   #10
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: HxEngine

Ты непонял мой сарказм, на мой взгляд информация о том что делается какая то там ММОРПГ более важна чем в какой стране и то коммерческая ли она, потому упоминание NDA скорее позерство чем реальная необходимость.

Но если чо то мы прониклись уважением, так держать!
__________________
(Offline)
 
Эти 6 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
ABTOMAT (03.02.2010), Android (02.02.2010), Harter (02.02.2010), Igor' (02.02.2010), Mad3Dan (13.02.2013), Randomize (03.02.2010)
Старый 02.02.2010, 21:15   #11
FDsagizi
Бывалый
 
Аватар для FDsagizi
 
Регистрация: 04.01.2008
Адрес: Казахстан \ Талдыкорган
Сообщений: 659
Написано 170 полезных сообщений
(для 509 пользователей)
Ответ: HxEngine

опять Твенти файв...

Какой это по счету уже "Дви-Жек" ?
__________________
Жизнь как говориться игра- делать игры моя профессия(с)

Программирование, это религия! Её нужно исповедовать.
(Offline)
 
Старый 02.02.2010, 21:57   #12
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: HxEngine

GAPI? Судя по контексту OpenGL (OpenAL а не DirectSound и FBO а не RTT да и Geometry Shaders наверное пока еще рано писать на DX, так как WinVista Win7 only)

сколько уже идет разработка? сколько разработчиков?

// очистка буффера цвета\глубины\стенцила
engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,flo at4(0,0.2f,0.3f,1.0f),1.0f,0);
имхо слишком низко. да и семантика кривовата по моему мнению. отчистить движек можно от загруженных ресурсов. а тут отчистка экрана (окна, полотна, фреймбуффера) и т.д.

engine->updateWorld(0.0f);
какой именно? все? активные?
почему не world->update(0.0f); (если в скобках твининг, то почему не 1.0?)

насчет ньютона. физдвиг без аппаратного ускорения, имхо, не нужен. пока вы напишите двиг, пока напишите игру, уже у 80% юзеров будут карточки, способные аппаратно ускорять физику (тряпки, мягкие тела, флюиды и прочие красивости).

а вообще, так держать!
очень удачен синтаксис, понятен с первого взгляда (на 95%).
буду следить за обновлениями, надеюсь все у вас получится.
(Offline)
 
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Harter (02.02.2010), impersonalis (03.02.2010)
Старый 03.02.2010, 03:01   #13
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Сообщение от HolyDel Посмотреть сообщение
GAPI? Судя по контексту OpenGL (OpenAL а не DirectSound и FBO а не RTT да и Geometry Shaders наверное пока еще рано писать на DX, так как WinVista Win7 only)

сколько уже идет разработка? сколько разработчиков?


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


какой именно? все? активные?
почему не world->update(0.0f); (если в скобках твининг, то почему не 1.0?)

насчет ньютона. физдвиг без аппаратного ускорения, имхо, не нужен. пока вы напишите двиг, пока напишите игру, уже у 80% юзеров будут карточки, способные аппаратно ускорять физику (тряпки, мягкие тела, флюиды и прочие красивости).

а вообще, так держать!
очень удачен синтаксис, понятен с первого взгляда (на 95%).
буду следить за обновлениями, надеюсь все у вас получится.
Используется OpenGL,расширения версии 2.1.
В OpenGL есть расширение "ARB_geometry_shader".

engine->clear,для очистки текущего буффера.
engine->update\render World( deltaTime ),для очистки текущего мира,мир можно менять командой engine->setWorld.
для выгрузки всех ресурсов используется engine->exit();


Вобще есть уже первые нароботки по Deferred Renderer.
Использование DeferredRenderer:

void main(){

	Engine* engine = new Engine();


	// Инициализация
	engine->init(800,600);



	// Создаем мир
	World* world = engine->createWorld();

	engine->initDeferredRenderer();

	Camera* camera = engine->createCamera();
	camera->setLocalPosition(float3(0.0,0.0,-4));

	PointLight* point0 = engine->createPointLight();
	point0->setRange(200.0f);
	point0->setLocalPosition(float3(0,50,-30));

	Texture* colorMap = engine->loadTexture("color_map.dds");
	Texture* normalMap = engine->loadTexture("normal_map.dds");

	Material* material = new Material();
	material->setTexture( 0 , colorMap );
	material->setTexture( 1 , normalMap );
	material->setShader( engine->loadShader("mesh_vertex.cg","deferred_mesh_textured_bump_pixel.cg",0) );

	Mesh* cube = MeshUtil::getInstance().createCube();//createCube(material);
	cube->paint(material);
	cube->updateTangents();
	cube->updateBounds();
	//cube->scaleMesh( float3(1,0.1f,1) );

	cube->setLocalPosition(float3(0,0,5));
	cube->setLocalRotation(rotation(float3(0,0,0)*DEG2RAD));


	// Создаем всё для пост фильтера
	FrameBuffer* buffer = engine->createBuffer(800,600,FrameBuffer::COLOR0|FrameBuffer::COLOR1|FrameBuffer::DEPTH);


	// OpenAL менеджер
	OpenAL* al = engine->getAL();

	// Грузим звук
	Sound* sound = al->createSound("industrial2.mp3",Sound::STREAM||Sound::LOOP);

	// Добавляем в список проигрываемых
	sound->play();

	while( !engine->keyHit(OIS::KC_ESCAPE) ){

		if( engine->keyHit(OIS::KC_F5) )
			engine->makeScreenshoot();

		// устанавливаем рендер в буффер
		engine->setFrameBuffer( buffer);
	

		// очистка буффера цвета\глубины\стенцила
		engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
		
		cube->turn(float3(0,.5f,0));
		// рисуем мир
		engine->updateWorld(0.0f);
		engine->renderWorld(0.0f);

		// устанавливаем рендер в бек буффер
		engine->setFrameBuffer(0);

		engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
			
	
		DeferredRenderer::getInstance().render(buffer,camera,0.0f);

		// Вывод на экран
		engine->flip();
	}
	// заверщение работы движка
	engine->exit();
}
Point Light шейдер:
struct Input{
   float2 texcoord : TEXCOORD0;
};

struct Output{
   float4 color    : COLOR0;
};


void main( in Input In , out Output Out , uniform sampler2D texture0 , uniform sampler2D texture1 , uniform sampler2D texture2 , uniform float4x4 invViewProj ,  uniform float3 lightPosition , uniform float lightRange , uniform float3 cameraPosition ){

   float depth = tex2D(texture0,In.texcoord).x;
   float4 albedo = tex2D(texture1,In.texcoord);
      
   Out.color = albedo;
   
   if( depth >= 1.0f )
      return;
   

   float3 normal = tex2D(texture2,In.texcoord).xyz;
   
   // screen space coord
   float4 position;
   position.x = In.texcoord.x * 2.0f - 1.0f;
   position.y = -(In.texcoord.y * 2.0f - 1.0f);
   position.z = depth;
   position.w = 1.0f;
   position = mul( position , invViewProj );
   position /= position.w;
   
   // light vector
   float3 light_vector = normalize( lightPosition - position.xyz );
   
   // half vector
   float3 half_vector = normalize((cameraPosition - position.xyz) + (lightPosition - position.xyz));
   
   // light specular
   float specular  = 1.0f * pow(dot(half_vector,normal), 100);
   
   // light attenuation
   float attenuation = saturate(1.0f - distance(position.xyz, lightPosition) / lightRange);
  
   // final color
   Out.color = ( albedo * clamp(dot(normal,light_vector),0.0f,1.0f) ) + specular * attenuation;
}
Кст из потдерживаемых форматов текстур - tga,dds,png,jpg.
Миниатюры
Нажмите на изображение для увеличения
Название: DS.jpg
Просмотров: 955
Размер:	78.0 Кб
ID:	8966  
(Offline)
 
Сообщение было полезно следующим пользователям:
H@NON (03.02.2010)
Старый 03.02.2010, 07:25   #14
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Вобщем в DS,готовы Point\Directional источники(пока без теней),и ещё Ambient Light.
Исчу нормальную модельку для тестов пока,ибо из проекта пока низя ничего публично показывать( да и пока из моделей только персонажи ).
(Offline)
 
Старый 04.02.2010, 21:00   #15
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Будет ешё один тип шейдеров,Compute Shader,как DirectCompute в D3D,будет работать на OpenCL.
(Offline)
 
Закрытая тема


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com