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

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

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

Ответ
 
Опции темы
Старый 03.04.2009, 04:29   #601
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Sigel

1 float - 4 байта.
весь цвет занимает всего 4 байта.
позиция - 3 float -а.
получается жестко задано:
float3 (position) + float3(normal) + float2(UV). - 32 байта на вершину.
опционально:
float1 (rgba) - еще 4 байта.

т.е. в самом простом случае будет 32 мегобайта грубо говоря.
с цветом - 36.
если еще одни UV - 44
если еще одни UVWT - 60

W компонента в позиции - это проецирование ккординат.
т.е правильная позиция вершины это не x,y,z а
x/w,y/w,z/w

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

* сделал сохранение и загрузку шейпов из файла

Последний раз редактировалось HolyDel, 03.04.2009 в 07:44.
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 12:08   #602
-=Jack=-
ПроЭктировщик
 
Аватар для -=Jack=-
 
Регистрация: 10.01.2009
Адрес: хз
Сообщений: 177
Написано 18 полезных сообщений
(для 44 пользователей)
Ответ: Sigel

Сообщение от HolyDel Посмотреть сообщение
бинго! и без z координаты.
А почему? Имхо, нужно хотябы одно значение для одной фигуры, чтобы знать, какая над какой нарисуется. Или у тебя идёт ручная прорисовка после рендера?
__________________
Я бы изменил мир, но Бог не даёт исходников...
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 14:00   #603
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Sigel

Или у тебя идёт ручная прорисовка после рендера?
именно. это аналог картонк, текста и т.д.
(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 10:58   #604
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Sigel

решил немного переделать 2д систему. теперь можно выводить 2д графику так называемыми кусками. Причем внетри одного куска может быть дргой (вся графика внутреннего куска будет выводиться с учетом трансформации родительской геометрии).
как то так:
Begin2D();
Translate2D(carx,cary);
Turn2D(carangle);
car->Draw();

 Begin2D();
 Translate(-10,wheel1_suspendy);
 wheel->Draw();
 End2D();


 Begin2D();
 Translate(10,wheel2_suspendy);
 wheel->Draw();
 End2D();

End2D();
(осторожно, скрин получился весомым)
Нажмите на изображение для увеличения
Название: ShapesTest 2009-04-07 09-55-03-35.jpg
Просмотров: 813
Размер:	478.1 Кб
ID:	5843

New2DSystemTest.zip


#define SIGEL_USE_ONLY

#include <sigel/ISigel.h>
float a=0;
Shape *star = 0;

void DrawFigure(int x,int y)
{
	Begin2D();
	Translate2D(x,y);
	Turn2D(a);
	Scale2D(2);
	
	StartTextDraw();
	for(int i=0;i<360;i+=5)
	{

		Color(hsl(i*255/360,255,128));

		Begin2D();
		Turn2D(i);
		Translate2D(100,0);
		Scale2D(0.75f);
		char buff[32];
		sprintf_s(buff,32,"angle: %f",AngleNormalize(a+i));
		Text(buff,0,0);
		End2D();
	}
	EndTextDraw();

	star->Draw();
	Begin2D();
	Turn2D(a * -2);
	Scale2D(2.3);
	star->Draw();
	End2D();

	for(int i=0;i<6;++i)
	{
		Scale2D(0.8f);
		Turn2D(a * 0.5);
		star->Draw();
	}
	
	End2D();
}
sGAME
{
	debug::startlog();
	//Init(800,600,32,2,8);
	Init();

	AppTitle("ShapesTest");

	VWait(0);
	CameraHelper ch;

	TFont *fnt = new TFont("tahoma.txt");
	fnt->Bind();

#define CREATE_NEW_STAR_SHAPE
#ifdef CREATE_NEW_STAR_SHAPE

	int cntl = 128;

	star = new Shape(cntl*3,cntl*3);
	
	for(int i=0;i<cntl*3;++i)
	{
		star->SetIndex(i,i);
	}

	float r1 = 75;
	float r2 = 100;

	for(int i=0;i<cntl;++i)
	{
		float a = (float)i * 6.283f / (float)cntl;
		float da = 6.283f / (float)(cntl*2);

		float x,y;

		x = sin(a)*r2;
		y = cos(a)*r2;

		star->SetVertexPos(i*3 + 0,x,y);
		star->SetVertexColor(i*3 + 0,255,255,0);

		x = sin(a-da)*r1;
		y = cos(a-da)*r1;

		star->SetVertexPos(i*3 + 2,x,y);
		star->SetVertexColor(i*3 + 2,255,0,0);

		x = sin(a+da)*r1;
		y = cos(a+da)*r1;

		star->SetVertexPos(i*3 + 1,x,y);
		star->SetVertexColor(i*3 + 1,255,0,0);

	}

	star->SetPrimType(GL_TRIANGLES);

	star->Save("megastar.shape");

	star->DrawMode(SDM_STATIC);	
#else
	star = new Shape("megastar.shape");
#endif

	float dt=0;

	a=0;
	Start2D();

	while(!KeyDown(VK_ESCAPE))
	{
		dt = GetFrameTime();
		a+=dt*0.01f;

		Render();
		Blend(BM_ADD);

		fnt->Smooth(1);

		DrawFigure(0,0);
		DrawFigure(0,ScreenHeight());
		DrawFigure(ScreenWidth(),0);
		DrawFigure(ScreenWidth(),ScreenHeight());
		DrawFigure(ScreenWidth()/2,ScreenHeight()/2);

		fnt->Smooth(0);
		Color(255,255,255,255);
		Text(GetFPS(),10,10);
		Flip();

		//Delay(16.67f);
	}

	DeInit();
	debug::endlog();
};
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
ABTOMAT (07.04.2009), impersonalis (07.04.2009), Taugeshtu (07.04.2009)
Старый 07.04.2009, 13:06   #605
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Sigel

Мьсье, вы маньяк!) В самом лучшем смысле этого слова
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 16:12   #606
-=Jack=-
ПроЭктировщик
 
