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

Autor Wątek: Wektory  (Przeczytany 2445 razy)

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

zielok__

  • Gość
Wektory
« dnia: 03 Marca 2009, 20:18 »
W sumie jeszcze tego nawet nie zaczalem kodowac ale, ze w sumie nigdy nie skonczylem swojej wektorowki (w realtimie) na c64 to stwierdzilem, ze moze warto nadrobic zaleglosci.

A wiec chcialbym sie dowiedziec czy tak ja to sobie rozplanowalem ma sens czy gdzie jakis fatalny blad popelniam lub ewentualnie mozna to zrobic lepiej.

Zalozenia - wektory na znakach (czyli 128px x 128px)
1) Robie tablice o wielkosci 256 bajtow na SIN i COS - Oczywiscie uwzgleniam tu 360 stopni, tablice do perspective projection (takze o wielkosci 256 bajtow)
2) wartosci punktow i katy obroty wokol oi trzymam w jednym bajcie (oczywiscie na kazda wartosc)
3) wykonuje dzialanie czyli
punkt*cos,x - kazda z wartosci jest 8 bitowa wynik uzyskuje 16 bitowy
punkt*sin,x - tak samo jak wyzej
otrzymane wartosci 16 bitowe odejmuje (lub dodaje w zaleznosci od tego wokol ktorej robie osi)
4) otrzymana wartosc zamieniam na 8 bitowa (aby moc robic nastepne przeksztalcenia mnozacz dwie 8 bitowe wartosci) - i tutaj sie zastanawiam czy nie strace na dokladnosci
5) obracam wokol osi ktore potrzbuje stosujac punkt 3 i 4
6) nastepnie robie perspective projection stosujac tablice wykonana w punkcie 1 mnozac punkt X (czy Y). W tym przypadku znowu mnoze dwie wartosci 8 bitowe i biore tylko wyzszy bajt.

Zrobilem sobie te obliczenia w Excelu (aby sprawdzic czy nie bedzie za duzych zaokraglen) i wynik wyglada na zadawalajacy (minimalne odchylenia)

Resumujac chcialbym wiedziec zanim zaczne to pisac na c64 czy tak jak chce to zrobic jest ok? A moze da sie zrobic to lepiej?



Nitro__

  • Gość
Wektory
« Odpowiedź #1 dnia: 03 Marca 2009, 21:05 »
Teoria chyba w porzadku, ale z szybkoscia tego moze byc srednio, pewnie twoje procedury mnozenia wcinaja troche czasu, jak widze po opisie -> 16 bitowy wynik.

Wiesz, jest pewna seria artykulow, gdzie opisane jest robienie wektorow w praktycznie wszystkich aspektach(chociaz sa dosyc stare, jest miejsce na optymalizacje, aktualne osiagniecia), pytanie czy chcesz sobie psuc zabawe \"Wink\"

zielok__

  • Gość
Wektory
« Odpowiedź #2 dnia: 03 Marca 2009, 21:36 »
                   
Nitro napisal:
Teoria chyba w porzadku, ale z szybkoscia tego moze byc srednio, pewnie twoje procedury mnozenia wcinaja troche czasu, jak widze po opisie -> 16 bitowy wynik.


Hmm, tutaj to raczej  bym sie nie martwil aby pomnozyc dwie 8 bitowe liczby i uzyskac 16 bitowy wynik to w skrocie - odczytanie z tablicy wartosci, nastepnie odejmowanie, zapis, odczyt z tablic, odejmowanie i zapis w komorce. I wtedy juz mamy wynik mnozenia w 16 bitach... Czyli szybko \"Smile\"

                   
Cytat:
Wiesz, jest pewna seria artykulow, gdzie opisane jest robienie wektorow w praktycznie wszystkich aspektach(chociaz sa dosyc stare, jest miejsce na optymalizacje, aktualne osiagniecia), pytanie czy chcesz sobie psuc zabawe \"Wink\"


Narazie nie chce psuc sobie zabawy. Sam algorytm moim zadaniem wydaje sie niezly (wszystko w miare optymalnie wyglada w zalozeniach). Oczywiscie jak napisze kod to on juz napewno bedzie mogl zostac mocno zooptymalizowany ale jednak 12 lat przerwy robi swoje.

ps. Chociaz daj moze linka do tej serii artykulow. Moze cos ciekawego tam zobacze....

prezes__

  • Gość
Wektory
« Odpowiedź #3 dnia: 04 Marca 2009, 09:34 »
Tablice trygonometryczne koniecznie zrob 16bitowe (a wlasciwie 17 bitowe dla sin(90\') ), inaczej bedzie sieczka. A jak chcesz worldfirsta to mozesz je wygenerowac szeregiem.  \"Very

smiglo .::.__

  • Gość
Wektory
« Odpowiedź #4 dnia: 05 Marca 2009, 09:51 »
Wydaje mi sie ze tablice 8-bit w zupelnosci wystarczaja. Zwykle wartosci sin/cos trzyma sie pomnozone przez 64, ale podobno lepsza dokladnosc daje pomnozenie przez 127 i robienie dzielenia przez 128. Wiecej przewaznie nie potrzeba, zwlaszcza ze 16bit*8bit jest znaczaco wolniejsze niz 8bit*8bit...

Nitro__

  • Gość
Wektory
« Odpowiedź #5 dnia: 05 Marca 2009, 17:11 »
                   
Cytat:

Hmm, tutaj to raczej bym sie nie martwil aby pomnozyc dwie 8 bitowe liczby i uzyskac 16 bitowy wynik to w skrocie - odczytanie z tablicy wartosci, nastepnie odejmowanie, zapis, odczyt z tablic, odejmowanie i zapis w komorce. I wtedy juz mamy wynik mnozenia w 16 bitach... Czyli szybko Smile

Myslalem, ze moze mnozysz bez tablic.

                   
Cytat:
Narazie nie chce psuc sobie zabawy. Sam algorytm moim zadaniem wydaje sie niezly (wszystko w miare optymalnie wyglada w zalozeniach). Oczywiscie jak napisze kod to on juz napewno bedzie mogl zostac mocno zooptymalizowany ale jednak 12 lat przerwy robi swoje.

ps. Chociaz daj moze linka do tej serii artykulow. Moze cos ciekawego tam zobacze....

Mimo wszystko jeszcze raz zapytam, czy chcesz ten art, moze lepiej skoduj po prostu swoj sposob, a jesli napotkasz problemy/skonczysz, to dam Ci link.

zielok__

  • Gość
Wektory
« Odpowiedź #6 dnia: 05 Marca 2009, 18:50 »
                   
Nitro napisal:

Mimo wszystko jeszcze raz zapytam, czy chcesz ten art, moze lepiej skoduj po prostu swoj sposob, a jesli napotkasz problemy/skonczysz, to dam Ci link.


Ok.. pobawimy sie\"Smile\" Jak skoduje dwie wersje to porownam.

Apropo to w c++ na PC juz napisalem (oczywiscie przyjmujac dokladnosc tak jak na c64 i stosujac te same dzialania). Dziala w pelni zadawalajaco (tj. wektory sa dokladne na 8bitowych tablicach sinusow zreszta calosc napisalem tak jak pisalem w pierwszym poscie). Teraz pozostaje napisac to na c64.

Druga wersja to bedzie zastosowanie macierzy obrotu itd, ktore to powinny przyspieszyc jeszcze sprawe.

Offline wegi

  • Level 7
  • *******
  • Wiadomości: 2588
Wektory
« Odpowiedź #7 dnia: 13 Lipca 2009, 23:40 »
Wszystko to robisz w stacji, transmitujesz tylko wyniki obliczen do c64, ktory rysuje linie i eoruje (wypelnia). Zobacz moj post do ram 1541
Gdy po wynalezieniu komputera kwantowego jedni pytali o sposób wytwarzania prądu, kisiel pytał jak wytwarzać świeczki...

NIECH NIE BĘDZIE NICZEGO !!!

CZY RAF PIŁ Z JERICHA KUBECZKA ???

zielok__

  • Gość
Wektory
« Odpowiedź #8 dnia: 14 Lipca 2009, 10:47 »
Ja to wiem, ze tak najlepiej tylko, ze nigdy stacji nie kodowalem \"Smile\"

zielok__

  • Gość
Wektory
« Odpowiedź #9 dnia: 08 Maja 2010, 18:58 »
                   
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.

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
Wektory
« Odpowiedź #10 dnia: 08 Maja 2010, 19:04 »
pomysl o proporcjonalnie dluzszym czasie na narysowanie tych punktow w komciu a percepcja ci sie rozjasni.
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....

Nitro__

  • Gość
Wektory
« Odpowiedź #11 dnia: 08 Maja 2010, 19:09 »
Nie mowiac o opcji nie liczenia wszystkich punktow skoro az tak slabo z pamiecia.

leming__

  • Gość
Wektory
« Odpowiedź #12 dnia: 08 Maja 2010, 21:07 »
to jak to najlepiej ma byc? liczone troche na stacji a wiekszosc na komie? to cos da?

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
Wektory
« Odpowiedź #13 dnia: 08 Maja 2010, 21:19 »
IMHO z pozycji kodera to lepiej policzyc w stacji i rysowac w komciu.
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....

zielok__

  • Gość
Wektory
« Odpowiedź #14 dnia: 08 Maja 2010, 22:01 »
                   
kisiel napisal:
IMHO z pozycji kodera to lepiej policzyc w stacji i rysowac w komciu.


IHMO nie...

Policz dla DOWOLNEGO obiektu skladajacego sie powiedzmy z 40 punktow obroty w 3 osiach w stacji lub komodorku...
Komcio to juz dawno przeliczy i namaluje a stacja nie zwroci jeszcze wyniku obliczen...
Gdyby stacja miala wiecej pamieci to mozna zrobic lepsze tabelki dla mnozen i wtedy bylaby szybsza.