-
1. Data: 2013-07-15 16:54:02
Temat: rasteryzacja malych kulek
Od: firr <p...@g...com>
chcialbym napisac jakas w miare poprawną
rasteryzacje malych kulek - problem z malymi
kólkami rysowanymi bressenhamem polega na tym
ze male kolka rysowane bressenhamem wygladają
tak
#
albo tak
#
###
#
jak sie ma cala hmare tekich kolek obracacnych w 3d
to to nie wyglada wtedy za dobrze
w sumie wieksze kolka dla srednicy d < kilkanascie
tez nie wygladaja same z siebie za dobrze - potrzebny
jest blending brzegów by to jakos wygladało
jak to npisac ?
1.
dla kolka o srednicy 1 mozna by prawdopodobnie
obliczyc lub stablicowac jasnosci czterech pixeli w
zaleznosci od ulamkowego przesuniecie - na podobnej zasadzie jak z wu-pixel [czyli
(1-fx)*(1-fy), (fx)*(1-fy), (1-fx)*(fy), (fx)*(fy) ] tylko ze dla kolka wzorek na te
czesci bylby nieco inny - JAKI ?
czy lepiej to tablicowac czy machnac jakis wzorek,
jaki ?
2. co zrobic dla d < 1 ? pomnozyc np wartosci
te z przypadku d==1 przez (d*d) - nie byloby
do konca scisle
3. co zrobic w przypadku kulek wiekszych niz 1
albo co zrobic w przypadku wogole sporych kulek
gdzie mozna sie zajmowac tylko belndingiem brzegów
W sumie dla malych kulek mozna pokusic sie o zwykle rasteryzowanie powiekszonych np 4
razy w x/y
kulek w pomocniczym buforze po czym downsampling
bloku 4x4 czarne/biale piksele do stopnia szarosci
ale to by troche muliło, moze jakies inne lepsze
rozwiazania?
-
2. Data: 2013-07-16 07:47:23
Temat: Re: rasteryzacja malych kulek
Od: bartekltg <b...@g...com>
W dniu 2013-07-15 16:54, firr pisze:
> chcialbym napisac jakas w miare poprawną
> rasteryzacje malych kulek - problem z malymi
> kólkami rysowanymi bressenhamem polega na tym
> ze male kolka rysowane bressenhamem wygladają
> tak
>
> #
A jak inaczej ma wyglądać jednopikselowa kulka?
>
> albo tak
>
> #
> ###
> #
>
> jak sie ma cala hmare tekich kolek obracacnych w 3d
> to to nie wyglada wtedy za dobrze
>
> w sumie wieksze kolka dla srednicy d < kilkanascie
> tez nie wygladaja same z siebie za dobrze - potrzebny
> jest blending brzegów by to jakos wygladało
https://www.dropbox.com/s/sy9qmtxqx02eoex/kulki.png
U mnie też brzydko wyglądają:(
Za to jak jest ich 2500 mają >70fps,
5000 kulek (zderzających się*) i 30fps.
SFML jest całkiem przyjemne!
Bawię się od paru h :)
*) oczywiście nie n^2, ale też nie porządna miotła,
kulki sortuję po jednej współrzędnej.
>
> jak to npisac ?
Ja dopisałem dwie linijki
sf::ContextSettings settings;
settings.antialiasingLevel = 8;
sf::RenderWindow window(sf::VideoMode(W, H), "SFML works!",
sf::Style::Default, settings);//ta już była
https://www.dropbox.com/s/x0ugtvf7hd72q8l/kulki_AA.p
ng
> 1.
>
> dla kolka o srednicy 1 mozna by prawdopodobnie
> obliczyc lub stablicowac jasnosci czterech pixeli w
> zaleznosci od ulamkowego przesuniecie - na podobnej zasadzie jak z wu-pixel [czyli
(1-fx)*(1-fy), (fx)*(1-fy), (1-fx)*(fy), (fx)*(fy) ] tylko ze dla kolka wzorek na te
czesci bylby nieco inny - JAKI ?
>
> czy lepiej to tablicowac czy machnac jakis wzorek,
Wzorek.
> jaki ?
proporcjonalnie do położenia.
> 2. co zrobic dla d < 1 ? pomnozyc np wartosci
> te z przypadku d==1 przez (d*d) - nie byloby
> do konca scisle
Zwiększ rozdzielczość do takiej, aby nikt nie gapił
się na pojedyncze piksele;-)
> 3. co zrobic w przypadku kulek wiekszych niz 1
> albo co zrobic w przypadku wogole sporych kulek
> gdzie mozna sie zajmowac tylko belndingiem brzegów
Użyj bressenhamanopodobnych algorytmów, ale
zamiast decydować, który piksel kolorować,
podziel zaciemnienie proporcjonalnie do odległości
(jeśli wyliczona wspolrzedna pokrywa się z pikselem,
jest czarny, jeśli w połowie pomiedzy dwoma - szare)
w przypadku okręgu (dla pełnego koła oczywiście tylko zewnatrzny
jest cieniowany)
pzdr
bartekltg
-
3. Data: 2013-07-16 08:47:54
Temat: Re: rasteryzacja malych kulek
Od: firr <p...@g...com>
W dniu wtorek, 16 lipca 2013 07:47:23 UTC+2 użytkownik bartekltg napisał:
> W dniu 2013-07-15 16:54, firr pisze:
> > chcialbym napisac jakas w miare poprawną
> > rasteryzacje malych kulek - problem z malymi
> > kólkami rysowanymi bressenhamem polega na tym
> > ze male kolka rysowane bressenhamem wygladają
> > tak
> >
> > #
>
>
>
> A jak inaczej ma wyglądać jednopikselowa kulka?
>
>
no na przyklad
^"
'%
-
4. Data: 2013-07-16 09:16:25
Temat: Re: rasteryzacja malych kulek
Od: firr <p...@g...com>
W dniu wtorek, 16 lipca 2013 07:47:23 UTC+2 użytkownik bartekltg napisał:
> W dniu 2013-07-15 16:54, firr pisze:
>
> > chcialbym napisac jakas w miare poprawną
>
> > rasteryzacje malych kulek - problem z malymi
>
> > kólkami rysowanymi bressenhamem polega na tym
>
> > ze male kolka rysowane bressenhamem wygladają
>
> > tak
>
> >
>
> > #
>
>
>
> A jak inaczej ma wyglądać jednopikselowa kulka?
>
>
>
> >
>
> > albo tak
>
> >
>
> > #
>
> > ###
>
> > #
>
>
>
>
>
>
>
> >
>
> > jak sie ma cala hmare tekich kolek obracacnych w 3d
>
> > to to nie wyglada wtedy za dobrze
>
> >
>
> > w sumie wieksze kolka dla srednicy d < kilkanascie
>
> > tez nie wygladaja same z siebie za dobrze - potrzebny
>
> > jest blending brzegów by to jakos wygladało
>
>
>
> https://www.dropbox.com/s/sy9qmtxqx02eoex/kulki.png
>
>
>
> U mnie też brzydko wyglądają:(
>
>
>
no nieduze kulki bez blendingu nie sa calkiem okragle a dla malych kulek bez
blendingu jest
raptowny skok
https://dl.dropboxusercontent.com/u/42887985/100kKul
ekSoftRast.jpg
i robi sie cos w rodzaju mgły/ siatki
wlasnie chcialbym to ew poprawic (jeszcze
wieksze problemy sa chyba z malymi trojkatami
gdzie np daleko oddalona szachownica bardzo
miga, pelza po niej masa artefaktów nie wiem
czy jest jakis dobry sposob napoprawienie tego,
moze wlasnie blendingiem - zalezaloby mi na tym
>
>
> Za to jak jest ich 2500 mają >70fps,
>
> 5000 kulek (zderzających się*) i 30fps.
>
>
>
> SFML jest całkiem przyjemne!
>
> Bawię się od paru h :)
>
>
>
>
>
> *) oczywiście nie n^2, ale też nie porządna miotła,
>
> kulki sortuję po jednej współrzędnej.
>
>
>
> >
>
> > jak to npisac ?
>
>
>
> Ja dopisałem dwie linijki
>
> sf::ContextSettings settings;
>
> settings.antialiasingLevel = 8;
>
> sf::RenderWindow window(sf::VideoMode(W, H), "SFML works!",
>
> sf::Style::Default, settings);//ta już była
>
>
>
> https://www.dropbox.com/s/x0ugtvf7hd72q8l/kulki_AA.p
ng
>
>
>
>
>
>
>
> > 1.
>
> >
>
> > dla kolka o srednicy 1 mozna by prawdopodobnie
>
> > obliczyc lub stablicowac jasnosci czterech pixeli w
>
> > zaleznosci od ulamkowego przesuniecie - na podobnej zasadzie jak z wu-pixel
[czyli (1-fx)*(1-fy), (fx)*(1-fy), (1-fx)*(fy), (fx)*(fy) ] tylko ze dla kolka wzorek
na te czesci bylby nieco inny - JAKI ?
>
> >
>
> > czy lepiej to tablicowac czy machnac jakis wzorek,
>
>
>
> Wzorek.
>
>
>
> > jaki ?
>
>
>
> proporcjonalnie do położenia.
>
ale jaki konkretnie ;/ dla kwadratu przsy przesuieciu +0.1 wzgledem 0.5, 0.5 jest
0.6, 0.4 pozniej 0.7, 0.3 itd a dla kulki ? musialby byc jakis
wzorek na objetosc (pole powierzchni) kulowej czapki,
>
>
> > 2. co zrobic dla d < 1 ? pomnozyc np wartosci
>
> > te z przypadku d==1 przez (d*d) - nie byloby
>
> > do konca scisle
>
>
>
> Zwiększ rozdzielczość do takiej, aby nikt nie gapił
>
> się na pojedyncze piksele;-)
>
>
to by mulilo i nie konieczie musi wygladac za dobrze
>
>
>
> > 3. co zrobic w przypadku kulek wiekszych niz 1
>
> > albo co zrobic w przypadku wogole sporych kulek
>
> > gdzie mozna sie zajmowac tylko belndingiem brzegów
>
>
>
>
>
> Użyj bressenhamanopodobnych algorytmów, ale
> zamiast decydować, który piksel kolorować,
> podziel zaciemnienie proporcjonalnie do odległości
> (jeśli wyliczona wspolrzedna pokrywa się z pikselem,
> jest czarny, jeśli w połowie pomiedzy dwoma - szare)
> w przypadku okręgu (dla pełnego koła oczywiście tylko zewnatrzny
> jest cieniowany)
>
wiadomo ze ogolnie np bressenhamo podobnych ;/
ale pytanie/zagadnienie jest wlasnie jakich
dokladnie
-
5. Data: 2013-07-16 09:42:26
Temat: Re: rasteryzacja malych kulek
Od: firr <p...@g...com>
>
> *) oczywiście nie n^2, ale też nie porządna miotła,
> kulki sortuję po jednej współrzędnej.
>
>
a w jakim kontenerze i jakim algorytmem ?
jak pozniej wyglada petla na warunek
ew testu kolizji ?
-
6. Data: 2013-07-16 09:48:36
Temat: Re: rasteryzacja malych kulek
Od: firr <p...@g...com>
W dniu wtorek, 16 lipca 2013 08:47:54 UTC+2 użytkownik firr napisał:
> W dniu wtorek, 16 lipca 2013 07:47:23 UTC+2 użytkownik bartekltg napisał:
>
> > W dniu 2013-07-15 16:54, firr pisze:
>
> > > chcialbym napisac jakas w miare poprawną
>
> > > rasteryzacje malych kulek - problem z malymi
>
> > > kólkami rysowanymi bressenhamem polega na tym
>
> > > ze male kolka rysowane bressenhamem wygladają
>
> > > tak
>
> > >
>
> > > #
>
> >
>
> >
>
> >
>
> > A jak inaczej ma wyglądać jednopikselowa kulka?
>
> >
>
> >
>
>
>
> no na przyklad
>
>
>
> ^"
> '%
dla kwadracika to by moglo byc np
[ 40 % * 30 % ] [ 40 % * 70 % ]
[ 60 % * 30 % ] [ 60 % * 70 % ]
dla kulki to tez jest chyba mozliwe ale
dla innych przesuniec - sa to nieco inne
jasnosci ciekawe czy byloby widoczne
golym okiem
-
7. Data: 2013-07-16 10:19:07
Temat: Re: rasteryzacja malych kulek
Od: bartekltg <b...@g...com>
W dniu 2013-07-16 09:42, firr pisze:
>>
>> *) oczywiście nie n^2, ale też nie porządna miotła,
>> kulki sortuję po jednej współrzędnej.
>>
>>
> a w jakim kontenerze i jakim algorytmem ?
> jak pozniej wyglada petla na warunek
> ew testu kolizji ?
Algorytm to dużo powiedziane. Normalnie masz dwie
zagnieżdżone pętle, sprawdzające każdy z każdym. Jeśli
jednak kulki mam posortowane po jednej zmiennej,
np x, to mogę sprawdzić, czy już nie odjechałem po x
o 2r - wtedy na pewno już kolizji nie bedzie i mogę
przerwać wewnętrzną pętlę.
sort(kule.begin(),kule.end(),[](kulka&a,kulka&b){ret
urn
(a.pozycja.x<b.pozycja.x);});
for (auto it=kule.begin();it!=kule.end();++it)
{
it->evolucja((clock.getElapsedTime()-t).asSeconds()*
predkosc);
for (auto itt=it+1; (itt!=kule.end()) && abs(itt->pozycja.x -
it->pozycja.x)<=itt->r+it->r;++itt) //wbrew pozorom zakladamy stale r
{
it->kolizja(*itt);
}
}
Klasa kilka ma metodę evolucja, pobierającą odstęp czasu i przesuwającą
kulkę oraz kolizja, która wprost twierdzeniem pitagorasa sprzwdza,
czy wystąpiła kolizja i ewentualnie podmienia prędkości.
Miotła pewnie byłaby lepsza.
Mięsko z kolizji:
bool zaszla=false;
if (dot(pozycja-druga.pozycja)<kw(r+druga.r))
{
zaszla=true;
sf::Vector2< float > normalna = pozycja-druga.pozycja;
normalna = normalna / sqrt(dot(normalna));
float v_zbl = dot(normalna,predkosc) - dot(normalna,druga.predkosc);
sf::Vector2f dv = normalna* v_zbl;
if (v_zbl<0)
{
predkosc -= dv;
druga.predkosc += dv;
}
}
kw to kwadrat, dot to iloczyn skalarny (sam ze sobą dla
jednego argumentu)
pzdr
bartekltg
-
8. Data: 2013-07-16 10:46:53
Temat: Re: rasteryzacja malych kulek
Od: firr <p...@g...com>
W dniu wtorek, 16 lipca 2013 10:19:07 UTC+2 użytkownik bartekltg napisał:
> W dniu 2013-07-16 09:42, firr pisze:
>
> >>
>
> >> *) oczywiście nie n^2, ale też nie porządna miotła,
>
> >> kulki sortuję po jednej współrzędnej.
>
> >>
>
> >>
>
> > a w jakim kontenerze i jakim algorytmem ?
>
> > jak pozniej wyglada petla na warunek
>
> > ew testu kolizji ?
>
>
>
> Algorytm to dużo powiedziane. Normalnie masz dwie
>
> zagnieżdżone pętle, sprawdzające każdy z każdym. Jeśli
>
> jednak kulki mam posortowane po jednej zmiennej,
>
> np x, to mogę sprawdzić, czy już nie odjechałem po x
>
> o 2r - wtedy na pewno już kolizji nie bedzie i mogę
>
> przerwać wewnętrzną pętlę.
>
>
>
> sort(kule.begin(),kule.end(),[](kulka&a,kulka&b){ret
urn
>
> (a.pozycja.x<b.pozycja.x);});
>
>
>
> for (auto it=kule.begin();it!=kule.end();++it)
>
> {
>
> it->evolucja((clock.getElapsedTime()-t).asSeconds()*
predkosc);
>
>
>
> for (auto itt=it+1; (itt!=kule.end()) && abs(itt->pozycja.x -
>
> it->pozycja.x)<=itt->r+it->r;++itt) //wbrew pozorom zakladamy stale r
>
> {
>
> it->kolizja(*itt);
>
> }
>
> }
>
>
ok, w sumie jest to zapewne b dobry sposob
jesliby tylko wywalic globalne sortowanie,
wlasciwie prawie staly koszt
a miotła to co to takiego ??
-
9. Data: 2013-07-16 11:53:26
Temat: Re: rasteryzacja malych kulek
Od: bartekltg <b...@g...com>
W dniu 2013-07-16 10:46, firr pisze:
> ok, w sumie jest to zapewne b dobry sposob
> jesliby tylko wywalic globalne sortowanie,
> wlasciwie prawie staly koszt
Nie wywalisz, musisz sortować w każdym przebiegu.
Sortowanie i tak jest szybsze niż 'każdy z każdym'
>
> a miotła to co to takiego ??
Robisz sobie strukturkę, która trzyma posortowane
po y kulki, ale tylko z pewnego przedzialo x-ów
(szerokości 2r). Przechodzisz po posortowanych po x
kulkach, dorzucasz do strukturki (sprawdzajkac kolizje)
i wyrzucasz z niej, które już się zderzyć nie mogą.
Zaimplementowałem na szybko na std::set<kulka*>
Działa wolniej :] Za mało obiektów w interesujacym
obszarze, by zyskać przewagę.
pzdr
bartekltg
-
10. Data: 2013-07-16 12:14:46
Temat: Re: rasteryzacja malych kulek
Od: firr <p...@g...com>
W dniu wtorek, 16 lipca 2013 11:53:26 UTC+2 użytkownik bartekltg napisał:
> W dniu 2013-07-16 10:46, firr pisze:
>
>
>
> > ok, w sumie jest to zapewne b dobry sposob
>
> > jesliby tylko wywalic globalne sortowanie,
>
> > wlasciwie prawie staly koszt
>
>
>
> Nie wywalisz, musisz sortować w każdym przebiegu.
>
> Sortowanie i tak jest szybsze niż 'każdy z każdym'
>
>
>
> >
>
> > a miotła to co to takiego ??
>
>
>
> Robisz sobie strukturkę, która trzyma posortowane
>
> po y kulki, ale tylko z pewnego przedzialo x-ów
>
> (szerokości 2r). Przechodzisz po posortowanych po x
>
> kulkach, dorzucasz do strukturki (sprawdzajkac kolizje)
>
> i wyrzucasz z niej, które już się zderzyć nie mogą.
>
>
>
> Zaimplementowałem na szybko na std::set<kulka*>
>
> Działa wolniej :] Za mało obiektów w interesujacym
>
> obszarze, by zyskać przewagę.
>
nie zrozumialem ale niewazne, ta opcja co
mowilem z utrzymywaniem sortów (po x y z) jest b
dobra (nic lepszego nie widze),
chwilowo bardziej interesuja mnie --->
kwestia recznych rasteryzacji z blendingiem
bo to tez ciekawy temat a pracuje nad frameworkiem