C64Power Forum
Software => Programowanie => Wątek zaczęty przez: Fenek_ w 05 Sierpnia 2005, 14:47
-
Wogole to jestem ciekawy czy ktos to przeczyta, ba a nawet pomoze:
Sprawa wyglada tak, koduje duuuze wektory w hiresie 320x200 (lub 256x200),
wypelniane + 16 kolorow/bez sprajtow
Mam zrobione szybkie obroty na macierzach - 16 lini rastra plus oborty obiektu 8lini
rastra plus pozostale bzdety -perspektywa i ukrywanie scian.
Do wyliczenia elementow macierzy 3x3 wykorzystuje sinusa o wartosciah w przedziale
od -64 do 64 (w kodzie U2). Sinus jest 16 bitowy, czyli poprostu sinus przemnozony przez
64. Elementy macierzy sa juz 8-bitowe. Nextem na bazie tych wartosci wyliczane sa
wsporzedne 3d x,y,z tez 8bitowe w U2 dla obiektu.
Potem perspektywa i obcinanie do 80x50 i teraz nieszczesne przemnozenie
wszystkiego razy 4 tj. Xx4 i Yx4 co daje 320x200.
Pomijajac juz bledy w obcinaniu problemem jest koszmarne drganie w zakresie 4-16 pikseli.
Rzucilem to w kat bo mi sie nie chce juz nad tym siedziec, jedyny sensowny sposob
jaki widze to przepisac wszystkie operacje na wiecej bitow 32,24,16 ?
Wszystko musi byc tak liczone zeby juz ostatecznie po perspektywie wspolrzedne
byly 16 bitowe tak zeby obiekt byl wiekszy od ekranu. No wlasnie i moze mi ktos
przypomni jak sie wykonuje operacje add/sub i inne tego typu na wordach/longach
lub 24-bitach ?
Jakby ktos mogl pomoc pisac na maila fenekars@wp.pl.
Fenek/Arise
-
Dzialania na >:16 bitach to rozszerzenie tego, co znamy z 16 bitami, czyli:
lda src
clc
adc tgt
lda src+1
adc tgt+1
lda src+2
adc tgt+2
lda src+3
adc tgt+3
itd.
Z odejmowaniem/mnozeniem i dzieleniem jest tak samo - tam, gdzie przy 16 bitach zatrzymujesz sie kopiujesz kawalek dla starszego bajtu tyle razy, ile tych starszych bajtow jest.
Np. mnozenie longow z mojego sterownika CIAIDE:
LMult : (long)(r0/r1)*(long)(r2/r3)-->:(long)(r4/r5)
LDA #0
STA r4L:STA r4H:STA r5L:STA r5H
LDY #32
LMultLp
LSR r1H:ROR r1L:ROR r0H:ROR r0L
BCC LMultNextBit
CLC
LDA r4L:ADC r2L:STA r4L
LDA r4H:ADC r2H:STA r4H
LDA r5L:ADC r3L:STA r5L
LDA r5H:ADC r3H:STA r5H
LMultNextBit
ASL r2L:ROL r2H:ROL r3L:ROL r3H
DEY
BNE LMultLp
RTS