|
03.04.2009, 04:29
|
#601
|
☭
Регистрация: 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
|
ПроЭктировщик
Регистрация: 10.01.2009
Адрес: хз
Сообщений: 177
Написано 18 полезных сообщений (для 44 пользователей)
|
Ответ: Sigel
Сообщение от HolyDel
бинго! и без z координаты.
|
А почему? Имхо, нужно хотябы одно значение для одной фигуры, чтобы знать, какая над какой нарисуется. Или у тебя идёт ручная прорисовка после рендера?
__________________
Я бы изменил мир, но Бог не даёт исходников...
|
(Offline)
|
|
03.04.2009, 14:00
|
#603
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Sigel
Или у тебя идёт ручная прорисовка после рендера?
|
именно. это аналог картонк, текста и т.д.
|
(Offline)
|
|
07.04.2009, 10:58
|
#604
|
☭
Регистрация: 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();
(осторожно, скрин получился весомым)
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 за это полезное сообщение:
|
|
07.04.2009, 13:06
|
#605
|
scientist.alien
Регистрация: 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
|
ПроЭктировщик
Регистрация: 10.01.2009
Адрес: хз
Сообщений: 177
Написано 18 полезных сообщений (для 44 пользователей)
|
Ответ: Sigel
320 фпс.
Насчёт реализации 2д - у меня тоже так только у меня не нужно рисовать объекты вручную, просто нужно вызвать одну функцию рендеринга 2д...
ЗЫ: можно ли загружать 2д-фигуры из файла? если да, то в каком редакторе можно их создавать?
__________________
Я бы изменил мир, но Бог не даёт исходников...
|
(Offline)
|
|
07.04.2009, 21:06
|
#607
|
☭
Регистрация: 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
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Sigel
Олег, а ты знаком с Max2D (BlitzMax) отрисовкой 2D, или с FastImage (он аналогичен), я про логику и синтаксис, они отличаются от Blitz2D, расширенее и удобнее.
Что насчёт блендов, цвета, альфы?
Можешь написать пожалуста перечень функций по сопровождению 2D рендеринга (позиции, цвет ну и т.д.).
Обрати внимание на синтаксис, очень важный моммент, Очень, от синтаксиса будет сильно меняться комфорт, учитывай это
|
(Offline)
|
|
07.04.2009, 22:23
|
#609
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Sigel
ИМХО рисовать картинки ручками удобнее: больше контроля над ситуацией!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
07.04.2009, 22:38
|
#610
|
☭
Регистрация: 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
|
.
Регистрация: 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
|
☭
Регистрация: 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
|
Бывалый
Регистрация: 04.01.2008
Адрес: Казахстан \ Талдыкорган
Сообщений: 659
Написано 170 полезных сообщений (для 509 пользователей)
|
Ответ: Sigel
HolyDel - А по чему все функции для работы с 2д глобальны ?
__________________
Жизнь как говориться игра- делать игры моя профессия(с)
Программирование, это религия! Её нужно исповедовать.
|
(Offline)
|
|
08.04.2009, 09:28
|
#614
|
ПроЭктировщик
Регистрация: 10.01.2009
Адрес: хз
Сообщений: 177
Написано 18 полезных сообщений (для 44 пользователей)
|
Ответ: Sigel
>значит у тебя 2д картинки это такие же ентити как и 3д объекты
угу
>ИМХО рисовать картинки ручками удобнее: больше контроля над ситуацией!
Программировать на ассемблере удобнее: больше контроля над ситуацией! Может и 3д хочешь ручками рисовать?)
__________________
Я бы изменил мир, но Бог не даёт исходников...
Последний раз редактировалось -=Jack=-, 08.04.2009 в 16:07.
|
(Offline)
|
|
08.04.2009, 09:48
|
#615
|
☭
Регистрация: 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);
и т.д. но мне это кажется лишним. по крайней мере пока. зачем громоздить тонны кода, когда можно не громоздить ?
пример простейшего скининга (в добавок еще и немного глючного). все считается на цпу и рисуется самым тормозным методом. поэтому и производительность крайне низка.
это самый первый вариант, тут нет никаких отдельных анимаций, ни управления костями, ни даже иерархии костей. т.е. самый тупой скининг, какой только возможен.
Последний раз редактировалось HolyDel, 08.04.2009 в 13:49.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:09.
|