Аватар для -=Jack=-
 
Регистрация: 10.01.2009
Адрес: хз
Сообщений: 177
Написано 18 полезных сообщений
(для 44 пользователей)
Ответ: Sigel

320 фпс.
Насчёт реализации 2д - у меня тоже так только у меня не нужно рисовать объекты вручную, просто нужно вызвать одну функцию рендеринга 2д...

ЗЫ: можно ли загружать 2д-фигуры из файла? если да, то в каком редакторе можно их создавать?
__________________
Я бы изменил мир, но Бог не даёт исходников...
(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 21:06   #607
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Sigel

можно ли загружать 2д-фигуры из файла?
да. более того, можно фигуру даже сохранять в файл.

если да, то в каком редакторе можно их создавать?
это сделано скорее для кеширования, чем для чего то еще.

Насчёт реализации 2д - у меня тоже так только у меня не нужно рисовать объекты вручную, просто нужно вызвать одну функцию рендеринга 2д...
значит у тебя 2д картинки это такие же ентити как и 3д объекты
я решил оставить блицовую схему, потому, что она мне кажется удобнее.
т.е порядок и прочее я оставляю на совести пользователя.

*добавил макросы для отладки, чтобы писался файл, строка, и собственно текст в логи. из __FILE__ и __LINE__ естественно.
*доработал вывод текста (ато раньше он был кривым, сам менял блендинг)
*теперь текстурный шрифт тоже можно "забиндить". После этого текст можно выводить просто командой Text.

Последний раз редактировалось HolyDel, 07.04.2009 в 21:51.
(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 22:23   #608
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Sigel

Олег, а ты знаком с Max2D (BlitzMax) отрисовкой 2D, или с FastImage (он аналогичен), я про логику и синтаксис, они отличаются от Blitz2D, расширенее и удобнее.
Что насчёт блендов, цвета, альфы?
Можешь написать пожалуста перечень функций по сопровождению 2D рендеринга (позиции, цвет ну и т.д.).
Обрати внимание на синтаксис, очень важный моммент, Очень, от синтаксиса будет сильно меняться комфорт, учитывай это
(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 22:23   #609
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Sigel

ИМХО рисовать картинки ручками удобнее: больше контроля над ситуацией!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

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

(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 22:38   #610
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Sigel

MoKa
есть два основных способа вывести 2д графику.
1-й - простой. аля блитц3д. тупо выводим ее и все (указывая позицию и прочие параметры).
например:
Render();
Rect(10,10,20,50);
Oval(100,400,100);
usershape->Draw(400,100);
Flip();
2-й - сложный.
Render();

Begin2D();
Translate2D(10,20);
Rect(0,0,20,50);
End2D();

Begin2D();
Translate2D(100,400);
Oval(0,0,100);
End2D();

Begin2D();
Translate2D(400,100);
usershape->Draw();
End2D();
Flip();
во втором случае мы получаем больший контроль за матрицей трансформацией, например можно легко поворачивать, скалить, перемещать объект. Кроме того получаем дополнительный бонус - некое подобие родительской привязки.

Цвет, Блендиг, Альфа-тест, Шейдеры, Фбо, привязка текстур и прочее обрабатывается одинаково для обоих случаев.

Последний раз редактировалось HolyDel, 07.04.2009 в 23:00.
(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 22:53   #611
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Sigel

В Max2D будет так:
SetColor 255,128,0
SetAlpha .5
SetBlend LIGHTBLEND
DrawOval 100,50,30,30

SetScale 2,3
SetRotation 45
DrawRect 10,10,50,50
При этом там можно указывать центр рисования от куда хочешь, таким образом можно легко реализовать камеру (в 2D).
По мне так такой способ весьма функциональный, чем он будет уступать кроме как родительственной концепции?
(Offline)
 
Ответить с цитированием
Старый 07.04.2009, 23:08   #612
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Sigel

по сути - этот метод на уровне гапи реализуется также как и у меня. просто уровень выше.

его можно расписать так:
SetScale(x,y)
{
scalex = x; //некая глобальная переменная
scaley = y; //некая глобальная переменная
}

SetRotation(a)
{
rotation = a; //некая глобальная переменная
}

DrawRect(x,y,w,h)
{
Begin2D();
Translate2D(x,y);
Turn2D(rotation);
Scale2D(scalex,scaley);
_DrawRect(0,0,w,h);
End2D();
}
я просто предоставляю доступ к более низкому уровню.

Последний раз редактировалось HolyDel, 07.04.2009 в 23:41.
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 08:51   #613
FDsagizi
Бывалый
 
Аватар для FDsagizi
 
Регистрация: 04.01.2008
Адрес: Казахстан \ Талдыкорган
Сообщений: 659
Написано 170 полезных сообщений
(для 509 пользователей)
Ответ: Sigel

HolyDel - А по чему все функции для работы с 2д глобальны ?
__________________
Жизнь как говориться игра- делать игры моя профессия(с)

Программирование, это религия! Её нужно исповедовать.
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 09:28   #614
-=Jack=-
ПроЭктировщик
 
Аватар для -=Jack=-
 
Регистрация: 10.01.2009
Адрес: хз
Сообщений: 177
Написано 18 полезных сообщений
(для 44 пользователей)
Ответ: Sigel

>значит у тебя 2д картинки это такие же ентити как и 3д объекты
угу
>ИМХО рисовать картинки ручками удобнее: больше контроля над ситуацией!
Программировать на ассемблере удобнее: больше контроля над ситуацией! Может и 3д хочешь ручками рисовать?)
__________________
Я бы изменил мир, но Бог не даёт исходников...

Последний раз редактировалось -=Jack=-, 08.04.2009 в 16:07.
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 09:48   #615
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Sigel

HolyDel - А по чему все функции для работы с 2д глобальны ?
у меня половина функций глобальны. я даже хз зачем их по неймспейсам или graphics2dmanager-ам прятать. Впринципе я знаю, так принято писать типа:
Engine *engine = new Enging();
engine->Init();
Renderer *renderer = new OpenGLRenderer();
engine->ApplyRenderer(renderer);
и т.д. но мне это кажется лишним. по крайней мере пока. зачем громоздить тонны кода, когда можно не громоздить ?

пример простейшего скининга (в добавок еще и немного глючного). все считается на цпу и рисуется самым тормозным методом. поэтому и производительность крайне низка.
это самый первый вариант, тут нет никаких отдельных анимаций, ни управления костями, ни даже иерархии костей. т.е. самый тупой скининг, какой только возможен.
Миниатюры
Нажмите на изображение для увеличения
Название: skinedmesh.jpg
Просмотров: 713
Размер:	70.3 Кб
ID:	5860  
Вложения
Тип файла: zip SkinedMeshTest.zip (649.2 Кб, 376 просмотров)

Последний раз редактировалось HolyDel, 08.04.2009 в 13:49.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (08.04.2009)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sigel Tutorial 1. Свой Crimsoland. HolyDel C++ 21 02.04.2009 21:25
Sigel vs WarTech HolyDel Болтовня 31 09.04.2008 19:13
Sigel::EntityShaders HolyDel Болтовня 8 01.04.2008 17:52


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


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