migotanie przy rysowaniu :/

0

problem jest taki: na formie wyświetlam sporo małych bimap (Canvas.Draw(x, y, Bitmapa)), potem rysuje sobie siatke ( czyli kilka lini ) za pomocą Canvas.lineTo(x, y) i nie wiem why ale mi ta siatka migocze, a przecież żadnej animacji tutaj nie ma, więc w sumie nie wiem o co chidzi, podwójne buforowanie?
[stuk]
Zapomniałem dodać, że wszystkie procedury rysujące sa umieszczone w Timerze o Interval'u 1.

0

pogrzało cię? interwał ustawiony na 1ms to 1000 odświeżeń na sekundę! ekran ma co najwyżej 100Hz, a standardowo 70 - po co ci taka kosmiczna częstotliwość? zresztą, żaden komputer nie uciągnie rysowania tylu elementów z taką częstotliwością. więc nic dziwnego, że ci wszsytko migocze.
poza tym - doublebuffered := true.

0

jak powiedzial kolega za szybko.
albo zmniejszysz czestotliwosc zegara, albo po prostu rysuj wtedy kiedy to konieczne, tzn gdy cos sie zmienia na wyswietlanym plotnie, nie ma sensu odswiezac widoku sceny jesli ta sie nie zmienia.
a jesli to nie pomaga to (doublebuffered:=true) to uzyj DX

0

interval 1 = 1000 fps, dobrze mówie? może i za szybko ale np. w aplikacji openGL ( pustym okni ) wyciągam 999 fps :P

Ha, ha ha... ok, ustawiam interval np. na 100 albo i 1000 i co? Grafika wyświetla sie raz na sekunde :P a siatka migocze chyba dlatego że jest rysowana na bitmapach, bo jak rysuje po za nimi to jest ok.

Jak to może być za szybko jak zasze jak np. piszecie gry w DelphiX to interval DXTimera ustwaiamy na 1

0

interval 1 = 1000 fps, dobrze mówie? może i za szybko ale np. w aplikacji openGL ( pustym okni ) wyciągam 999 fps

po1: po co ci tyle?
po2. bo jest puste okno (jak bys mial mniejsza podzialke (czyt. mniej niz 1 msek) to by ci wiecej wyszlo)
po3. czytaj moj powyzszy post :D

0

aha a w openGL jak np. rysuje trojkącik to wpsów nadal mam dużo, ok. 970 :P

// miszczu, po pierwsze to nie jest miejsce na przechwałki, po drugie ekran i tak nie wyciąga ponad 100Hz, po trzecie ten topic zaraz może "zniknąć", więc nie zachowuj się jak przygłup - ŁF

0

ale przeciez ci miga, a tego nie powinno byc.
chodzi mi oto zebys rysowal w takim tempie jakie jest potrzebne, i jakie ekran moze ort!.
ja mam to w petli repeat until (czyli o wiele szybciej niz ty) i program sam wtedy wie ile moze wyciagnac, ile potrzebuje. Mam wtedyz jakies 70 i mi to calkowicie wystarcza, chodzi plynnie, ladnie, bez migania.

0

<ort>migota </ort>tylko wtedy kiedy jest to rysowane na wcześniej rysowanych bitmapach, to może przez to, jak jest rysowane na czystej formie to nic nie nawala

0

ostatnio coraz bardziej paranoiczne tematy pojawiają się na forum (ostatnio ktoś wyskoczył z sleep(1 div 1000) D:D)
polecam zająć się pisaniem prostych programów, typu notatnik z zaawansowanymi opcjami :D, albo prosty edytor grafiki typu Paint...
a za rok, może dwa... wrócisz do tematu z DirectX'em w małym palcu...
jak chcesz zrobić cos profesjonalnie... to na pewno nie rysuj 1000 razy na sekundę obrazu na zwykłych komponentach delphi!!!
a tak przy okazji:
maksymalna częstotliwość obrazu= 100 Hz
zwyczajna częstotliwość obrazu= 70 Hz
częstotliwość telewizyjna= 25Hz (w USA 30Hz)
maksymalna częstotliwość widzialna ludzkim okiem= 24Hz !!!

obliczenia:
1s = 1000ms
1000ms / 25Hz = 40!

wnioski:
wystarczy jak w Timerze ustawisz Interval na 40! i obraz będzie tak samo płynny jak przy 1!
i nie upieraj się że jakieś tam Quake'i mają po 300 klatek na sekundę... bo i tak widzisz z tego tylko 24!

a Tobie ort!... bo rysujesz od razu na formie...
rysuj najpierw w pamięci, a później przerysuj gotowy obraz.

// doookładnie tak! [browar] - ŁF

0

a ja mam pytanko trochę w temacie, więc wrzucam tutaj:
mam sobie kontrolkę ListView; posiada ona pole DoubleBuffered i dzięki temu przy zmianie zawartości tej kontrolki nic mi nie miga... nic, oprócz nagłówków kolumn (TColumn) (zresztą, proponuję zerknąć o co mi chodzi: http://4programmers.net/download.php?id=1312). po pierwsze - po cholerę nagłówki kolumn się przerysowują, po drugie, dlaczego nie mają właściwości DoubleBuffered, i po trzecie - co z tym zrobić? wkurza mnie to migotanie, i wiem, że da się zrobić tak, żeby go nie było (patrz Menedżer zadań), tylko nie wiem jak. [stuk]

[dopisane]
ej, czy ktoś to w ogóle przeczytał?

0

maksymalna częstotliwość widzialna ludzkim okiem= 24Hz !

hmm serio? Ja widze roznice miedzy 30FPS a 60FPS...

A co do pytania Łukasza, to o ile sie nie myle w komponentach takich jak ListView mozna nadawac style okien. A gdzies w helpie widzialem styl, ktory nie odrysowuje okien przy np najechaniu.

0

polecam zająć się pisaniem prostych programów, typu notatnik z zaawansowanymi opcjami :D, albo prosty edytor grafiki typu Paint...
a za rok, może dwa... wrócisz do tematu z DirectX'em w małym palcu...
jak chcesz zrobić cos profesjonalnie... to na pewno nie rysuj 1000 razy na sekundę obrazu na zwykłych komponentach delphi!

  1. nie wiem jak jest z rysowaniem na komponentach Delphi, więc ok, tu sie z toba zgadzam.

  2. DirectX, kodze w DirectX i OpenGL kawał czasu ale w C++, nie w Delphi a teraz tylko zwykłym Canvase'm chce narysowac linie!!

  3. programistą gier to ty nie będziesz, zawsze trzeba wydusić max fps a potem i tak ono będzie spadać razem z ilością wyświetlanej grafiki i innych bajerów, jak zobaczymy że gierka na koniec ma 120 fps czy 500 fps, to możemy sobie zmniejszyć "intrval" na stały , np 30 fps, jak to jest zrobione w grze HALO.

0

Ja uważam, że trzeba po prostu rysować na jakimś buforze, a potem ten bufor rzucić na formę. Interval, wystarczy, jak będzie 50.

0

dokładnie! thenkles, dokładnie!
zwykła rzecz... standartowy bufor na obraz... nie wiem co tu jeszcze robi ten temat...
X_programmer... skoro porgramujesz w DirectX i OpenGL, to powinno być dla Ciebie OCZYWISTE że najpierw rysuje się obraz w pamieci, a później wyświetla na ekranie, to są czyste, logiczne podstawy. i nie mieszaj Hardware'owych teorii programowania grafiki, do zwykłego wyświetlania przy użyciu CPU... a co do mojego programowania gier, to nie narzekam.
Wolverine... skoro widzisz więcej niż 24 klatek na sekundę... to może jesteś kosmitą? nie... a tak poważnie... to może być kwestia zgrania odświeżania monitora z programem... w każdym razie dam sobie wydłubać oczy jeśli widzę więcej niż 24-25 stałych obrazów na sekundę.

0

MoG <- ja wiem że najpierw cza rysowac w buforze żeby wszystko ładnie chcodziło, ale nie zajmowałem sie wczesniej grafką w delphi, no jak widać trzeba rysowac w buforze i tak zrobie, koniec tematu i dzieki za pomoc :) THE END!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1