| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
Release id #172238 : Waves 16k
<Post edited by moderator on 11/12-2018 15:33>
ldx #0 ;top = 0
;we use Xreg as top
loop_fractal_line cpx #0
bpl @+ ;if x<0 go to drawing
jmp exit_fractal_line
@ lda sx2,x ;dx = abs(sx2-sx1)
sec
sbc sx1,x
bcs @+
eor #$FF
adc #1
@ cmp #2 ;if dx<2 skip to plot point
bcs subdiv_fractal_line
ldy sx1,x
lda sy1,x
sta heights,y
dex
bne loop_fractal_line
beq loop_fractal_line
subdiv_fractal_line lsr ;ed = dx/4
lsr
sta edge_displacement
lda sx2,x ;sx2 = int((sx1+sx2)/2)
sta sx2+1,x ;use it to copy to top+1
clc
adc sx1,x
lsr
sta sx2,x
sta sx1+1,x ;copy to top+1 also
lda sy2,x ;sy2 = int((sy1+sy2)/2)
sta sy2+1,x ;use it to copy to top+1
clc
adc sy1,x
lsr
sta sy2,x
lda st2,x ;st2 = st1+st2
sta st2+1,x ;use it to copy to top+1
clc
adc st1,x
sta st2,x
sta st1+1,x ;copy to top+1 also
bvs @+ ;if v<>0 skip displacement
bmi n_equal_1
lda sy2,x ;n == 0
clc ;sy2 += ed
adc edge_displacement
sta sy2,x
jmp @+
n_equal_1 lda sy2,x ;n == 1
sec ;sy2 -= ed
sbc edge_displacement
sta sy2,x
@ ;Copy new Y to top+1
lda sy2,x
sta sy1+1,x
inx ;top += 1
jmp loop_fractal_line
exit_fractal_line
|
|
... 20 posts hidden. Click here to view all posts.... |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
Quoting Heaven
btw. if you wonder what ST1 and ST2 is. It's what Carpenter calls "node tag values" and those represent the characteristics of the line (e.h. "mountain" or "cloud" etc).
so... say fractline(0,100,4 to 319,100,4) will be different to fractline(0,100,20 to 319,100,4). Even Tag1 4 and Tag2 5 should be different.
http://old.siggraph.org/publications/rarities/carpenter-1980sup..
Thanks for the link! Btw, is this the same kind of algorithm that is behind the change disk part of Old Men in Used Cars ? |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
yup.
http://www.evilshirt.com/_ataristuff/dsr_waves_opt_packed.zip
including the new core... don't see much difference... but haven't meassured the rendering time... |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
Quote: Quoting Heaven
btw. if you wonder what ST1 and ST2 is. It's what Carpenter calls "node tag values" and those represent the characteristics of the line (e.h. "mountain" or "cloud" etc).
so... say fractline(0,100,4 to 319,100,4) will be different to fractline(0,100,20 to 319,100,4). Even Tag1 4 and Tag2 5 should be different.
http://old.siggraph.org/publications/rarities/carpenter-1980sup..
Thanks for the link! Btw, is this the same kind of algorithm that is behind the change disk part of Old Men in Used Cars ?
i doubt as this looks like a "classic voxel" animation.
but Voxel maps can be generated by midline displacement... and me using a grid while voxel uses "screen collums" and RoF uses collum height drawing (front to back) same like later commanche... so yeah some tech is used later ;) |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
Quote: you still should get rid of the cpx #0 decision :-) You can do that already on the branches from inx/dex ;-)
now as more as I look at it it's most annoying thing :D. |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
And this doc describes the “flag based” displacement:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.378..
As we see Carpenter was already at Lucasfilm 1986 |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
https://youtu.be/OaCiNi1Y5pE
this is the Atari 800 version with my new "core" but it has 3d calc (camx,camy plus persptrans with fastmul)...
;)
and here the c64 "core" without 3d and precalced nodepos on the A8...
https://youtu.be/jxYKiNWMznU |
| |
Bitbreaker
Registered: Oct 2002 Posts: 504 |
I expect a c64 demo in two years that shows the effect as fast :-) |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
actually i am now precalculating those "x fract" tables as in a non camera moving scenario all line length are fix...
so code will only do y1 to y2 displacement in realtime. |
Previous - 1 | 2 | 3 - Next |