Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Wektory  (Przeczytany 2100 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Nitro__

  • Gość
Wektory
« Odpowiedź #15 dnia: 08 Maja 2010, 22:30 »
Jak wyzej, podzielic obliczenia i wtedy uzyskamy maksymalna wydajnosc.
Chociaz proponuje tez poznac sposob na plotery, ponad 256 dotsow w ramce, choc bez perspektywy, to chyba jest standardem teraz, a nie zmudne mnozenia(patrz notke do EoD).

zielok__

  • Gość
Wektory
« Odpowiedź #16 dnia: 09 Maja 2010, 08:36 »
Nitro ja spokojnie osiagam przeliczenie (bez malowania) ponad 280 punktow na ramke a kod do przeliczania mam jeszcze nie w pelni zoptymalizowany (m.in brak \"unrolled code\"). Oczywiscie bez perspektywy. I to spokojnie mozemy uzyc rowniez do wypelnianych wektorow.

\"Mnozenie\" trzeba zawsze wykonac (tylko nie jest takie zwykle matematyczne mnozenie bo byloby za wolne tylko uzyskujemy od razu wynik - kilka cykli na mnozenie (ktore jest zwyklym dodawaniem wartosci:))) bo inaczej raczej nie da sie przeliczyc punktow.
Zreszta to \"mnozenie\" u mnie wyglada tak:
lda $xxxx
adc $yyyy
adc $zzzz
- tu \"mnoze\" trzy wartosci 8bitowe ze znakiem i uzyskuje wynik 8 bitowy ze znakiem (oczywiscie odpowiednio pomniejszego do przestrzeni 8 bitow)

W gwoli wyjasnienia to inne techniki optymalizacyjne takze mi sa znane (np. obliczenie niektorych punktow na podstawie innych - gdzie uzyskujemy przeksztalcenie punktu w trzech osiach wraz z rzutowaniem w kilku cyklach)

Co do EOD to nie wiem jak to tam jest rozwiazane (nie chce mi sie /nie umiem/ analizowac czyjegos kodu) ale sadze, ze jest to podobnie jak u mnie.

Oczywiscie mozemy na karb stacji przerzucic kilka(nascie) punktow i wtedy mamy maksymalna wydajnosc tylko to co pisze Kisiel , ze lepiej policzyc w stacji i malowac komciem jest wprowadzaniem w blad bo w stacji nie da sie za duzo punktow policzyc.

Jacek31

  • Gość
Wektory
« Odpowiedź #17 dnia: 09 Maja 2010, 09:57 »
Nitro daj linka do tej serii artykulow o wektorach. Jak nie chcesz bruzdzic nimi tu to prosze na PW.

Nitro__

  • Gość
Wektory
« Odpowiedź #18 dnia: 09 Maja 2010, 11:54 »
Aha, czyli z matematyka jestem do tylu jesli chodzi o wektory, juz sie zamykam \"Smile\"
Wspomniane arty, nazywaja sie \"A Different Perspective\":
http://www.ffd2.com/fridge/chacking/c=hacking8.txt
http://www.ffd2.com/fridge/chacking/c=hacking9.txt
http://www.ffd2.com/fridge/chacking/c=hacking10.txt
Choc jak widac moga sluzyc tylko i wylacznie celom edukacyjnym, wszystko sie rozwinelo.

zielok__

  • Gość
Wektory
« Odpowiedź #19 dnia: 15 Maja 2010, 20:46 »
Czytalem je kiedys.. Polecam sa naprawde przydatne...

ps. Przeliczam juz 380 punktow na frame (teraz biore sie jeszcze za generacje speedcode (bo na razie to dziala w petli)

fenek__

  • Gość
Wektory
« Odpowiedź #20 dnia: 23 Maja 2010, 16:58 »
                   
zielok napisal:

Zreszta to \"mnozenie\" u mnie wyglada tak:
lda $xxxx
adc $yyyy
adc $zzzz
- tu \"mnoze\" trzy wartosci 8bitowe ze znakiem i uzyskuje wynik 8 bitowy ze znakiem (oczywiscie odpowiednio pomniejszego do przestrzeni 8 bitow)

Ja tylko pytam z czystej ciekawosci, rozumiem ze wczesniej liczysz macierz 9 elementow ? Ja cos takiego robilem do obracania prostych obiektow,  wektory \"cartoon/crayon\" w sweet infection.
Na mala ilosc wierzcholkow u mnie dodawanie wygladalo tak samo tylko
parametry odwolywaly sie tylko do strony zerowej.
Czy mozesz miec dowolne wspolrzedne punktow obiektu w 3d czy obiekt wyglada jak we wszystkich demach jakby  byl \"przyciagniety\" do \"siatki 3d\".
Pytalem o macierz, bo jak sie ma obliczona 9 elementowa macierz to mozna za pomoca tablic skalowania przeskalowac jedna macierz na
X macierzy (max. 27) i umiescic 28 macierzy 9 elementowych na stronie zerowej. Wtedy wszystkie obroty mozna zrobic na dodawaniach 8 bitowych 3 cyklowych adc $xx a nie adc $xxxx ale obiekt musi byc \"przyciagniety\" do siatki 3d okreslonej przez przeskalowane macierze.

offtop:
Serio mnie to interesuje, ja bardziej sie zastanawiam nad pojsciem w to co pokazal Graham w jednym dentrze zeby tego nieszczesnego sinusa rozszerzyc do 512 bajtow i 16 bitow lub wiecej.

Osobiscie uwazam ze ploty ktore zapierdalaja w jedna ramke powinny miec wartosci delt na katach mniejsze niz 1,4 stopnia.
 \"Very

fenek__

  • Gość
Wektory
« Odpowiedź #21 dnia: 23 Maja 2010, 17:06 »
                   
Nitro napisal:

... proponuje tez poznac sposob na plotery, ponad 256 dotsow w ramce, choc bez perspektywy, to chyba jest standardem teraz

Jeszcze sie odniose do tego choc moglem wyzej. Takie plotery kojarze  z pierwszego ich wydania Oneder/Oxyron. Czy ja juz nie dowidze czy obiekty sa nadal \"kwadratowe\" przylegajace \"do siatki\" ?!?
Faktem jest ze robiac obiekty z odbijaniem mozna wtedy siatke wykorzystac na pol lub 1/4 obiektu \"zwiekszajac\" efektywnie dokladnosc calego tak utworzonego obiektu.

zielok__

  • Gość
Wektory
« Odpowiedź #22 dnia: 23 Maja 2010, 18:06 »
                   
fenek napisal:

Ja tylko pytam z czystej ciekawosci, rozumiem ze wczesniej liczysz macierz 9 elementow ? Ja cos takiego robilem do obracania prostych obiektow,  wektory \"cartoon/crayon\" w sweet infection.
Na mala ilosc wierzcholkow u mnie dodawanie wygladalo tak samo tylko
parametry odwolywaly sie tylko do strony zerowej.


Optymalizacja w moim kodzie poszla juz oczywiscie duzo dalej tj takze korzystam ze strony zerowej. Aktualnie mam osiagniete przeliczenie 260 punktow na ramke  z malowaniem, czyszczeniem, double bufferem na fullscreenie. Oczywiscie zostaje jeszcze spory zapas cykli (na muzyke  i jeszcze troche).

Macierz z racji rezygnacji z perspektywy ma 6 elementow (nie ma wiecej potrzeby). Zrezygnowalem z wyliczania \"Z\" i obliczania perspektywy czyli wyglada to tak (pseudokod)

x\'=x*matrix[0][0] +y*matrix[0][1] +z*matrix[0][2]
y\'=x*matrix[1][0] +y*matrix[1][1] +z*matrix[1][2]

x\' i y\' zawieraja juz wspolrzedne do namalowania punktu 2d

                   
fenek napisal:
Czy mozesz miec dowolne wspolrzedne punktow obiektu w 3d czy obiekt wyglada jak we wszystkich demach jakby  byl \"przyciagniety\" do \"siatki 3d\".


Hmm tego nie rozumie.
Z mojego rozumowania wychodzi, ze moge miec dowolne (oczywiscie w odpowiedniej skali).
Tylko, ze w EOD czy OneDer takze te obiekty wygladaja dla mnie normalnie.

                   
fenek napisal:
Pytalem o macierz, bo jak sie ma obliczona 9 elementowa macierz to mozna za pomoca tablic skalowania przeskalowac jedna macierz na
X macierzy (max. 27) i umiescic 28 macierzy 9 elementowych na stronie zerowej. Wtedy wszystkie obroty mozna zrobic na dodawaniach 8 bitowych 3 cyklowych adc $xx a nie adc $xxxx ale obiekt musi byc \"przyciagniety\" do siatki 3d okreslonej przez przeskalowane macierze.


A teraz chyba zrozumialem to wczesniejsze:) Ja poszedlem w innym kierunku i u mnie wyglada to tak
Mam obliczona macierz i \"mnoze\" z kazdym elementem macierzy wszystkie mozliwe wartosci x,y lub z (w zaleznosci z ktorym elementem \"mnoze\"). Tutaj sa dodatkowe optymalizacje czyli licze tylko wartosci x,y i z dodatnie bo ujemne uzyskuje przy wyliczniu zamieniajac adc na sbc
Reasumujac, to obiekty mam tak samo jak we wszystkich demach przyciagniete do siatki 3d. (no chyba, ze nie zrozumialem)
Twoje rozwiazanie wyglada ciekawie i dla testow chyba je zrobie (moze bedzie szybsze).

                   
fenek napisal:
offtop:
Serio mnie to interesuje, ja bardziej sie zastanawiam nad pojsciem w to co pokazal Graham w jednym dentrze zeby tego nieszczesnego sinusa rozszerzyc do 512 bajtow i 16 bitow lub wiecej.

Osobiscie uwazam ze ploty ktore zapierdalaja w jedna ramke powinny miec wartosci delt na katach mniejsze niz 1,4 stopnia.
 \"Very


Ano zapierdzielaja \"Smile\" Ja jestem po testowej analizie (i o ile nie popelnilem gdzies bledu) to takie rozwiazanie nie spowoduje znacznego spowolnienia (ale bedzie wolniej \"Smile\")

Ja popelnilem pare bledow przy projektowaniu... Najpierw zrobilem przeliczanie bez macierzy (osiagnalem bodajze 16 punktow - ale z perspektywa) potem uzylem macierzy, rezygnacja z perspektywy (i tak nie widac, ze jej nie ma), zamiast lda $xxxx uzylem strony zerowej i mnostwo innych optymalizacji. Moglem to skodowac zdecydowanie szybciej gdybym na poczatku dokladnie to przemyslal \"Smile\"

fenek__

  • Gość
Wektory
« Odpowiedź #23 dnia: 24 Maja 2010, 11:08 »
>Mam obliczona macierz i \"mnoze\" z kazdym elementem macierzy >wszystkie mozliwe wartosci x,y lub z (w zaleznosci z ktorym elementem >\"mnoze\"). Tutaj sa dodatkowe optymalizacje czyli licze tylko wartosci x,y i >z dodatnie bo ujemne uzyskuje przy wyliczniu zamieniajac adc na sbc
>
Czyli robisz to sensowniej bo wyliczasz wartosci dla wspolrzednych obiektu tak jak zostal zdefiniowany a mi chodzi oto ze mam wrazenie ze obiekty
sa najpierw zdefiniowane w 3D a potem ogranicza sie \"wszystkie mozliwe wartosci\" x,y,z tak zeby bylo ich jak najmniej i zmienia sie wartosci zdefiniowanego obiektu.
Moze to tylko moje wrazenie, chyba sie blizej temu przyjrze.

edit: oka juz sie przyjrzalem juz kumam, ze jednak w EoD jest opisane ze wspolrzedne dotow sa od siebie niezalezne

Klax__

  • Gość
Wektory
« Odpowiedź #24 dnia: 11 Października 2010, 14:23 »
                   
zielok napisal:
                   
zielok napisal:
Ja to wiem, ze tak najlepiej tylko, ze nigdy stacji nie kodowalem \"Smile\"


A jednak nie \"Smile\" Stacja z powodu malej ilosci pamieci i braku miejsca nie pozwoli szybko przeliczyc wielu punktow. Owszem dla kilkunastu punktow da pewnie przyspieszenie ale czym wieksza ilosc punktow do przeliczenia tym obliczanie w stacji dyskow bedzie proporcjonalnie wolniejsze.


Zawsze mozna dolozyc 32kB ramu wedlug mojego pomyslu \"Wink\"

booker__

  • Gość
Wektory
« Odpowiedź #25 dnia: 11 Października 2010, 14:26 »
No, i burstem ja, burstem!  \"Cool\"

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
Wektory
« Odpowiedź #26 dnia: 11 Października 2010, 16:39 »
stacja szybciej punkty przeliczy niz c64 zdazy je narysowac (wypelnianie itp)
Podkrec procka podkrec procka \"Wink\"
idz wyprostowany wśród tych co idą na kolanach

...w przypadku checi zakupu UK1541,GA,MA,T8500,T7501 prosze o kontakt na Facebooku, haslo: UK1541....

Jacek31

  • Gość
Wektory
« Odpowiedź #27 dnia: 13 Października 2010, 13:15 »
Nie wiem czy dobrze kombinuje, ale skoro macie stacje dyskow i C64, to tak naprawde jak spojrzycie na to od strony Hardweru to dysponujecie systemem 2 jajowym. Czyli nalezalo by siegnac raczej po metody programowania rownoleglego (asynchronicznego, bo 2 rozne zegary CPU), ewentualnie przetwarzanie potokowe.
Skoro stacja ma za malo RAMu ale jest za to szybka to moze dobrym rozwiazaniem bylo by stworzenie do niej biblioteki czasochlonnych operacji graficznych, i wykorzystywac ja jako kooprocesor graficzny, ktory nie liczyl by calosci tylko \"rownolegle\" do C64 bardziej wymagajace elementy.
Oczywiscie wymaga to stworzenia nowej koncepcji, i pewnie wykorzystanie przerwan oraz synchronizacji, ale powinno byc wykonalne.

fenek__

  • Gość
Wektory
« Odpowiedź #28 dnia: 13 Października 2010, 16:44 »
Przy odrobinie dobrych checi mozna by sie nawet pokusic
o zbudowanie macierzy z np. 3 stacji dyskow 1541 i c-64.
Wykorzystac to do wykonywania obliczen 3d np. punktu.
Z c-64 wysyla sie wierzcholek w 3d (wsp.X, Y, Z) do stacji rX.
W stacji rX wykonywane sa procedury obrotu wierzcholka wokol
osi X. Po wykonaniu obliczen nowe wspolrzedne przesylane sa do stacji rY.
W stacji rY wykonywane sa procedury obrotu wierzcholka wokol osi Y.
( w tym samym czasie z c-64 przekazywane sa wspolrzedne x,y,z kolejnego
wierzcholka do stacji rX).
Kolejno nowe wspolrzedne ze stacji rY wedruja do stacji rZ gdzie wykonywane
sa procedury obrotu wierzcholka wokol osi Z. W tym czasie nastepuje przeslanie
danych ze stacji rX do stacji rZ i danych z c-64 do stacji rX.
Po obliczeniach ze stacji rZ wedruja dane do c64 i ten rysuje dota.
czyli: rZ->c64, rY->rZ, rX->rY
To tak mniej-wiecej.

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
Wektory
« Odpowiedź #29 dnia: 13 Października 2010, 17:20 »
niestety to bedzie \"zrzut kompo\"... bo kto ma 3 stacje, trzeba by sie zrzucic \"Wink\" Moze lepiej zamiast 1541, uzyc czegos innego ?
idz wyprostowany wśród tych co idą na kolanach

...w przypadku checi zakupu UK1541,GA,MA,T8500,T7501 prosze o kontakt na Facebooku, haslo: UK1541....