minor lindenmayer improvements
parent
fc0b10c9a8
commit
b5a1d10c9c
|
|
@ -56,6 +56,10 @@ SYMBOL: orientation
|
|||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
USE: sequences : length* length ; USE: lindenmayer
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
DEFER: polygon-vertex
|
||||
|
||||
: draw-forward ( length -- )
|
||||
|
|
@ -73,9 +77,16 @@ GL_LINES glBegin record-vertex step record-vertex glEnd ;
|
|||
0 over nth over 1 swap nth v- swap
|
||||
1 over nth swap 2 swap nth v- cross ;
|
||||
|
||||
! : polygon ( vertices -- )
|
||||
! GL_POLYGON glBegin dup polygon-normal first3 glNormal3f
|
||||
! [ first3 glVertex3f ] each glEnd ;
|
||||
|
||||
: polygon ( vertices -- )
|
||||
GL_POLYGON glBegin dup polygon-normal first3 glNormal3f
|
||||
[ first3 glVertex3f ] each glEnd ;
|
||||
dup length* 3 >=
|
||||
[ GL_POLYGON glBegin dup polygon-normal first3 glNormal3f
|
||||
[ first3 glVertex3f ] each glEnd ]
|
||||
[ drop ]
|
||||
if ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
|
@ -91,10 +102,6 @@ V{ } vertices set-global
|
|||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
USE: sequences : length* length ; USE: lindenmayer
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
! How $ works:
|
||||
|
||||
! V x H
|
||||
|
|
@ -213,11 +220,11 @@ SYMBOL: color-table
|
|||
{ 0.250 0.878 0.815 } ! turquoise
|
||||
{ 0 0 1 } ! blue
|
||||
{ 0.627 0.125 0.941 } ! purple
|
||||
{ 0 0.392 0 } ! dark green
|
||||
{ 0.0 0.807 0.819 } ! dark turquoise
|
||||
{ 0.0 0.0 0.545 } ! dark blue
|
||||
{ 0.580 0.0 0.827 } ! dark purple
|
||||
{ 0.545 0.0 0.0 } ! dark red
|
||||
{ 0.00 0.50 0.00 } ! dark green
|
||||
{ 0.00 0.82 0.82 } ! dark turquoise
|
||||
{ 0.00 0.00 0.50 } ! dark blue
|
||||
{ 0.58 0.00 0.82 } ! dark purple
|
||||
{ 0.50 0.00 0.00 } ! dark red
|
||||
{ 0.25 0.25 0.25 } ! dark grey
|
||||
{ 0.75 0.75 0.75 } ! medium grey
|
||||
{ 1 1 1 } ! white
|
||||
|
|
@ -294,7 +301,7 @@ H{ { "+" [ angle get rotate-y ] }
|
|||
{ "?" [ 1.4 scale-thickness ] }
|
||||
{ "!" [ 0.7 scale-thickness ] }
|
||||
|
||||
{ "c" [ color-index get 1 + set-color-index ] }
|
||||
{ "c" [ color-index get 1 + color-table get length* mod set-color-index ] }
|
||||
|
||||
} command-table set-global ;
|
||||
|
||||
|
|
@ -354,7 +361,7 @@ H{ { "S" "FFR>(60)R>(60)R>(60)R>(60)R>(60)R>(30)S" }
|
|||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: abop-1 ( -- ) lparser-dialect 45 angle set-global 5 thickness set-global
|
||||
: abop-1 ( -- ) lparser-dialect 45 angle set-global 5 set-thickness
|
||||
|
||||
H{ { "A" "F[&'(.8)!BL]>(137)'!(.9)A" }
|
||||
{ "B" "F[-'(.8)!(.9)$CL]'!(.9)C" }
|
||||
|
|
@ -377,4 +384,86 @@ H{ { "A" "F[&'(.7)!BL]>(137)[&'(.6)!BL]>(137)'(.9)!(.9)A" }
|
|||
|
||||
} rules set-global
|
||||
|
||||
"c(12)FAL" axiom set-global ;
|
||||
"c(12)FAL" axiom set-global ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: abop-3 ( -- ) lparser-dialect 30 angle set-global 5 thickness set-global
|
||||
|
||||
H{ { "A" "!(.9)t(.4)FB>(94)B>(132)B" }
|
||||
{ "B" "[&t(.4)F$A]" }
|
||||
{ "F" "'(1.25)F'(.8)" }
|
||||
} rules set-global
|
||||
|
||||
"c(12)FA" axiom set-global ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: abop-4 ( -- ) lparser-dialect 18 angle set-global 5 thickness set-global
|
||||
|
||||
H{ { "N" "FII[&(60)rY]>(90)[&(45)'(0.8)rA]>(90)[&(60)rY]>(90)[&(45)'(0.8)rD]!FIK" }
|
||||
{ "Y" "[c(4){++l.--l.--l.++|++l.--l.--l.}]" }
|
||||
{ "l" "g(.2)l" }
|
||||
{ "K" "[!c(2)FF>w>(72)w>(72)w>(72)w>(72)w]" }
|
||||
{ "w" "[c(2)^!F][c(5)&(72){-(54)f(3)+(54)f(3)|-(54)f(3)+(54)f(3)}]" }
|
||||
{ "f" "_" }
|
||||
|
||||
{ "A" "B" }
|
||||
{ "B" "C" }
|
||||
{ "C" "D" }
|
||||
{ "D" "E" }
|
||||
{ "E" "G" }
|
||||
{ "G" "H" }
|
||||
{ "H" "N" }
|
||||
|
||||
{ "I" "FoO" }
|
||||
{ "O" "FoP" }
|
||||
{ "P" "FoQ" }
|
||||
{ "Q" "FoR" }
|
||||
{ "R" "FoS" }
|
||||
{ "S" "FoT" }
|
||||
{ "T" "FoU" }
|
||||
{ "U" "FoV" }
|
||||
{ "V" "FoW" }
|
||||
{ "W" "FoX" }
|
||||
{ "X" "_" }
|
||||
|
||||
{ "o" "$t(-0.03)" }
|
||||
{ "r" "~(30)" }
|
||||
} rules set-global
|
||||
|
||||
"c(12)&(20)N" axiom set-global ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: abop-5 ( -- ) lparser-dialect 5 angle set-global 5 thickness set-global
|
||||
|
||||
H{ { "a" "F[+(45)l][-(45)l]^;ca" }
|
||||
|
||||
{ "l" "j" }
|
||||
{ "j" "h" }
|
||||
{ "h" "s" }
|
||||
{ "s" "d" }
|
||||
{ "d" "x" }
|
||||
{ "x" "a" }
|
||||
|
||||
{ "F" "'(1.17)F'(.855)" }
|
||||
} rules set-global
|
||||
|
||||
"&(90)+(90)a" axiom set-global ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: abop-6 ( -- ) lparser-dialect 5 angle set-global 5 thickness set-global
|
||||
|
||||
"&(90)+(90)FFF[-(120)'(.6)x][-(60)'(.8)x][+(120)'(.6)x][+(60)'(.8)x]x"
|
||||
axiom set-global
|
||||
|
||||
H{ { "a" "F[cdx][cex]F!(.9)a" }
|
||||
{ "x" "a" }
|
||||
|
||||
{ "d" "+d" }
|
||||
{ "e" "-e" }
|
||||
|
||||
{ "F" "'(1.25)F'(.8)" }
|
||||
} rules set-global ;
|
||||
|
|
|
|||
|
|
@ -1,2 +1,4 @@
|
|||
USING: parser words compiler sequences ;
|
||||
"lindenmayer.factor" run-file "lindenmayer" words [ try-compile ] each
|
||||
"lindenmayer.factor" run-file
|
||||
"viewer.factor" run-file
|
||||
"lindenmayer" words [ try-compile ] each
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
USING: kernel alien math arrays sequences opengl namespaces concurrency
|
||||
xlib x x11 gl concurrent-widgets lindenmayer ;
|
||||
|
||||
IN: lindenmayer
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
USE: sequences
|
||||
|
|
@ -13,22 +15,21 @@ USE: lindenmayer
|
|||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
SYMBOL: camera-position { 5 5 5 } camera-position set
|
||||
SYMBOL: camera-position { 5 5 5 } camera-position set-global
|
||||
SYMBOL: camera-focus { 0 0 0 } camera-focus set-global
|
||||
SYMBOL: camera-up { 0 1 0 } camera-up set-global
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
! "" result set
|
||||
lparser-dialect "" result set-global
|
||||
|
||||
! : display ( -- )
|
||||
! GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear
|
||||
! camera-position get glLoadIdentity [ ] each 0.0 0.0 0.0 0.0 1.0 0.0 gluLookAt
|
||||
! reset result get interpret glFlush ;
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: display ( -- )
|
||||
GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear
|
||||
camera-position get glLoadIdentity [ ] each 0.0 0.0 0.0 0.0 1.0 0.0 gluLookAt
|
||||
reset result get dup [ save-state interpret restore-state ] [ drop ] if
|
||||
glFlush ;
|
||||
glLoadIdentity
|
||||
camera-position get first3 camera-focus get first3 camera-up get first3 gluLookAt
|
||||
reset result get save-state interpret restore-state glFlush ;
|
||||
|
||||
: reshape ( { width height } -- )
|
||||
>r 0 0 r> [ ] each glViewport
|
||||
|
|
@ -37,12 +38,16 @@ glLoadIdentity -1.0 1.0 -1.0 1.0 1.5 200.0 glFrustum
|
|||
GL_MODELVIEW glMatrixMode
|
||||
display ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: init ( -- ) axiom get result set ;
|
||||
|
||||
: iterate ( -- ) result [ rewrite ] change display ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: setup-window ( -- )
|
||||
|
||||
f initialize-x
|
||||
|
||||
create-pwindow
|
||||
|
|
@ -65,4 +70,4 @@ GL_LIGHTING glEnable
|
|||
GL_LIGHT0 glEnable
|
||||
GL_DEPTH_TEST glEnable
|
||||
|
||||
[ concurrent-event-loop ] spawn
|
||||
[ concurrent-event-loop ] spawn ;
|
||||
Loading…
Reference in New Issue