среда, 15 декабря 2010 г.


да уж бага с дефом ну вот вообще не видно хД честно не помню уже зачем вставлял эту фотку ) но есть значит надо было зачем то %)

четверг, 2 декабря 2010 г.

стряхивая пыль сообщаю ньюс ))

Привет ))) вобщем я как и мой многоуважаемый друг Серж ))) перешел на нормальный язык сосуществования ! Теперь работаю только с одним человеком ( по коммерции ) поэтому есть и время и желания и деньги чтобы двигаться дальше ( вобще при любых обстоятельствах я бы не забросил свой проект ! )

итак что же нового ?

- половина движка переписанна на С++
- написан сценеграф
- кеш и загрузка моделей ( все продумано вся архитектура и т/д )
- подшлифован экпортер моделей и анимаций из макса )))

вобщем полностью готова модельная часть ! после ds буду переписывать ландшафт ( пока не GCM пока алгоритм сержа ! ) переписывать буду в плане уменьшать объем данных !

скоро обновлю новости и выложу скрины !

да и теперь весь двиг будет писаться на С++ с минимальной оберткой на Obj C ! ( GUI в ближайшее время НЕ будет переписываться ! так как написан он хорошо и работает как модуль ! пока нет не какой надобности переписывать его на С++ в дальнейшем конечно же перепишу )

2014
и ода как я и ожидал я всегда возвращаюсь к разработке своего движка ) нужно сказать что с того времени очень много кода оказалось и посей день полезным ) 

четверг, 20 мая 2010 г.

GUI system ver.2

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

рантайм полностью свободен ! в рантайме даже update не вызывается у контролов ! если нужно контрол обновлять каждый кадр его можно подписать на событие EnterFrame и в handlere обновлять как душе удобно …

вобщем давно меня мучающая фигня исправлена

да и я опять сел за движок )) после длительного перерыва …

UPD было принято решение, введения понятия StaticText и DynamicText смысл такой
- StaticText при переполнении заданного количества символов заставляет GUISystem пересобрать весь !!! текстовый буфер ( что конечно в наличии большого количества строк даст лаг ( однако пересобрка произойдет только ОДИН раз на превышение maxChar )
- DynamicText же рендериться вобще отдельно от общей схемы, а именно он попадает в категорию контроллов которые рендерят себя сами … соответственно мы получаем профит на статический строках ( кстати можно статик строке задать например 10 символов и в этом диапазоне играть, тогда профит статика будет сохраняться ) и получаем возможность создать строку с заведомо неизвестным количеством символов !

так же в категорию Extended попадают контроллы аля - скроллер комбобокс так же могут обычные контроллы перейти в категорию Extended для этого не нада не чего делать достаточно задать контроллу маску или другое спец свойство ))

пока что dynamic/extended готовы на уровне двига и пока что развиваться и выводиться для пользования не будут, так как на данный момент есть куча других более важных вещей )) однако вывести весь функционал на ружу для удобного пользования, не займет много времени ! ))) так что как только понадобиться что то из этого, так сразу будет сделано - пока что весь текст - Static с завышенным maxChar )))


2014
найти бы еще теперь исходники этого ) правда за это время написан уже другой 2д двиг ) так что надобности особо в этом нету 

вторник, 16 марта 2010 г.

GUI next Update - Fonts

самое главное исправил все глюки с отображением текста ! вобще пол системы GUIText переписал ) зато теперь текст рисуется мего четко и как надо ))) итак онотолле пришло время сказать что я доволен шрифтами !
итак начнемс
создаем текстуру заданного размера ( 0-8192*8192)
далее создаем шрифты ( но всегда есть базовый шрифт он создается автоматически ) например так
[gui createFont:"../Fonts/tahoma.ttf" fontSize:8 fontName:@"tahomaCur"];
[gui createFont:"../tahoma.ttf" fontSize:11 fontName:@"tahoma1Cur"];
[gui createFont:"../tahoma.ttf" fontSize:14 fontName:@"tahoma2Cur"];
[gui createFont:"../tahoma.ttf" fontSize:16 fontName:@"tahoma3Cur"];
[gui createFont:"../tahoma.ttf" fontSize:20 fontName:@"tahoma4Cur"];
[gui createFont:"../tahoma.ttf" fontSize:10 fontName:@"tahoma5Cur"];
[gui createFont:"../tahoma.ttf" fontSize:12 fontName:@"tahoma6Cur"];
[gui createFont:"../tahoma.ttf" fontSize:24 fontName:@"tahoma7Cur"];
[gui createFont:"../tahoma.ttf" fontSize:16 fontName:@"tahoma8Cur"];
[gui createFont:"../tahoma.ttf" fontSize:40 fontName:@"tahoma9Cur"];
[gui createFont:"../tahoma.ttf" fontSize:12 fontName:@"tahoma0Cur"];
и получим вот такую текстурку шрифта


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

ну а теперь можно спокойно создать текстовое поле с любым шрифтом например так
Text*stringTest = [[Text alloc] init];
stringTest.width = 300;
stringTest.height = 50;
stringTest.x = 10;
stringTest.fontName = @"tahoma7Cur";
stringTest.color = 0xffffff;
stringTest.text = @"iArt Онотолле в аттаке ррр 1адин";
[settingOverlay addChild:stringTest];
и увидим

едем дальше подписываем на клик от мыши данное текстовое поле
[stringTest addEventListener:Event.MouseClick method:getMethod(self,@"changeFont:")];
и
-(void)changeFont:(MouseEvent)event
{
Text*target = event.target;

if (funText) {
target.color = 0x00ff00;
target.fontName = @"tahoma9Cur";
target.width = 900;
}else
{
target.color = 0xf0ff0f;
target.fontName = @"baseFont";
target.width = 300;
}
target.x+=50;
funText=!funText;
}
теперь при клике на него мы будем менять цвет/размер/шрифт
например при первом клике увидим

а при следующем клике

нажми для увеличения
ну и напоследок шрифтик из аватара



2014
а вот что то будет полезно и сейчас )

понедельник, 15 марта 2010 г.

Update GUI text

написав небольшой код

Text*stringTest = [[Text alloc] init];
stringTest.width = 200;
stringTest.color = 0xffffff;
stringTest.text = @"онотолле Привет";
[settingOverlay addChild:stringTest]; // settingOverlay это просто оверлей о котором писалось ниже

выведем строку на экран !

вторник, 9 марта 2010 г.

Progress msg

1) давным давно уже сделан GUI ( полностью система сообщений, вывод текста, кнопок )
не много поподробней, опишу
итак, есть главные контроллы такие как
а) Overlay ( виртуальный экран ( может содержать в себе окна кнопки текст и прочее )
б) окна ( могут содержать кнопки текст и прочие контролы ( окно младше оверлея )
итак каждый овелей и каждое окно имеет свой VBO буфер контроллов и отдельно буфер текста
вывод происходит так
- Дип контроллы овелея ( не окна )
- Дип текст оверлея ( и всех контроллов окна не трогаются )
- Дип первое окно овелея
- Дип Текст первого окна овелея
- итак далее для все окон текущего оверлея
когда рисование овелея закончилось, начинается рисование следующего овелея в перечисленной выше последовательности ( на деле больше одного оверлея не бывает и больше 2 дипов для рендеринга всего Гуя тоже редкость)
и т/д/

схематичное создание
Overlay*testOverlay = .... содаем экран
Button * testButton = ... создаем простую кнопку
testOverlay addChild: testButton ... добавляем кнопку на экран
testButton addEventListener:MouseEvent.Click listener:sameFunction.... подписываем кнопку на событие мыши КЛик
все контроллы наследованы от DisplayObject, у которого есть стандартный набор свойств ( visible/alpha/width ets ) соответственно сами контроллы имеют набор своих свойств свойственных им ( например Text имеет свойства форматирования текста и т/д/ ) при срабатывании сообщения, в листенер передается ссылка на объект + свойства сообщения ( например на MouseMove передается дельта, старт мауз координаты и прочее, то есть можно сделать так

-(void)sameFunction:(Event):event
{
event.target.x // выдаст координаты testButton по оси Х так же можно обратиться к другим свойствам контролла ( например для контролла Text можно получить содержимое строки/текстового поля через свойство text и т/д/
event.mouseX // выдаст координаты клика мыши так же доступны координаты глобальные экранные и контролла
ets ...
}
если внимательно проанализировать рендеринг, то становиться ясно, что схема позволяет верно отображать контроллы в минимальное количество Дипов

любой контролл может быть подписан на определенные сообщения ( есть стандартный набор сообщение, но так же есть и свойственные только определенным контроллам сообщения )
любой контролл может быть подписан на любое количество сообщений и т/д/

вобщем все как нада и все удобно !
render
Overlay
- controlls VBO
- textControlls VBO
- window controll VBO
- window text VBO
next Overlay
ets
текст создается учиывая ширину каждого глифа при помощи фритайпа и просто текстуры ( два варианта рендера ) для текста можно спокойно задать цвет в формате 0xrgba например результат
Text*testText
testText.color = 0xff00ff
testText.text = "helloWorld"
будет

нада отметить что ВСЕ расчеты касательно задания текста размеров позиции и прочего происходят ТОЛЬКО при срабатывании сеттера ! то есть каждый кадр не чего не считается ! используются уже рассчитанные данные ! каждый кадр только обновляются буфера !



2) скелетная анимация
-полностью готова система иерархического перемноженная скелета
-блендинг анимаций
-система стэйтов
идл режимы для сбленденной анимации ( то есть если мы шли и начали бежать и махать рукой, вначале произойдет бленд этих анимаций, с указанным весом и типом перехода между анимации ( после перехода, если мы например так и продолжаем бежать и махать рукой, то функция бленда уже не будет вызываться ! так как уже будет полный круг сбленденной анимации и вызывать тяжелые расчеты уже не нужно ! то есть контроллер анимации перейдет в режим Идл )
можно устанавливать
-с какого кадра брать у трека кадры для бленда
-в какой кадр общей анимации вставлять бленд
-до какого кадра общей анимации вставлять трек
-до какого кадра берутся кадры из трека для бленда
-реверс анимации
-замедленная анимация
-разные переходы между треками
-тип трека ( луп /разовый )
-для каждого трека можно задать вес максимальный, минимальный, дельту и прочее
и еще куча возможностей



3) ландшафт
система лодинга ( все считается при загрузки ) ( спасибо Сержу ! L его идея )
система такая
в VBO загружаются вершины полосками
2 4 2 4
1 3 1 3
2 4 2 4
1 3 1 3
далее под каждый чанк создаются 9 буферов
int offsetLeft;
int offsetRight;
int offsetTop;
int offsetBottom;
int offsetRightBottom;
int offsetRightTop;
int offsetLeftBottom;
int offsetLeftTop;
int offsetNONTRIM;
int offsetALLTRIM;
итак схема простая
в центре находиться Lod1 offsetALLTRIM, по краям к нему стыкуются чанки с Lod2 у которых края трименные к которым линкуется Lod3 и т/д/ вобщем на деле это проще объясняется
преимущество такого подхода в
- нет реалтайм расчетов
- нет разрывов на стыках лодов

техническое инфо
в вертекстом буфере лежит весь ландшафт, разбитый на чанки, то есть например при выводе любого чанка, нам нужны индексы 0 1 2 3 ( поэтому для любого чанка, мы можем использовать один универсальный буфер ) а так как у нас их 9 ( специально под каждый вариант триминга ) то мы можем отрисовать ландшафт без разрывов на стыках
ЗЫ ландшафт выводиться стрипами

каждый чанк обернут в ббокс который разбит еще на 4 ббокса
сделано это для редактирования
при клике происходит следующее
опускается луч который колайдиться с ббоксами чанков, при нахождении чанка происходит поиск нужного сабБокса (одного из 4 ) и уже в нем находится нужный треугольник, далее описывать не стоит итак все ясно ( например можно выдавить вершинку кликом -
для раскраски используются бленд карты ( чанк = бленд карта ) подгрузка динамическая

еще много чего по мелочи готово, но будет переделываться !

на данный момент собираюсь доделать раскраску и заняться тенями !


2014
кстати эти сурсы лежат и ждут своего часа ) хотя сейчас мне не очень нравится хранить 9 буферов )

вторник, 12 января 2010 г.

делаю GUI

понедельник, 11 января 2010 г.

я тут, пришел