[#1] Fraktal zoom rotator
Czy ktos wie jak zrobic efekt jak w tym intrze:



Jakis algorytm albo sama idea chociarz.
Szukalem po internetach i nic.

Ostatnia aktualizacja: 15.10.2023 14:28:11 przez Phibrizzo
[wyróżniony] [#2] Re: Fraktal zoom rotator

@Phibrizzo, post #1

Informacji jest bardzo dużo.
Szukaj pod hasłem: "Prestige cracktro effect" lub "Blitter tornado".

https://eab.abime.net/showthread.php?t=79733
https://eab.abime.net/showthread.php?t=77377
https://web.archive.org/web/20120115050555/http%3A//www.bel.fi/~alankila/rotzoomer.html
[#3] Re: Fraktal zoom rotator

@Gordian, post #2

Dzieki.
Blitz to nie moja dzialka ale sprobuje to ogranac.
[#4] Re: Fraktal zoom rotator

@Phibrizzo, post #3

W ostatnim linku jest w JavaScript.
[#5] Re: Fraktal zoom rotator

@Phibrizzo, post #1

Prestige tornado

I ogólnie warto przejrzeć link
1
[#6] Re: Fraktal zoom rotator

@Phibrizzo, post #3

Kod z Blitza już mógłbym szybko przepisać do Amosa, jeśli Ci to pomoże
[#7] Re: Fraktal zoom rotator

@tukinem, post #6

Mozesz sprobowac. Moze chociarz to bedzie bardziej podobne do C.

Ostatnia aktualizacja: 15.10.2023 22:26:59 przez Phibrizzo
[#8] Re: Fraktal zoom rotator

@tukinem, post #6

O! Byłbym zainteresowany rzutem okiem na wersję amosową.
[#9] Re: Fraktal zoom rotator

@Phibrizzo, post #1

Też mnie zawsze ciekawił ten efekt. Patrzenie na niego jest… hipnotyzujące. Nawet kiedyś się zastanawiałem jak to zrobić ale od drugiej strony. To znaczy oglądałem film klatka po klatce obserwując jak jakiś element zmienia się w czasie. I zastanawiałem się nad sposobem osiągnięcia takiej zmiany. Rozwiązań w postaci kodu nie szukałem, bo bardziej bawi mnie wymyślenie własnego sposobu. Chociaż pewnie znacznie gorszego. szeroki uśmiech Jednak na podglądaniu video się skończyło.
Próbuj coś wykombinować, bo zabawa może być przy tym fajna i ciekawa.

Ostatnia aktualizacja: 16.10.2023 09:20:46 przez MDW
1
[#10] Re: Fraktal zoom rotator

@Stoopi, post #8

Nie pamiętam na którym party, ale parę lat temu odbyło się compo w kodowaniu Amos coś jak komo w kodowaniu shaderów. I z tego co pamiętam ktoś tam taki efekt zakodował. Ale co z party.... Nie pamiętam. Za to samo compo było na YouTube.
1
[#11] Re: Fraktal zoom rotator

@Stoopi, post #8

Popołudniu siądę do tego, ale to raczej szybkie nie będzie. Tam nie ma trików, tylko przeliczanie danych i komenda Scroll do kopiowania fragmentów bitmapy. Przepiszę to "po swojemu" a ktoś mądry niech poprawi bo tam jest podwójne buforowanie, a ja już zapomniałem sporo z Amosa.
[#12] Re: Fraktal zoom rotator

@tukinem, post #11

Spoko. Byle działało, ciekawi mnie samo rozwiązanie. Zrobienie czegoś na wzór komorowskiego mikrohexagonu byłoby ciekawe.
[#13] Re: Fraktal zoom rotator

@Stoopi, post #12

W pierwszym kodzie są 4 bitplany. W ostatnim już tylko dwa. Jest w Amosie komenda do przenoszenia części bitmapy w inną jej część? Chodzi o przeniesienie prostokąta z jednego miejsca w drugie.
[#14] Re: Fraktal zoom rotator

@tukinem, post #13

Możesz wyciąć w formie boba na przykład. Lub wycięcie obrazu i wrzucenie go do banku.

Ostatnia aktualizacja: 16.10.2023 10:29:16 przez Stoopi
[#15] Re: Fraktal zoom rotator

@Stoopi, post #14

To będzie bardzo wolno jeśli co ramkę będzie wycinanie. Przejrzę książkę i poszukam czegoś. Może znajdę.
[#16] Re: Fraktal zoom rotator

@jimiche, post #10

4
[#17] Re: Fraktal zoom rotator

@jimiche, post #16

"Crap Team" coś takiego zrobili w Amosie.
[#18] Re: Fraktal zoom rotator

@jimiche, post #16

Uuuaaa. Bardzo zgrabnie to działa.
Może warto iść tą drogą i podobną metodą wyczarować coś jeszcze innego czego jeszcze nie było. Widać, że w metodzie jest potencjał.

Ostatnia aktualizacja: 16.10.2023 16:06:57 przez MDW
[#19] Re: Fraktal zoom rotator

@MDW, post #18

to już nie muszę przepisywać tamtego kodu z Blitza :) to dobrze hehe wracam do swojej roboty :)
2
[#20] Re: Fraktal zoom rotator

@Stoopi, post #12

skompilowałem ten kod z Blitza i wrzucam tutaj. Jest sens to przepisywać do AMOSa?
[#21] Re: Fraktal zoom rotator

@tukinem, post #13

Jest w Amosie komenda do przenoszenia części bitmapy w inną jej część?

O ile dobrze pamiętam, to Screen Copy.
[#22] Re: Fraktal zoom rotator

@diobou, post #21

Wysłałem Stoopiemu wiadomość, ale w sumie to tu podzielę się dla wszystkich, może ktoś mądry z AMOSa skleci to dla Was:

BLITZ                                           ; w Amosie nieważne
DEFTYPE .w                                   ; tak samo nieważne

bmd.w=2                                 ; BMD=2 (a w sumie ustaw na 4 bo to ilość bitplanów, a w AMOSIE używa się ilości kolorów, czyli BMD=4)
Slice 0,44,320,256,$fff8,bmd,8,32,800,800 ; Screen Open 0,320,256,4,LowRes

bmw.w=800                            ; BMW=800
bmh.w=600                             ; BMH=600

BitMap 0,bmw,bmh,bmd           ; i tutaj nie wiem, bo ekran ma być rozmiaru 320x256, ale bitmapa to 800x600x2 bitplany
BitMapOutput 0                        ; nie potrzeba w Amosie w sumie, to jest ekran na którym ma się wyświetlić PRINT
Locate 23,40                            ; to samo w Amosie
Print"rotozoom test coagulus"    ; to samo w Amosie

DEFTYPE.w                               ; nieważne, AMOS działa na longach

sz=32                                       ; SZ=32

Show 0                                   ; nieważne, to jest wyświetlenie bitmapy 0 na ekranie
Use BitMap 0                           ; nieważne, to jest aktywowanie bitmapy 0 do rysowania

RGB 1,15,0,0                          ; Colour 1,$f00
RGB 2,0,15,0                          ; Colour 2,$0f0
RGB 3,0,0,15                          ; Colour 3,$00f

VWait                                       ; WaitVBL

ps.l=0                                     ; PS=0

;Gosub testgrid
Show 0,150,180                      ; i tu nie umiem. To jest ScreenDisplay gdzie lewy górny róg to punkt bitmapy 150,180
VWait150                                 ; Wait 150

Repeat                                   ; Repeat
  VWait                                     ; WaitVBL
  Show 0,150,180          ; ScreenDisplay 10,150,180,320,256 (ewentualnie skoryguj przez X/Y Screen lub X/Y Hard bo ja tego nie pamiętam)

  For y=298 To 302       ; to samo
    For x=284 To 288         ; to samo
      Plot x+2,y+2,Rnd(3)+1   ; to samo przy czym Rnd(3)+1 tyczy się numeru koloru, więc w Amosie chyba najpierw ustalało się kolor pędzla
    Next                    ; to samo
  Next                    ; to samo

  shift=0 ;              SHIFT=0
  ps+1      ;              PS=PS+1
  ;For i=0 To 4
    shift=(shift ASL 1) OR ((ps ASR 0) AND 1)  ; tu będzie raczej podobnie, tylko zamiast ASL i ASR użyj ROL I ROR
    shift=(shift ASL 1) OR ((ps ASR 1) AND 1)
    shift=(shift ASL 1) OR ((ps ASR 2) AND 1)
    shift=(shift ASL 1) OR ((ps ASR 3) AND 1)
    shift=(shift ASL 1) OR ((ps ASR 4) AND 1)
  ;Next

  For y=4 To 11

    yy=y LSL 5 +shift   ;yy=y*32                 ; LSL 5 to przesunięcie bitów o 5 w lewo, ale możesz też mnożyć przez 32 co będzie wolniejsze

    For x=4 To 14                                         ; w AMOSie tak samo

      xx=x LSL 5 +shift ;xx=x*32                   ; LSL już było wyżej

      Scroll xx+(16-y)-x,yy+x+(16-y),32,32,xx,yy+16 
; przeniesienie części bitmapy, co wygląda tak: Scroll X1,Y1,SZEROKOSC,WYSOKOSC,X2,Y2 gdzie X1 i Y1 to lewy gorny punkt kawałka wycinanego a X2 i Y2 to punkt do wklejania
    Next          ; to samo w AMOSie
  Next             ; to samo

Until Joyb(0) OR RawStatus($69)   ; Until 'FIRE' OR 'ESC'

End

testgrid:

xs=bmw/sz    ;20 create a grid
ys=bmh/sz    ;16

mx=bmw/2     ;center of display
my=bmh/2     ;

mxs=xs/2-1     ;center of grid
mys=ys/2-1     ;

;debug boxes array
For y=0 To ys-1
yy=y*sz
For x=0 To xs-1
 xx=x*sz
 Box xx,yy,xx+sz-1,yy+sz-1,1     ; rysowanie prostokąta bez wypełnienia gdzie składnia to Box X1,Y1,X2,Y2,KOLOR
Next
Next

;debug inner boxes array
For y=0 To 7
  yy=(y-4)*sz +my

  For x=0 To 9

    xx=(x-5)*sz +mx
    Box xx,yy,xx+sz-1,yy+sz-1,2

    ;now get "circular" direction

    dx= Sgn(xx - mx) ;-1 -0 -1
    dy= Sgn(yy - my)

    Line xx,yy,xx+dx*20,yy+dy*20,2    ; rysowanie linii, gdzie składnia to Line X1,Y1,X2,Y2,KOLOR

  Next
Next
Return
1
[#23] Re: Fraktal zoom rotator

@tukinem, post #20

Niema, jak to zrobić mniej więcej widać. :) Dzięki za listing.
[#24] Re: Fraktal zoom rotator

@Stoopi, post #23

A ja sie przyłączam do podziękowań - przepisałem sobie to ("toćka w toćkę") w AmigaE I poszło od strzała (teraz tylko dodać obsługę ekranu RTG i będzie git) szeroki uśmiech OK
[#25] Re: Fraktal zoom rotator

@pisklak, post #24

Mogę spróbować to przepisać z Blitz Basic do AmiBlitz i dodać obsługę RTG. Będzie prościej :) Kod ten sam, tylko zmiana biblioteki Slice na Display i ustawienie ponad 8 bitplanów :P ciekawe ćwiczenie byłoby bo nigdy poza otwarciem ekranu nie stworzyłem nic pod RTG :D

A tak poza tym, to te pętle, ASL (Rol) i kopiowanie kawałków bitmapy mnie przerasta :D trzeba mieć spory łeb do tego. No i nie rozumiem też jak dokładnie działa ASL, bo LSL to wiem i używam często.

Ostatnia aktualizacja: 19.10.2023 19:25:24 przez tukinem
[#26] Re: Fraktal zoom rotator

@tukinem, post #25

No ja zrobiłem dla siebie tak że a) jeśli cybergraohics.library jest otwierana to...
b) szukamy modeid dla 320x240x8, a jak nie znajdziemy to daje do OpenScreenTagList jako SA_DisplayID po prostu PAL_ID, jak znalazło to jest to jako wartość taga SA_DisplayID do OpenScrenTagList
Jak lib się nie otwiera to po prostu do DisplayID PAL leci. Reszta ta sama w sumie jak kod w Blitzu. A i jeszcze trzevmba reagować na modeid= Invalid_ID, czyli wtedy też Pal_ID leci.

Ostatnia aktualizacja: 19.10.2023 19:42:59 przez pisklak

Ostatnia aktualizacja: 19.10.2023 20:00:18 przez pisklak
[#27] Re: Fraktal zoom rotator

@tukinem, post #25

Co do ASL i LSL, to dzialaja tak samo, nie ma roznicy. Przesuwaja bity w lewo. Ogolnie instrukcja ASL jest zbedna instrukcja i wprowadza tylko niektorych w blad. Uzywaj tylko LSL, od razu kod jest wtedy czytelniejszy.
[#28] Re: Fraktal zoom rotator

@tukinem, post #25

Ekran RTG może mieć 8 "bitplanów" ( tak naprawdę to jest to chyba sensowne minimum dla ekranów RTG). A jeśli ustawiasz więcej to spokojnie możesz używać tylko jednego numeru pisaka do rysowania. Zmiana jego wartości koloru nie będzie wpływała wtedy na pozostałe pixele jeśli ekran ma więcej niż 15+ bitów głębokości.

Ostatnia aktualizacja: 19.10.2023 20:44:55 przez pisklak
[#29] Re: Fraktal zoom rotator

@pisklak, post #28

Nie wiem, czy mówimy o tym samym, bo w AmiBlitz otwarcie ekranu RTG to ta sama komenda, co otwarcie ekranu Intuition, tylko właśnie trik polega na podniesieniu ilości bitplanów.

Oto składnia tworzenia ekranu Intuition w AmiBlitz (Blitz Basic 2 ma bardzo podobnie, ale AmiBlitz ma właśnie dodatkowo chociażby tą obsługę RTG):
Statement: Screen
------------------------------------------------------------------------------
Modes  :
Syntax : Screen [Screen#,Mode[,Title$]]|[Screen#,X,Y,W,H,D,Viewmode,Title$,Dpen,Bpen[,BitMap#]

Screen will open an Intuition screen. The are 2 formats of the screen command,
a quick format, and a long format.

The quick format of the Screen commands involves 3 parameters -  Screen#, Mode
and an optional Title$.

Screen# specifies the screen object to create.

Mode specifies how many bitplanes the screen is to have, and should be  in the
range 1 through 6. Adding 8 to Mode will cause a hi-res screen  to be opened,
as opposed to the default lo-res screen. A hi-res screen  may only have from 1
to 4 bitplanes. Adding 16 to Mode will cause an  interlaced screen to be
opened.

Title$ allows you to add a title to the screen.

The long format of Screen gives you much more control over how the  screen is
opened with control of the specific ViewMode.

ViewMode        Value   HexValue 
--------        -----   --------
HiRes           32768   $8000 
HAM                     2048    $0800
HBrite          128     $0080    
LACE            4       $0004 
LoRes                   0               $0000



Using CGX or P96 screens

W and H choose Dimension

Choose D (Depth)
9  use 8 bit Screen
15 use 15bit Screen
16 use 16bit Screen
24 use 24bit Screen
32 use 32bit Screen

--- Example:
Screen 0,0,0,640,480,16,$0,"test",0,1

Opens a 640*480*16 screen on P96/CGX

The function use BestmodeID. If a resolution is not available
on the System then the next greater res is chosen.

For example
Screen 0,0,0,700,500,16,$0,"test",0,1
... opens a 800*600 screen

If you have a displayid of a P96/cgx screen set D (depth) to 0
Then your screen will open with that 32bit display ID

=== WARNING ===

Use this only if check the return value

Displayid's differ from system to system

succ=Screen (0,0,0,640,480,0,$51001100,"test",0,1)
if succ=0 then print "ops cant open screen"

=== NEW SCREEN FLAGS ===

The superhires viewmode flag $20 is now acceptable, but should always  be used
in conjunction with the standard hires flag of $8000. 

The depth of a screen may now be specified up to 8 bitplanes (256  colours)
deep (if you've got an AGA machine!). Here's how you would go about opening a
superhires, 256 colour screen:

Screen 0,0,0,1280,256,8,$8020,"MyScreen",1,0
[#30] Re: Fraktal zoom rotator

@Don_Adan, post #27

ASL jest zbedna instrukcja

Na poziomie assemblera asl i lsl różnią się innymi flagami rejestru statusowego, a konkretnie V.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem