Текущий архив: 2003.03.31;
Скачать: CL | DM;
ВнизНадо ли??? Найти похожие ветки
← →
drake (2002-12-22 23:58) [0]Решил написать Life-подобную прогу, использовал поначалу канвас,
но по мере увеличения количества клеток столкнулся с приличными тормозами графики, есть маза поменять приоритет программы на более высокй, но это черевато неприятными последствиями и глюками винды, а можно и переписать вывод графики под Opengl, так вот вопрос: что лучше сделать???
← →
HardClubber (2002-12-23 00:02) [1]Определённо одно - изменение приоритета не повлечёт решения проблемы.
Проблема либо с математикой, либо и впрямь стоит опробовать GL
← →
drin (2002-12-23 03:37) [2]Лудьше и удобнее переходить на DirectX, только не используя там всякую фигню типа DelphiX
← →
MBo (2002-12-23 06:38) [3]Дело отнюдь не в приоритете, а в алгоритме вывода. Для подобных игр производительности методов Canvas хватит за глаза, надо только для исключения мерцания выводить все на битмап в памяти, а потом Draw его на форму.
← →
drake (2002-12-23 17:15) [4]В математикой всё ок, мерцания нет, но имеются жуткие тормоза при
отрисовке попиксельно 400х400 массива клеток, видно прям как идёт полоска перерисовки :( А чем opengl тут будет хуже directx??
← →
MBo (2002-12-23 17:35) [5]>выводить все на битмап в памяти
пробовал?
← →
drake (2002-12-23 17:40) [6]А КАК:)?
← →
MBo (2002-12-23 17:56) [7]b:=Tbitmap.Create;
b.height:={Form1.}ClientHeight;
...
куча рисования на b
...
Canvas.Draw(0,0,b)
← →
Бурундук (2002-12-23 18:08) [8]Добавление:
Самые большие тормоза происходят при
присвоении св-в кисти и перу.
Попробуй создать заранее нужные перья/кисти и вместо
//Bitmap.Canvas.Brush.Color := clRed;
делать
Bitmap.Canvas.Brush.Assign(RedBrush);
← →
drake (2002-12-23 19:02) [9]Попробовал оба способа....
Результат : при выводе на виртуальный имаг с последуюшим
переносом на канвас результата никакого 12-13fps как и было
2) Попробовал создать разные кисти заранее - fps просел до 8 :(
Пока что самый быстрый вариант у меня с самого начала был ,
похоже придётся сесть разучивать directX :)
← →
sniknik (2002-12-23 19:19) [10]еще совет если позволите, отрисовку самих клеток тоже делай через Canvas.Draw(x, y, BitMask), естественно сначала нарисуй шаблоны. И над математикой подумай (не верю что она у тебя идеальна) может на asm расчеты делать?.
а directX вряд ли поможет, ну не для этого он, по моему.
← →
drake (2002-12-23 19:46) [11]ну почему не для??? посмотри прогу Life32 там массив клеток миллион на миллион и работает очень быстро и прога эта юзает для
вывода графики directX вот так.
← →
sniknik (2002-12-23 20:23) [12]Посмотрел,
там в опциях есть галочка Enable DirectX, так вот при обоих положениях этой галочки скорость отрисовки (у меня) одинакова.
скачивал
Life32 v2.15
с http://life32.lifepatterns.net
чегото мне кажется что единственное оправдание этой галочки ссылка внизу "скачать DirectX" (на правах рекламы).
но это конечно мое личное мнение.
← →
drake (2002-12-23 22:00) [13]хз у меня тоже примерно одинаковые скорости что с галкой, что без неё, но как шустро она пашет-то ;) мне бы исходнички её =)
тем более что писана она на дельфах 3
← →
sniknik (2002-12-23 22:31) [14]Еще в а голову пришло, элементарно конечно а вдруг у тебя не так.
Смысл. Рисовать не все подряд, а только если в клетке произошли изменения.
и насчет математики, как думаеш сколько занимает общет "миллион на миллион"? поставь у себя такой масив (если получится) и отключи вывод нахрен. (посмотреть на чистое время расчета)
← →
down (2002-12-23 22:54) [15]Нужно хранить не массив клеток в миллион на миллион, а список координат "живых" клеток, тогда и памяти меньше уйдет, и обработка будет быстрее.
← →
Danlicha (2002-12-23 22:58) [16]Да что вы ерундой занимаетесь, пардон. Во-первых, лайф красивее, когда она не по пикселям, а по довольно большим квадратикам. Их ещё можно разными цветами разукрашивать - ворзаст. А если уж припёрло по пикселям - не нужно никакого DirectDraw - берёте битмап, делаете его DIB, получаете адрес его в памяти и рисуете туда. И не надо никакого асемблера!
← →
sniknik (2002-12-24 08:34) [17]Danlicha © (23.12.02 22:58)
Про пикселя никто не говорил, с чего ты взял? Есть такое понятие, область просмотра, и размер клеток каой хочется такой и ставится. Ты ветку вообще читал, что обсуждается?
← →
jfo (2002-12-24 09:45) [18]Хм года 2 назад писал подобную прогу... скорость достаточно высокая... правда и поле не сильно большое... если бы была возможность выложить в кладовку (не выкладывается) выложил бы :-)
← →
AlexT1000 (2002-12-24 11:30) [19]ты однозначно что то неправильно делаешь.
пересчитывать вообще нужно только, те которые будут в данный момент видны на экране.
и соответсвенно рисовать только их .
во вторых есть пару трюков которые ускоряют вывод на канву формы и убирают мерцание
procedure WMErase(var msg:TMessage); message WM_ERASEBKGND;
procedure TFormImage.WMErase(var msg: TMessage);
begin
msg.Result := 1;
end;
это раз. во вторых как говорил MBO рисовать все на битмап в памяти а потом гнать на форму.
ну и естественно заготовить текстуры квадратиков заранее и просто делть bitblt их на битмап.
вот такт то.
← →
Snap (2002-12-24 11:35) [20]А не прдкинете примерчик работы с DIB?
← →
dRake (2002-12-24 14:28) [21]Вот вывод на битмап в память с последующим выводом на канвас
мне реально помог,исчезло моргание, я посмотрел - математика
реально почти не влияет - что миллион на миллион, что 100Х100
разницы почти нет(если графику отключить), а вот графа реально просаживает машину, попробую попросить другана через GL вывод графики делать... Кстати никто не подскажет, можно ли как-нибудь
быстрее выводить графику, не использую методы канваса, используя например winAPI или что-нибудь подобное??
← →
dRake (2002-12-24 14:31) [22]>procedure WMErase(var msg:TMessage); message WM_ERASEBKGND;
>procedure TFormImage.WMErase(var msg: TMessage);
>begin
> msg.Result := 1;
>end;
2 AlexT1000 : А ты не прокоментируешь, что делают эти процедуры??
← →
dRake (2002-12-24 14:45) [23]Ещё просьба, если кто-то писал похожую игру: киньте пожалуйста исходники мне на мыло, буду очень признателен :)
← →
sniknik (2002-12-24 17:09) [24]dRake © (24.12.02 14:28)
>а вот графа реально просаживает машину
а если сделать многопоточным? реальный способ разгрузить процесс.
← →
AlexT1000 (2002-12-24 18:17) [25]> dRake
насколько я помню эта процедура как следует из ее имени отрабатыет очистку бэкграунда формы . если возвращать 1 то ты типа сам отвечаешь за очистку этой формы. иначе винды.
что то в этом роде.
вообщем несколько устраняет блыманье
← →
dRake (2002-12-24 23:04) [26]2 AlexT1000
Кстати играет какую нибудь роль то, что я вывожу не на канву формы,а на канвас paintbox"а??
← →
AlexT1000 (2002-12-26 12:10) [27]да . на канвас формы наиболее быстро. и помогает та штука,
которую я тебе написал
← →
dRake (2002-12-26 23:10) [28]лана пусть живёт прога как есть, а я лучше щас фрактальчиками займусь :)
Страницы: 1 вся ветка
Текущий архив: 2003.03.31;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.007 c