NB. This could be simplified a little
NB. turtlemove.ijs
NB. standalone version
require 'opengl'
coinsert 'jgl3 jzopengl '
turtlex =: monad define
glPushMatrix ''
glColor 0{::y.
glTranslate 1{::y.
glCallList 2{::y.
glPopMatrix ''
)
turtle =: monad define
glPushMatrix ''
glPushAttrib GL_CURRENT_BIT
glEnable GL_NORMALIZE
glScale SCALE * SIZE
glClipPlane GL_CLIP_PLANE0, 0 0 1 0
glEnable GL_CLIP_PLANE0
gluSphere LQuad, 1 30 30
glCallList y.
glDisable GL_CLIP_PLANE0
glPopAttrib ''
glPopMatrix ''
)
turtlehead =: monad define
glPushMatrix ''
glTranslate 0 1 0
glColor 0{::y.
gluSphere LQuad, TURTLE_HEAD_RELATIVE , 30 30
glCallList 1{::y.
glPopMatrix ''
)
turtlenose =: monad define
glPushMatrix ''
glTranslate 0 0.25 0
glColor y.
gluSphere LQuad, TURTLE_HEAD_RELATIVE , 30 30
glPopMatrix ''
)
ROTturtle =: 30 0 0 1
TURTLE_HEAD_RELATIVE =: 0.3 NB. head size relative to body
PARTS =: i. 0
PARTSSTART =: 2000
run =: verb define
gldefault''
glinit''
stdlistlight''
LQuad =: gluNewQuadric''
gluQuadricDrawStyle LQuad,GLU_FILL
gluQuadricNormals LQuad,GLU_SMOOTH
genlist 'LTurtle0 LTurtle1'
genpartslist 'Turtle0 Turtle1 LHead0 LNose0 LHead1 LNose1'
turtlenose makelist LNose0 0 1 0 1
turtlehead makelist LHead0 1 0 1 1;LNose0
turtle makelist Turtle0 LHead0
turtlenose makelist LNose1 1 0 1 1
turtlehead makelist LHead1 0 1 0 1;LNose1
turtle makelist Turtle1 LHead1
turtlex makelist LTurtle0 0 0 1 1;_1 0 0;Turtle0
turtlex makelist LTurtle1 1 0 0 1;1 0 0;Turtle1
stdpaintx ''
)
NB. patterned after genlist in jzopengl
genpartslist=: 3 : 0
bgn=. >:>./PARTS,PARTSSTART
if. 2 = 3!:0 y. do.
nms=. ;: y.
r=. bgn + i.#nms
(nms)=: r
else.
r=. bgn + i.y.
end.
PARTS=: PARTS,r
r
)
run''
--- Brian Schott <[EMAIL PROTECTED]> wrote:
> I think I have discovered how to make my approach
> work with the subcomponent system based on openGL "display
> lists." For me the breakthrough was understanding that with
> the cover scripts provided by J via jzopengl.ijs , every
> object must ultimately be embedded in a display list
> **after** any coloring, rotations, and translations, etc.
> Somehow I thought that the coloring, rotations, and
> translations, etc. could be applied to the display list
> after it was generated. What a mistake that was.
>
> In the system I am designing for simulating
> contra dancers, most features of the dancers remains
> constant throughout a simulation, but often
> their position and heading changes and periodically their
> color changes to indicated the regrouping of foursomes and
> (less often) the redirection of progress of couples reaching
> the end of the contra line or set. So the building blocks
> approach is appealing especially for the more static
> features.
>
> For anyone interested in the resulting code, I am
> attaching a short test case script demonstrating a 3-layer
> system with the following three layers.
>
>
> display list (atoms) display lists
> __________________________ __________________
> 3 LTurtle0 LTurtle1 <---These are in LISTS
> 2 Turtle0 Turtle1 <---These are in PARTS
> 1 Head0 Nose0 Head1 Nose1 <---These are in PARTS
>
> Look in the verb "run" for the two command sequences
> backetted by "glNewList LTurtleX , GL_COMPILE" ...
> "glEndList ''" for the pieces I had to add.
>
> (B=) <----------my "sig"
>
> Brian Schott
> Atlanta, GA, USA
> schott DOT bee are eye eh en AT gee em ae eye el DOT com
> http://schott.selfip.net/~brian/> NB. turtlemove.ijs
> NB. standalone version
>
> require 'opengl'
> coinsert 'jgl3 jzopengl '
>
> turtle =: monad define
> glPushMatrix ''
> glPushAttrib GL_CURRENT_BIT
> glEnable GL_NORMALIZE
> glScale SCALE * SIZE
> glClipPlane GL_CLIP_PLANE0, 0 0 1 0
> glEnable GL_CLIP_PLANE0
> gluSphere LQuad, 1 30 30
> glCallList ".'LHead',":y.
> glDisable GL_CLIP_PLANE0
> glPopAttrib ''
> glPopMatrix ''
> )
>
> turtlehead =: monad define
> glPushMatrix ''
> glTranslate 0 1 0
> glColor HCOLOR
> gluSphere LQuad, TURTLE_HEAD_RELATIVE , 30 30
> glCallList ".'LNose',":y.
> glPopMatrix ''
> )
>
> turtlenose =: monad define
> glPushMatrix ''
> glTranslate 0 0.25 0
> glColor NCOLOR
> gluSphere LQuad, TURTLE_HEAD_RELATIVE , 30 30
> glPopMatrix ''
> )
>
> ROTturtle =: 30 0 0 1
> TURTLE_HEAD_RELATIVE =: 0.3 NB. head size relative to body
> PARTS =: i. 0
> PARTSSTART =: 2000
>
> run =: verb define
> gldefault''
> glinit''
> stdlistlight''
> LQuad =: gluNewQuadric''
> gluQuadricDrawStyle LQuad,GLU_FILL
> gluQuadricNormals LQuad,GLU_SMOOTH
> genlist 'LTurtle0 LTurtle1'
> genpartslist 'Turtle0 Turtle1 LHead0 LNose0 LHead1 LNose1'
> HCOLOR =: 1 0 1 1
> NCOLOR =: 0 1 0 1
> turtlenose makelist LNose0 ''
> turtlehead makelist LHead0 0
> turtle makelist Turtle0 0
> HCOLOR =: 0 1 0 1
> NCOLOR =: 1 0 1 1
> turtlenose makelist LNose1 ''
> turtlehead makelist LHead1 1
> turtle makelist Turtle1 1
>
> glNewList LTurtle0 , GL_COMPILE
> COLOR =: 0 0 1 1
> POSITION =: _1 0 0
> glPushMatrix ''
> glColor COLOR
> glTranslate POSITION
> glCallList Turtle0
> glPopMatrix ''
> glEndList ''
>
> glNewList LTurtle1 , GL_COMPILE
> COLOR =: 1 0 0 1
> POSITION =: 1 0 0
> glPushMatrix ''
> glColor COLOR
> glTranslate POSITION
> glCallList Turtle1
> glPopMatrix ''
> glEndList ''
>
> stdpaintx ''
> )
>
> NB. patterned after genlist in jzopengl
> genpartslist=: 3 : 0
> bgn=. >:>./PARTS,PARTSSTART
> if. 2 = 3!:0 y. do.
> nms=. ;: y.
> r=. bgn + i.#nms
> (nms)=: r
> else.
> r=. bgn + i.y.
> end.
> PARTS=: PARTS,r
> r
> )
> > ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm