Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
14-100384
Volly
2003-03-13 11:18
2003.03.31
Изменение интерфейса


14-100433
NetKnight
2003-03-14 11:54
2003.03.31
КИНТЕ ДОКУМЕНТАЦИЮ ПО РАБОТЕ С SysTray.


8-100337
spleen
2002-12-26 14:00
2003.03.31
установка font (type,size,style) api для печати на принтер


3-100147
Sergei
2003-03-11 15:13
2003.03.31
ADO SELECT .... INTO tempdb1


6-100352
kol
2003-02-07 13:07
2003.03.31
Порт, используемый SQL сервером





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский