|
blua gl
Dec 25, 2019 6:16:05 GMT -5
Post by bluatigro on Dec 25, 2019 6:16:05 GMT -5
try at 3d char's error : i only get /'s
'' bluatigro 25 dec 2019 '' bluaGL_2 dim pnt#( 255 )( 2 ) sub setpoint( no , x# , y# , z# ) pnt#( no )( 0 ) = x# pnt#( no )( 1 ) = y# pnt#( no )( 2 ) = z# end sub sub tri( p1 , p2 , p3 ) dim n#( 2 ) = crossproduct( pnt#( p3 ) - pnt#( p1 ) , pnt#( p3 ) - pnt#( p2 ) ) n# = normalize( n# ) glBegin( GL_TRIANGLES ) glnormal3fv( n# ) glVertex3fv( pnt#( p1 ) ) glVertex3fv( pnt#( p2 ) ) glVertex3fv( pnt#( p3 ) ) glEnd() end sub sub quad( p1 , p2 , p3 , p4 ) dim n#( 2 ) = crossproduct( pnt#( p1 ) - pnt#( p3 ) , pnt#( p2 ) - pnt#( p3 ) ) n# = normalize( n# ) glBegin( GL_QUADS ) glnormal3fv( n# ) glVertex3fv( pnt#( p1 ) ) glVertex3fv( pnt#( p2 ) ) glVertex3fv( pnt#( p3 ) ) glVertex3fv( pnt#( p4 ) ) glEnd() end sub
glEnable( gl_lighting ) dim lightposition#( 3 ) = vec4( -50 , 50 , 10 , 1 ) dim lightdiffuse#( 3 ) = vec4( 1 , 1 , 1 , 1 ) dim lightambient#( 3 ) = vec4( .2 , .2 , .2 , 1 ) glLightfv( gl_light0 , gl_position, lightposition# ) glLightfv( gl_light0 , gl_diffuse , lightdiffuse# ) gllightfv( gl_lIGHT0 , gl_amBIENT , lightambient# ) glEnable( gl_light0 )
type tmaterial ambient( 3 ) as single diffuse( 3 ) as single specular( 3 ) as single emision( 3 ) as single shininess as single end type dim tmaterial material sub material_use( a , m as tmaterial ) glMaterialfv( a , GL_AMBIENT , m.ambient ) glMaterialfv( a , GL_DIFFUSE , m.diffuse ) glMaterialfv( a , GL_SPECULAR , m.specular ) glMaterialfv( a , GL_EMISSION , m.emision ) glMaterialf( a , GL_SHININESS , m.shininess ) end sub dim black#( 3 ) = vec4( 0 , 0 , 0 , 1 ) dim red#( 3 ) = vec4( 1 , 0 , 0 , 1 ) dim green#( 3 ) = vec4( 0 , 1 , 0 , 1 ) dim yellow#( 3 ) = vec4( 1 , 1 , 0 , 1 ) dim blue#( 3 ) = vec4( 0 , 0 , 1 , 1 ) dim magenta#( 3 ) = vec4( 1 , 0 , 1 , 1 ) dim cyan#( 3 ) = vec4( 0 , 1 , 1 , 1 ) dim white#( 3 ) = vec4( 1 , 1 , 1 , 1 ) type tcamera x as single y as single z as single pan as single end type dim tcamera camera sub camara_use( c as tcamera ) glRotatef( -c.pan , 0 , 1 , 0 ) gltranslatef( -c.x , -c.y , -c.z ) end sub dim box#(5) sub setbox( x# , y# , z# , dx# , dy# , dz# ) box#(0) = x# box#(1) = y# box#(2) = z# box#(3) = dx# box#(4) = dy# box#(5) = dz# end sub sub cube() '' fil points of swarm setpoint( 0 , -1 , -1 , -1 ) setpoint( 1 , -1 , -1 , 1 ) setpoint( 2 , -1 , 1 , -1 ) setpoint( 3 , -1 , 1 , 1 ) setpoint( 4 , 1 , -1 , -1 ) setpoint( 5 , 1 , -1 , 1 ) setpoint( 6 , 1 , 1 , -1 ) setpoint( 7 , 1 , 1 , 1 ) '' use swarmpoints to create mesh glPushMatrix() glTranslatef( box#( 0 ) , box#( 1 ) , box#( 2 ) ) glScalef( box#( 3 ) , box#( 4 ) , box#( 5 ) ) quad( 0 , 1 , 3 , 2 ) ''left quad( 7 , 6 , 4 , 5 ) ''right quad( 0 , 1 , 5 , 4 ) ''bottom quad( 7 , 6 , 2 , 3 ) ''top quad( 0 , 2 , 6 , 4 ) ''front quad( 7 , 5 , 1 , 3 ) ''back glPopMatrix() end sub sub cilinder( sides as integer , dx as single , dz as single , top as integer , bot as integer ) dim f if sides < 3 then sides = 3 : end if if sides > 64 then sides = 64 : end if for f = 0 to sides + 2 setpoint( f , box#( 0 ) + sin( f * m_pi * 2 / sides ) * box#( 3 ) , box#( 1 ) - box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * box#( 5 ) ) setpoint( f + sides + 1 , box#( 0 ) + sin( f * m_pi * 2 / sides ) * dx , box#( 1 ) + box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * dz ) next : f for f = 0 to sides + 1 quad( f , f + 1 , f + 2 + sides , f + 1 + sides ) next : f if top then setpoint( 255 , box#( 0 ) , box#( 1 ) , box#( 2 ) ) for f = 0 to sides + 2 setpoint( f , box#( 0 ) + sin( f * m_pi * 2 / sides ) * dx , box#( 1 ) + box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * dz ) next : f for f = 0 to sides + 1 tri( 255 , f , f + 1 ) next : f end if if bot then setpoint( 255 , 0 , box#( 0 ) - box#( 3 ) , 0 ) for f = 0 to sides + 3 setpoint( f , box#( 0 ) + sin( f * m_pi * 2 / sides ) * box#( 3 ) , box#( 1 ) - box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * box#( 5 ) ) next : f for f = 0 to sides + 1 tri( 255 , f , f + 1 ) next : f end if end sub
dim sk#( 64 )( 2 ) sub skelet( no , x# , y# , z# ) sk#( no )( 0 ) = x# sk#( no )( 1 ) = y# sk#( no )( 2 ) = z# end sub const xyz = 0 const xzy = 1 const yxz = 2 const yzx = 3 const zxy = 4 const zyx = 5 sub child( x# , y# , z# , lim , ax ) glTranslatef( x# , y# , z# ) if ax = xyz then glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) elseif ax = xzy then glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) elseif ax = yxz then glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 2 ) elseif ax = yzx then glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) elseif ax = zxy then glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) elseif ax = zyx then glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) else end if end sub function pend#( fase# , amp# ) return sind( fase# ) * amp# end function const leftno = 0 const arm = 1 const elbow = 2 const wrist = 3 const leg = 4 const knee = 5 const enkle = 6 const neck = 7 const thumb = 8 const index_finger = 11 const middle_finger = 14 const ring_finger = 17 const pinky_finger = 20 const tail = 25
const iarm = 1 const ielbow = 2 const iwrist = 3 const ileg = 4 const iknee = 9 const iwing = 14 const itail = 16 const isensor = 17 const ithumb = 18 const ifinger = 19
const rightno = 32 sub finger( lim ) '' part of human robot avatar setbox( 0 , -2 , 0 , 1 , 1 , 1 ) cube() glpushmatrix() child( 0 , -2 , 0 , lim + 1 , xyz ) cube() glpushmatrix() child( 0 , -2 , 0 , lim + 2 , xyz ) cube() glpopmatrix() glpopmatrix() end sub sub hand( lr , kl#() ) '' part of human robot avatar material.diffuse = kl# MATERIAL.AMBIENT = KL# material_use( gl_frONT , material ) setbox( 0 , -4 , 0 , 1 , 4 , 3 ) cube() glpushmatrix() child( 0 , -8 , 1.5 , lr + index_finger , zxy ) finger( lr + index_finger ) glpopmatrix() glpushmatrix() child( 0 , -8 , .5 , lr + middle_finger , zxy ) finger( lr + middle_finger ) glpopmatrix() glpushmatrix() child( 0 , -8 , -.5 , lr + ring_finger , zxy ) finger( lr + ring_finger ) glpopmatrix() glpushmatrix() child( 0 , -8 , -1.5 , lr + pinky_finger , zxy ) finger( lr + pinky_finger ) glpopmatrix() glpushmatrix() child( 0 , -1 , 3.5 , lr + thumb , zxy ) finger( lr + thumb ) glpopmatrix() end sub sub human_robot( h , kl#() , klh#() ) material.diffuse = kl# material.ambient = kl# material_use( gl_front , material ) setbox( 0 , 0 , 0 , .5 , .1 , .1 ) cube() setbox( 0 , .75 , 0 , .1 , .5 , .1 ) cube() setbox( 0 , 1.8 , 0 , .2 , .2 , .2 ) cube() setbox( 0 , 1.4 , 0 , .7 , .1 , .1 ) cube() glPushMatrix() child( .45 , 0 , 0 , leg + rightno , zyx ) setbox( 0 , -.6 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , knee + rightno , xyz ) cube() glPushMatrix() child( 0 , -1.2 , 0 , enkle + rightno , xyz ) setbox( 0 , 0 , .2 , .1 , .1 , .3 ) cube() glPopMatrix() glPopMatrix() glPopMatrix() glPushMatrix() child( -.45 , 0 , 0 , leg + leftno , zyx ) setbox( 0 , -.6 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , knee + leftno , xyz ) cube() glPushMatrix() child( 0 , -1.2 , 0 , enkle + leftno , xyz ) setbox( 0 , 0 , .2 , .1 , .1 , .3 ) cube() glPopMatrix() glPopMatrix() glPopMatrix() glPushMatrix() child( .65 , 1.3 , 0 , arm + rightno , xyz ) setbox( 0 , -.5 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , elbow + rightno , xyz ) cube() glPushMatrix() child( 0 , -1 , 0 , wrist + rightno , zyx ) glscalef( .1 , .1 , .1 ) hand( rightno , klh# ) glPopMatrix() glPopMatrix() glPopMatrix() material.diffuse = kl# material.ambient = kl# material_use( gl_front , material ) glPushMatrix() child( -.65 , 1.3 , 0 , arm + leftno , xyz ) setbox( 0 , -.5 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , elbow + leftno , xyz ) cube() glPushMatrix() child( 0 , -1 , 0 , wrist + leftno , zyx ) glscalef( .1 , .1 , .1 ) hand( leftno , klh# ) glPopMatrix() glPopMatrix() glPopMatrix() end sub
sub bug_robot( kl#() ) material.diffuse = kl# material.ambient = kl# material_use( gl_front , material ) Dim i as integer glPushmatrix() glScaled( .01 , .01 , .01 ) setbox( 0, 0, 0, 30, 10.0, 60.0 ) Cube() For i = 0 To 4 glPushMatrix() child( 35.0, 0.0, i * 25 - 50 , ileg + rightno + i, xyz ) setbox( 30.0, 0.0, 0.0, 30.0, 5.0, 5.0 ) Cube() glPushMatrix() child( 65.0, -5.0, 0.0 , iknee + rightno + i, xyz) setbox( 0.0, -30.0, 0.0, 5.0, 30.0, 5.0) Cube() glPopMatrix() glPopMatrix() glpushMatrix() child( -35.0, 0.0, i * 25 - 50, ileg + leftno + i, xyz) setbox( -30.0, 0.0, 0.0, 30.0, 5.0, 5.0) Cube() glPushMatrix() child( -65.0, -5.0, 0.0 , iknee + leftno + i + 1, xyz) setbox( 0.0, -30.0, 0.0, 5.0, 30.0, 5.0) Cube() glPopmatrix() glPopMatrix() Next glPushMatrix() child( 0 , 0 , -50 , itail + rightno, xyz) For i = 0 To 9 glPushMatrix() child( 0.0, 0.0, -30.0 , itail + rightno , xyz ) setbox( 0.0, 0.0, -15.0, 10.0, 10.0, 10.0 ) Cube() Next for i = 0 to 8 glPushMatrix() child( 0 , 0 , -30 , itail + leftno , xyz ) cube() next :i for i = 0 to 8 glPopMatrix() glPopMatrix() next :i glPopMatrix() glPushMatrix() child( 30.0, 0.0, 65.0, iarm + rightno, xyz) setbox( 0.0, 0.0, 65.0 , 5 , 5 , 30 ) Cube() glPushMatrix() child( 0.0, 0.0, 65.0, ielbow + rightno, xyz ) Cube() glPushmatrix() child( 0.0, 0.0, 65.0 , iwrist + rightno, xyz) glPushmatrix() child(-10.0, 0.0, 5.0 , ithumb + rightno, xyz) Cube() glPopMatrix() glPushMatrix() child( 5.0, 0.0, 5.0, ifinger+ rightno, xyz ) setbox( 0.0, 0.0, 30.0, 5.0, 10.0, 30.0 ) Cube() glPopMatrix() glPopMatrix() glPopMatrix() glPopMatrix() glPushMatrix() child( -30.0, 0.0, 65.0, iarm + leftno, xyz) setbox( 0.0, 0.0, 30.0, 5.0, 5.0, 30.0) Cube() glPushMatrix() child( 0.0, 0.0, 65.0, ielbow +leftno, xyz) Cube() glPushMatrix() child( 0.0, 0.0, 65.0, iwrist+leftno, xyz) glPushMatrix() child( 10.0, 0.0, 5.0, ithumb+leftno, xyz) Cube() glPopMatrix() glPushMatrix() child(-5.0, 0.0, 5.0, ifinger+leftno, xyz) setbox( 0.0, 0.0, 30.0, 5.0, 10.0, 30.0) Cube() glPopMatrix() glPopMatrix() glPopMatrix() glPopMatrix() For i = 0 To 1 glPushMatrix() child(20.0, 20.0, 40.0 - 50.0 * i, iwing + rightno+ i, xyz) setbox( 60.0, 0.0, 8.0, 60.0, 2.0, 16.0) Cube() glPopMatrix() glPushMatrix() child(-20.0, 20.0, 40.0 - 50.0 * i , iwing+leftno + i, xyz) setbox( -60.0, 0.0, 8.0, 60.0, 2.0, 16.0) Cube() glPopmatrix() Next glPopMatrix() end sub
const human_walk = 0 const dog_walk = 1 const I_FLY = 3 const I_LEFT_LEGS = 4 const I_LEFT_BOX = 5 const I_RIGHT_LEGS = 6 const I_RIGHT_BOX = 7 const I_STING = 8 const I_STAND = 9
sub animate( anim , fase# , amp# ) dim i if anim = human_walk then skelet( arm + rightno, pend#( fase# , amp# ) , 0 , 0 ) skelet( elbow + rightno, -abs( amp# ) , 0 , 0 ) skelet( arm + leftno , pend#( fase# + 180, amp# ) , 0 , 0 ) skelet( elbow + leftno , -abs( amp# ) , 0 , 0 ) skelet( leg + rightno , pend#( fase# + 180 , amp# ) , 0 , 0 ) skelet( knee + rightno , pend#( fase# + 90 , amp# ) + amp# , 0 , 0 ) skelet( leg + leftno , pend#( fase# , amp# ) , 0 , 0 ) skelet( knee + leftno , pend#( fase# - 90 , amp# ) + amp# , 0 , 0 ) skelet( thumb + rightno , -pend#( fase# , 10 ) - 10 , 0 , pend#( fase# + 90 , 10 ) ) skelet( thumb + leftno , -pend#( fase# , 10 ) - 10 , 0 , pend#( fase# + 90 , 10 ) ) for i = 0 to 2 skelet( pinky_finger + rightno + i , 0 , 0 , -pend#( fase# + 60 , 10 ) - 10 ) skelet( index_finger + rightno + i , 0 , 0 , -pend#( fase# + 30 , 10 ) - 10 ) skelet( middle_finger + rightno + i , 0 , 0 , -pend#( fase# , 10 ) - 10 ) skelet( ring_finger + rightno + i , 0 , 0 , -pend#( fase# - 30 , 10 ) - 10 ) skelet( pinky_finger + leftno + 1 , 0 , 0 , pend#( fase# + 60 , 10 ) + 10 ) skelet( index_finger + leftno + i , 0 , 0 , pend#( fase# + 30 , 10 ) + 10 ) skelet( middle_finger + leftno + i , 0 , 0 , pend#( fase# , 10 ) + 10 ) skelet( ring_finger + leftno + i , 0 , 0 , pend#( fase# - 30 , 10 ) + 10 ) next : i else if anim = dog_walk then skelet( arm + rightno , pend#( fase# + 180 , amp# ) , 0 , 0 ) skelet( elbow + rightno , pend#( fase# + 90 , amp# ) + amp# , 0 , 0 ) skelet( arm + leftno , pend#( fase# , amp# ) , 0 , 0 ) skelet( elbow + leftno, pend#( fase# - 90 , amp# ) + amp# , 0 , 0 ) skelet( leg + rightno , pend#( fase# + 180 , amp# ) , 0 , 0 ) skelet( knee + rightno , pend#( fase# + 90 , amp# ) + amp# , 0 , 0 ) skelet( leg + leftno , pend#( fase# , amp# ) , 0 , 0 ) skelet( knee + leftno , pend#( fase# - 90 , amp# ) + amp# , 0 , 0 ) skelet( tail , -45 , pend#( fase# * 2 , 30 ) , 0 ) skelet( neck + rightno , 0 , 0 , 0 ) skelet( neck + leftno , 0 , 0 , 0 ) elseif anim = I_FLY then For i = 0 To 1 skelet( iwing + rightno + i , 0 , 0 , Pend#( fase# , amp# ) ) skelet( iwing + leftno + i , 0 , 0 , Pend#( fase# , -amp# ) ) Next: elseif anim = I_LEFT_BOX then skelet( iarm + rightno , 0 , Pend#( fase# , -amp# ) + 45 , 0 ) skelet( ielbow + rightno , 0 , Pend#( fase# , amp# * 2 ) - 60 , 0 ) elseif anim = I_LEFT_LEGS then For i = 0 To 4 skelet( ileg + leftno + i , 0 , 0 , Pend#( fase# + i * 180 , amp# ) ) skelet( iknee + leftno + i , Pend#( fase# + i * 180 + 90 , amp# ) , 0 , 0 ) Next: elseif anim = I_RIGHT_BOX then skelet( iarm + rightno , 0 , Pend#( fase#, amp# ) - 45,0 ) skelet( ielbow + rightno , 0 , Pend#( fase# , -amp# * 2) + 60, 0 ) elseif anim = I_RIGHT_LEGS then For i = 0 To 4 skelet( ileg + rightno + i , 0 , 0 , Pend#( fase# + i * 180 , amp# ) ) skelet( iknee + rightno + i , Pend#( fase# + i * 180 + 90 , amp# ) , 0 , 0 ) Next: elseif anim = I_STAND then skelet( iarm + rightno , 0, 45, 0 ) skelet( ielbow + rightno , 0, -60 , 0 ) skelet( ifinger + rightno , 0, 0, 0 ) skelet( ithumb + rightno , 0, 0, 0 ) skelet( iarm + leftno , 0 , -45 , 0 ) skelet( ielbow + leftno , 0 , 60 , 0 ) skelet( ifinger + leftno , 0 , 0 , 0 ) skelet( ithumb + leftno , 0 , 0 , 0 ) skelet( itail + rightno , 10 , 0 , 0 ) skelet( itail + leftno , 10 , 0 , 0 ) elseif anim = I_STING then skelet( itail + rightno , 10 + Pend#( fase# , amp# ) , 0 , 0 ) skelet( itail + leftno , 10 - Pend#( fase# , amp# ) , 0 , 0 ) else for i = 0 to 63 skelet( i , 0 , 0 , 0 ) next: i end if end if end sub dim orange#( 3 ) = vec4( 1 , .5 , 0 , 1 ) sub tree( i as integer , prog as string , f as double , x as double , y as double , z as double , kl#() ) dim q , t , w$ '' 1 < i < 7 '' 0 < f < 1 ''prog : no[ = no] and [ left of ] if i > 0 then for q = 1 to len( prog ) w$ = mid$( prog , q , 1 ) if w$ = "f" then ''draw trunk or twig and move pen material.diffuse = orange# material.ambient = orange# material_use( gl_front_AND_BACK , material ) setbox( 0 , 1 , 0 , .3,1,.3 ) '' cilinder( 6 , .3 * f , .3 * f , 1 , 1 ) cube() gltranslated( 0 , 2 , 0 ) elseif w$ = "l" then ''draw leaf material.diffuse = green# material.ambient = green# material_use( gl_front_and_back , material ) glpushmatrix() glscaled( .5 , .5 , .5 ) setpoint( 0 , 0 , 0 , 0 ) setpoint( 1 , 1 , 0 , 1 ) setpoint( 2 , 3 , 0 , 0 ) setpoint( 3 , 1 , 0 , -1 ) quad( 0 , 1 , 2 , 3 ) glpopmatrix() elseif w$ = "L" then ''draw set of leaves material.diffuse = green# material.ambient = green# material_use( gl_front_and_back , material ) for t = 0 to 4 glpushmatrix() glrotated( 72 * t , 0 , 1 , 0 ) glscaled( .5 , .5 , .5 ) setpoint( 0 , 0 , 0 , 0 ) setpoint( 1 , 1 , 0 , 1 ) setpoint( 2 , 3 , 0 , 0 ) setpoint( 3 , 1 , 0 , -1 ) quad( 0 , 1 , 2 , 3 ) glpopmatrix() next : t elseif w$ = "h" then ''draw a flower material.diffuse = kl# material.ambient = kl# material_use( gl_front_and_back , material ) for t = 0 to 4 glpushmatrix() glscaled( .5 , .5 , .5 ) glrotated( 72 * t , 0 , 1 , 0 ) setpoint( 0 , 0 , 0 , 0 ) setpoint( 1 , 1 , 1 , 1 ) setpoint( 2 , 3 , 3 , 0 ) setpoint( 3 , 1 , 1 , -1 ) quad( 0 , 1 , 2 , 3 ) glpopmatrix() next : t elseif w$ = "g" then ''move pen gltranslated( 0 , 2 , 0 ) elseif w$ = "[" then ''store x,y,z glpushmatrix() elseif w$ = "]" then ''read x,y,z glpopmatrix() elseif w$ = "X" then glrotated( x , 1,0,0 ) elseif w$ = "x" then glrotated( -x , 1,0,0 ) elseif w$ = "Y" then glrotated( y , 0,1,0 ) elseif w$ = "y" then glrotated( -y , 0,1,0 ) elseif w$ = "Z" then glrotated( z , 0,0,1 ) elseif w$ = "z" then glrotated( -z , 0,0,1 ) elseif w$ = "b" then ''draw hole tree smaler glscaled( f,f,f ) tree( i - 1 , prog , f,x,y,z,kl# ) else end if next : q end if end sub
dim i , j , k const letter$ = "abcdefghijklmnopqrstuvwxyz0123456789[]=" dim letterpart( 255 )( 8 )( 8 ) dim q as string for i = 1 to len( letter$ ) for j = 0 to 6 read q for k = 0 to 7 letterpart( asc( mid$( letter$ , i , 1 ) ) )( j )( k ) = val( mid$( q , k + 1 , 1 ) ) next : k next : j next : i
''a data "..111..." data ".1...1.." data "1.....1." data "1111111." data "1.....1." data "1.....1." data "1.....1." ''b data "111111.." data "1.....1." data "1.....1." data "111111.." data "1.....1." data "1.....1." data "111111.." ''c data "..111..." data ".1...1.." data "1......." data "1......." data "1......." data ".1...1.." data "..111..." ''d data "11111..." data "1....1.." data "1.....1." data "1.....1." data "1.....1." data "1....1.." data "11111..." ''e data "1111111." data "1.....1." data "1......." data "111111.." data "1......." data "1.....1." data "1111111." ''f data "1111111." data "1.....1." data "1......." data "111111.." data "1......." data "1......." data "1......." ''g data "..111..." data ".1...1.." data "1......." data "1...111." data "1.....1." data ".1...1.." data "..111..." ''h data "1.....1." data "1.....1." data "1.....1." data "1111111." data "1.....1." data "1.....1." data "1.....1." ''i data "..111..." data "...1...." data "...1...." data "...1...." data "...1...." data "...1...." data "..111..." ''j data "..111..." data "...1...." data "...1...." data "...1...." data "1..1...." data "1..1...." data ".11...." ''k data "1.....1." data "1....1.." data "1...1..." data "1111...." data "1...1..." data "1....1.." data "1.....1." ''l data "1......." data "1......." data "1......." data "1......." data "1......." data "1......." data "1111111." ''m data "1.....1." data "11...11." data "1.1.1.1." data "1..1..1." data "1..1..1." data "1.....1." data "1.....1." ''n data "1.....1." data "11....1." data "1.1...1." data "1..1..1." data "1...1.1." data "1....11." data "1.....1." ''o data "..111..." data ".1...1.." data "1.....1." data "1.....1." data "1.....1." data ".1...1.." data "..111..." ''p data "11111..." data "1....1.." data "1....1.." data "11111..." data "1.....,." data "1......." data "1......." ''q data "..111..." data ".1...1.." data "1.....1." data "1.....1." data "1...1.1." data ".1...1.." data "..111.1." ''r data "11111..." data "1....1.." data "1....1.." data "111111.." data "1...1..." data "1....1.." data "1.....1." ''s data "..1111.." data ".1....1." data ".1......" data "..1111.." data "......1." data ".1....1." data "..1111.." ''t data "1111111." data "1..1..1." data "...1...." data "...1...." data "...1...." data "...1...." data "..111..." ''u data "1.....1." data "1.....1." data "1.....1." data "1.....1." data "1.....1." data ".1...1.." data "..111..." ''v
data "1.....1." data "1.....1." data ".1...1.." data ".1...1.." data "..1.1..." data "..1.1..." data "...1...." ''w data "1.....1." data "1.....1." data "1.....1." data "1..1..1." data "1.1.1.1." data "11...11." data "1.....1." ''x data "1.....1." data ".1...1.." data "..1.1.." data "...1...." data "..1.1..." data ".1...1.." data "1.....1." ''y data "1.....1." data ".1...1.." data "..1.1.." data "...1...." data "..1....." data ".1......" data "1......." ''z data "1111111." data ".....1.." data "....1..." data "...1...." data "..1....." data ".1......" data "1111111." ''0 data ".11111.." data "1.....1." data "1.....1." data "1.....1." data "1.....1." data "1.....1." data ".11111.." ''1 data "......1." data ".....11." data "....1.1." data "......1." data "......1." data "......1." data "......1." ''2 data ".11111.." data "......1." data "......1." data ".11111.." data "1......." data "1......." data ".11111.." ''3 data ".11111.." data "......1." data "......1." data "....11.." data "......1." data "......1." data ".11111.." ''4 data "1.....1." data "1.....1." data "1.....1." data ".111111." data "......1." data "......1." data "......1." ''5 data ".11111.." data "1......." data "1......." data ".11111.." data "......1." data "......1." data ".11111.." ''6 data ".11111.." data "1......." data "1......." data ".11111.." data "1.....1." data "1.....1." data ".11111.." ''7 data "1111111." data ".....1.." data "....1..." data "...1...." data "..1....." data ".1......" data "1......." ''8 data ".11111.." data "1.....1." data "1.....1." data ".11111.." data "1.....1." data "1.....1." data ".11111.." ''9 data ".11111.." data "1.....1." data "1.....1." data ".111111." data "......1." data "......1." data ".11111.." ''[ data "..1111.." data "..1....." data "..1....." data "..1....." data "..1....." data "..1....." data "..1111.." ''] data "..1111..." data ".....1.." data ".....1.." data ".....1.." data ".....1.." data ".....1.." data "..1111.." ''= data "........" data "........" data "..1111.." data "........" data "........" data "..1111.." data "........"
sub digit( x as single , y as single , z as single , b , d as single , kl#() ) dim i , j material.diffuse = kl# material.ambient = kl# material_use( gl_frONT_AND_BACK , material ) for i = 0 to 7 for j = 0 to 7 if letterpart( b )( i )( j ) then setbox( x + i * d - 3 * d , y + i * d - 3 * d , z , d/2 , d/2 , d/2 ) cube() end if next : j next : i end sub
sub text( x as single , y as single , z as single , t as string , d as single , kl#() ) dim i , l = len( t ) for i = 1 to l digit( x + i * 8 * d - l * 4 * d - 4 * d , y , z , asc( mid$( t , i , 1 ) ) , d , kl# ) next : i end sub
dim frame# while true glclear( GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT ) glLoadidentity() glpushmatrix() gltranslatef( 5 , 0 , -10 ) glrotatef( frame# / 10 , 0 , 1 , 0 ) animate( 13 , 0 , 0 ) animate( human_walk , frame# , 30.0 ) '' human_robot( 1 , cyan# , white# ) glpopmatrix() glpushmatrix() gltranslated( 0 , 0 , -10 ) glrotatef( frame# / 5 , 0 , 1 , 0 ) '' tree( 4 , "f[xybLh]XybLh" , .7 , 45 , 90 , 30 , white# ) '' setbox( 0,0,0 , 1,1,1 ) '' cilinder( 64 , 1 , 1 , 1 , 1 ) glpopmatrix() glpushmatrix() gltranslatef( 0 , -3 , -10 ) glrotatef( frame# / 3 , 0 , 1 , 0 ) text( 0 , 0 , 0 , "this is a test" , 0.1 , white# ) glpopmatrix() glpushmatrix() gltranslatef( -4 , 0 , -10 ) glrotatef( -frame# / 10 , 0 , 1 , 0 ) animate( 13 , 0 , 0 ) animate( i_stand , 0 , 0 ) animate( i_sting , frame# , 7 ) '' bUg_robot( magenta# ) glpopmatrix() swapbuffers() sleep( 40 ) frame# = frame# + 10 wend
|
|
|
Post by bluatigro on Jan 6, 2020 1:35:44 GMT -5
update : added a random element to tree if you use 'r' in prog it choises a random angle
'' bluatigro 6 jan 2020 '' bluaGL_2 dim pnt#( 255 )( 2 ) sub setpoint( no , x# , y# , z# ) pnt#( no )( 0 ) = x# pnt#( no )( 1 ) = y# pnt#( no )( 2 ) = z# end sub sub tri( p1 , p2 , p3 ) dim n#( 2 ) = crossproduct( pnt#( p3 ) - pnt#( p1 ) , pnt#( p3 ) - pnt#( p2 ) ) n# = normalize( n# ) glBegin( GL_TRIANGLES ) glnormal3fv( n# ) glVertex3fv( pnt#( p1 ) ) glVertex3fv( pnt#( p2 ) ) glVertex3fv( pnt#( p3 ) ) glEnd() end sub sub quad( p1 , p2 , p3 , p4 ) dim n#( 2 ) = crossproduct( pnt#( p1 ) - pnt#( p3 ) , pnt#( p2 ) - pnt#( p3 ) ) n# = normalize( n# ) glBegin( GL_QUADS ) glnormal3fv( n# ) glVertex3fv( pnt#( p1 ) ) glVertex3fv( pnt#( p2 ) ) glVertex3fv( pnt#( p3 ) ) glVertex3fv( pnt#( p4 ) ) glEnd() end sub
glEnable( gl_lighting ) dim lightposition#( 3 ) = vec4( -50 , 50 , 10 , 1 ) dim lightdiffuse#( 3 ) = vec4( 1 , 1 , 1 , 1 ) dim lightambient#( 3 ) = vec4( .2 , .2 , .2 , 1 ) glLightfv( gl_light0 , gl_position, lightposition# ) glLightfv( gl_light0 , gl_diffuse , lightdiffuse# ) gllightfv( gl_lIGHT0 , gl_amBIENT , lightambient# ) glEnable( gl_light0 )
type tmaterial ambient( 3 ) as single diffuse( 3 ) as single specular( 3 ) as single emision( 3 ) as single shininess as single end type dim tmaterial material sub material_use( a , m as tmaterial ) glMaterialfv( a , GL_AMBIENT , m.ambient ) glMaterialfv( a , GL_DIFFUSE , m.diffuse ) glMaterialfv( a , GL_SPECULAR , m.specular ) glMaterialfv( a , GL_EMISSION , m.emision ) glMaterialf( a , GL_SHININESS , m.shininess ) end sub dim black#( 3 ) = vec4( 0 , 0 , 0 , 1 ) dim red#( 3 ) = vec4( 1 , 0 , 0 , 1 ) dim green#( 3 ) = vec4( 0 , 1 , 0 , 1 ) dim yellow#( 3 ) = vec4( 1 , 1 , 0 , 1 ) dim blue#( 3 ) = vec4( 0 , 0 , 1 , 1 ) dim magenta#( 3 ) = vec4( 1 , 0 , 1 , 1 ) dim cyan#( 3 ) = vec4( 0 , 1 , 1 , 1 ) dim white#( 3 ) = vec4( 1 , 1 , 1 , 1 ) type tcamera x as single y as single z as single pan as single end type dim tcamera camera sub camara_use( c as tcamera ) glRotatef( -c.pan , 0 , 1 , 0 ) gltranslatef( -c.x , -c.y , -c.z ) end sub dim box#(5) sub setbox( x# , y# , z# , dx# , dy# , dz# ) box#(0) = x# box#(1) = y# box#(2) = z# box#(3) = dx# box#(4) = dy# box#(5) = dz# end sub sub cube() '' fil points of swarm setpoint( 0 , -1 , -1 , -1 ) setpoint( 1 , -1 , -1 , 1 ) setpoint( 2 , -1 , 1 , -1 ) setpoint( 3 , -1 , 1 , 1 ) setpoint( 4 , 1 , -1 , -1 ) setpoint( 5 , 1 , -1 , 1 ) setpoint( 6 , 1 , 1 , -1 ) setpoint( 7 , 1 , 1 , 1 ) '' use swarmpoints to create mesh glPushMatrix() glTranslatef( box#( 0 ) , box#( 1 ) , box#( 2 ) ) glScalef( box#( 3 ) , box#( 4 ) , box#( 5 ) ) quad( 0 , 1 , 3 , 2 ) ''left quad( 7 , 6 , 4 , 5 ) ''right quad( 0 , 1 , 5 , 4 ) ''bottom quad( 7 , 6 , 2 , 3 ) ''top quad( 0 , 2 , 6 , 4 ) ''front quad( 7 , 5 , 1 , 3 ) ''back glPopMatrix() end sub sub cilinder( sides as integer , dx as single , dz as single , top as integer , bot as integer ) dim f if sides < 3 then sides = 3 : end if if sides > 64 then sides = 64 : end if for f = 0 to sides + 2 setpoint( f , box#( 0 ) + sin( f * m_pi * 2 / sides ) * box#( 3 ) , box#( 1 ) - box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * box#( 5 ) ) setpoint( f + sides + 1 , box#( 0 ) + sin( f * m_pi * 2 / sides ) * dx , box#( 1 ) + box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * dz ) next : f for f = 0 to sides + 1 quad( f , f + 1 , f + 2 + sides , f + 1 + sides ) next : f if top then setpoint( 255 , box#( 0 ) , box#( 1 ) , box#( 2 ) ) for f = 0 to sides + 2 setpoint( f , box#( 0 ) + sin( f * m_pi * 2 / sides ) * dx , box#( 1 ) + box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * dz ) next : f for f = 0 to sides + 1 tri( 255 , f , f + 1 ) next : f end if if bot then setpoint( 255 , 0 , box#( 0 ) - box#( 3 ) , 0 ) for f = 0 to sides + 3 setpoint( f , box#( 0 ) + sin( f * m_pi * 2 / sides ) * box#( 3 ) , box#( 1 ) - box#( 4 ) , box#( 2 ) + cos( f * m_pi * 2 / sides ) * box#( 5 ) ) next : f for f = 0 to sides + 1 tri( 255 , f , f + 1 ) next : f end if end sub
dim sk#( 64 )( 2 ) sub skelet( no , x# , y# , z# ) sk#( no )( 0 ) = x# sk#( no )( 1 ) = y# sk#( no )( 2 ) = z# end sub const xyz = 0 const xzy = 1 const yxz = 2 const yzx = 3 const zxy = 4 const zyx = 5 sub child( x# , y# , z# , lim , ax ) glTranslatef( x# , y# , z# ) if ax = xyz then glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) elseif ax = xzy then glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) elseif ax = yxz then glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 2 ) elseif ax = yzx then glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) elseif ax = zxy then glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) elseif ax = zyx then glrotatef( sk#( lim )( 2 ) , 0 , 0 , 1 ) glrotatef( sk#( lim )( 1 ) , 0 , 1 , 0 ) glrotatef( sk#( lim )( 0 ) , 1 , 0 , 0 ) else end if end sub function pend#( fase# , amp# ) return sind( fase# ) * amp# end function const leftno = 0 const arm = 1 const elbow = 2 const wrist = 3 const leg = 4 const knee = 5 const enkle = 6 const neck = 7 const thumb = 8 const index_finger = 11 const middle_finger = 14 const ring_finger = 17 const pinky_finger = 20 const tail = 25
const iarm = 1 const ielbow = 2 const iwrist = 3 const ileg = 4 const iknee = 9 const iwing = 14 const itail = 16 const isensor = 17 const ithumb = 18 const ifinger = 19
const rightno = 32 sub finger( lim ) '' part of human robot avatar setbox( 0 , -2 , 0 , 1 , 1 , 1 ) cube() glpushmatrix() child( 0 , -2 , 0 , lim + 1 , xyz ) cube() glpushmatrix() child( 0 , -2 , 0 , lim + 2 , xyz ) cube() glpopmatrix() glpopmatrix() end sub sub hand( lr , kl#() ) '' part of human robot avatar material.diffuse = kl# MATERIAL.AMBIENT = KL# material_use( gl_frONT , material ) setbox( 0 , -4 , 0 , 1 , 4 , 3 ) cube() glpushmatrix() child( 0 , -8 , 1.5 , lr + index_finger , zxy ) finger( lr + index_finger ) glpopmatrix() glpushmatrix() child( 0 , -8 , .5 , lr + middle_finger , zxy ) finger( lr + middle_finger ) glpopmatrix() glpushmatrix() child( 0 , -8 , -.5 , lr + ring_finger , zxy ) finger( lr + ring_finger ) glpopmatrix() glpushmatrix() child( 0 , -8 , -1.5 , lr + pinky_finger , zxy ) finger( lr + pinky_finger ) glpopmatrix() glpushmatrix() child( 0 , -1 , 3.5 , lr + thumb , zxy ) finger( lr + thumb ) glpopmatrix() end sub sub human_robot( h , kl#() , klh#() ) material.diffuse = kl# material.ambient = kl# material_use( gl_front , material ) setbox( 0 , 0 , 0 , .5 , .1 , .1 ) cube() setbox( 0 , .75 , 0 , .1 , .5 , .1 ) cube() setbox( 0 , 1.8 , 0 , .2 , .2 , .2 ) cube() setbox( 0 , 1.4 , 0 , .7 , .1 , .1 ) cube() glPushMatrix() child( .45 , 0 , 0 , leg + rightno , zyx ) setbox( 0 , -.6 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , knee + rightno , xyz ) cube() glPushMatrix() child( 0 , -1.2 , 0 , enkle + rightno , xyz ) setbox( 0 , 0 , .2 , .1 , .1 , .3 ) cube() glPopMatrix() glPopMatrix() glPopMatrix() glPushMatrix() child( -.45 , 0 , 0 , leg + leftno , zyx ) setbox( 0 , -.6 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , knee + leftno , xyz ) cube() glPushMatrix() child( 0 , -1.2 , 0 , enkle + leftno , xyz ) setbox( 0 , 0 , .2 , .1 , .1 , .3 ) cube() glPopMatrix() glPopMatrix() glPopMatrix() glPushMatrix() child( .65 , 1.3 , 0 , arm + rightno , xyz ) setbox( 0 , -.5 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , elbow + rightno , xyz ) cube() glPushMatrix() child( 0 , -1 , 0 , wrist + rightno , zyx ) glscalef( .1 , .1 , .1 ) hand( rightno , klh# ) glPopMatrix() glPopMatrix() glPopMatrix() material.diffuse = kl# material.ambient = kl# material_use( gl_front , material ) glPushMatrix() child( -.65 , 1.3 , 0 , arm + leftno , xyz ) setbox( 0 , -.5 , 0 , .1 , .4 , .1 ) cube() glPushMatrix() child( 0 , -1 , 0 , elbow + leftno , xyz ) cube() glPushMatrix() child( 0 , -1 , 0 , wrist + leftno , zyx ) glscalef( .1 , .1 , .1 ) hand( leftno , klh# ) glPopMatrix() glPopMatrix() glPopMatrix() end sub
sub bug_robot( kl#() ) material.diffuse = kl# material.ambient = kl# material_use( gl_front , material ) Dim i as integer glPushmatrix() glScaled( .01 , .01 , .01 ) setbox( 0, 0, 0, 30, 10.0, 60.0 ) Cube() For i = 0 To 4 glPushMatrix() child( 35.0, 0.0, i * 25 - 50 , ileg + rightno + i, xyz ) setbox( 30.0, 0.0, 0.0, 30.0, 5.0, 5.0 ) Cube() glPushMatrix() child( 65.0, -5.0, 0.0 , iknee + rightno + i, xyz) setbox( 0.0, -30.0, 0.0, 5.0, 30.0, 5.0) Cube() glPopMatrix() glPopMatrix() glpushMatrix() child( -35.0, 0.0, i * 25 - 50, ileg + leftno + i, xyz) setbox( -30.0, 0.0, 0.0, 30.0, 5.0, 5.0) Cube() glPushMatrix() child( -65.0, -5.0, 0.0 , iknee + leftno + i + 1, xyz) setbox( 0.0, -30.0, 0.0, 5.0, 30.0, 5.0) Cube() glPopmatrix() glPopMatrix() Next glPushMatrix() child( 0 , 0 , -50 , itail + rightno, xyz) For i = 0 To 9 glPushMatrix() child( 0.0, 0.0, -30.0 , itail + rightno , xyz ) setbox( 0.0, 0.0, -15.0, 10.0, 10.0, 10.0 ) Cube() Next for i = 0 to 8 glPushMatrix() child( 0 , 0 , -30 , itail + leftno , xyz ) cube() next :i for i = 0 to 8 glPopMatrix() glPopMatrix() next :i glPopMatrix() glPushMatrix() child( 30.0, 0.0, 65.0, iarm + rightno, xyz) setbox( 0.0, 0.0, 65.0 , 5 , 5 , 30 ) Cube() glPushMatrix() child( 0.0, 0.0, 65.0, ielbow + rightno, xyz ) Cube() glPushmatrix() child( 0.0, 0.0, 65.0 , iwrist + rightno, xyz) glPushmatrix() child(-10.0, 0.0, 5.0 , ithumb + rightno, xyz) Cube() glPopMatrix() glPushMatrix() child( 5.0, 0.0, 5.0, ifinger+ rightno, xyz ) setbox( 0.0, 0.0, 30.0, 5.0, 10.0, 30.0 ) Cube() glPopMatrix() glPopMatrix() glPopMatrix() glPopMatrix() glPushMatrix() child( -30.0, 0.0, 65.0, iarm + leftno, xyz) setbox( 0.0, 0.0, 30.0, 5.0, 5.0, 30.0) Cube() glPushMatrix() child( 0.0, 0.0, 65.0, ielbow +leftno, xyz) Cube() glPushMatrix() child( 0.0, 0.0, 65.0, iwrist+leftno, xyz) glPushMatrix() child( 10.0, 0.0, 5.0, ithumb+leftno, xyz) Cube() glPopMatrix() glPushMatrix() child(-5.0, 0.0, 5.0, ifinger+leftno, xyz) setbox( 0.0, 0.0, 30.0, 5.0, 10.0, 30.0) Cube() glPopMatrix() glPopMatrix() glPopMatrix() glPopMatrix() For i = 0 To 1 glPushMatrix() child(20.0, 20.0, 40.0 - 50.0 * i, iwing + rightno+ i, xyz) setbox( 60.0, 0.0, 8.0, 60.0, 2.0, 16.0) Cube() glPopMatrix() glPushMatrix() child(-20.0, 20.0, 40.0 - 50.0 * i , iwing+leftno + i, xyz) setbox( -60.0, 0.0, 8.0, 60.0, 2.0, 16.0) Cube() glPopmatrix() Next glPopMatrix() end sub
const human_walk = 0 const dog_walk = 1 const I_FLY = 3 const I_LEFT_LEGS = 4 const I_LEFT_BOX = 5 const I_RIGHT_LEGS = 6 const I_RIGHT_BOX = 7 const I_STING = 8 const I_STAND = 9
sub animate( anim , fase# , amp# ) dim i if anim = human_walk then skelet( arm + rightno, pend#( fase# , amp# ) , 0 , 0 ) skelet( elbow + rightno, -abs( amp# ) , 0 , 0 ) skelet( arm + leftno , pend#( fase# + 180, amp# ) , 0 , 0 ) skelet( elbow + leftno , -abs( amp# ) , 0 , 0 ) skelet( leg + rightno , pend#( fase# + 180 , amp# ) , 0 , 0 ) skelet( knee + rightno , pend#( fase# + 90 , amp# ) + amp# , 0 , 0 ) skelet( leg + leftno , pend#( fase# , amp# ) , 0 , 0 ) skelet( knee + leftno , pend#( fase# - 90 , amp# ) + amp# , 0 , 0 ) skelet( thumb + rightno , -pend#( fase# , 10 ) - 10 , 0 , pend#( fase# + 90 , 10 ) ) skelet( thumb + leftno , -pend#( fase# , 10 ) - 10 , 0 , pend#( fase# + 90 , 10 ) ) for i = 0 to 2 skelet( pinky_finger + rightno + i , 0 , 0 , -pend#( fase# + 60 , 10 ) - 10 ) skelet( index_finger + rightno + i , 0 , 0 , -pend#( fase# + 30 , 10 ) - 10 ) skelet( middle_finger + rightno + i , 0 , 0 , -pend#( fase# , 10 ) - 10 ) skelet( ring_finger + rightno + i , 0 , 0 , -pend#( fase# - 30 , 10 ) - 10 ) skelet( pinky_finger + leftno + 1 , 0 , 0 , pend#( fase# + 60 , 10 ) + 10 ) skelet( index_finger + leftno + i , 0 , 0 , pend#( fase# + 30 , 10 ) + 10 ) skelet( middle_finger + leftno + i , 0 , 0 , pend#( fase# , 10 ) + 10 ) skelet( ring_finger + leftno + i , 0 , 0 , pend#( fase# - 30 , 10 ) + 10 ) next : i else if anim = dog_walk then skelet( arm + rightno , pend#( fase# + 180 , amp# ) , 0 , 0 ) skelet( elbow + rightno , pend#( fase# + 90 , amp# ) + amp# , 0 , 0 ) skelet( arm + leftno , pend#( fase# , amp# ) , 0 , 0 ) skelet( elbow + leftno, pend#( fase# - 90 , amp# ) + amp# , 0 , 0 ) skelet( leg + rightno , pend#( fase# + 180 , amp# ) , 0 , 0 ) skelet( knee + rightno , pend#( fase# + 90 , amp# ) + amp# , 0 , 0 ) skelet( leg + leftno , pend#( fase# , amp# ) , 0 , 0 ) skelet( knee + leftno , pend#( fase# - 90 , amp# ) + amp# , 0 , 0 ) skelet( tail , -45 , pend#( fase# * 2 , 30 ) , 0 ) skelet( neck + rightno , 0 , 0 , 0 ) skelet( neck + leftno , 0 , 0 , 0 ) elseif anim = I_FLY then For i = 0 To 1 skelet( iwing + rightno + i , 0 , 0 , Pend#( fase# , amp# ) ) skelet( iwing + leftno + i , 0 , 0 , Pend#( fase# , -amp# ) ) Next: elseif anim = I_LEFT_BOX then skelet( iarm + rightno , 0 , Pend#( fase# , -amp# ) + 45 , 0 ) skelet( ielbow + rightno , 0 , Pend#( fase# , amp# * 2 ) - 60 , 0 ) elseif anim = I_LEFT_LEGS then For i = 0 To 4 skelet( ileg + leftno + i , 0 , 0 , Pend#( fase# + i * 180 , amp# ) ) skelet( iknee + leftno + i , Pend#( fase# + i * 180 + 90 , amp# ) , 0 , 0 ) Next: elseif anim = I_RIGHT_BOX then skelet( iarm + rightno , 0 , Pend#( fase#, amp# ) - 45,0 ) skelet( ielbow + rightno , 0 , Pend#( fase# , -amp# * 2) + 60, 0 ) elseif anim = I_RIGHT_LEGS then For i = 0 To 4 skelet( ileg + rightno + i , 0 , 0 , Pend#( fase# + i * 180 , amp# ) ) skelet( iknee + rightno + i , Pend#( fase# + i * 180 + 90 , amp# ) , 0 , 0 ) Next: elseif anim = I_STAND then skelet( iarm + rightno , 0, 45, 0 ) skelet( ielbow + rightno , 0, -60 , 0 ) skelet( ifinger + rightno , 0, 0, 0 ) skelet( ithumb + rightno , 0, 0, 0 ) skelet( iarm + leftno , 0 , -45 , 0 ) skelet( ielbow + leftno , 0 , 60 , 0 ) skelet( ifinger + leftno , 0 , 0 , 0 ) skelet( ithumb + leftno , 0 , 0 , 0 ) skelet( itail + rightno , 10 , 0 , 0 ) skelet( itail + leftno , 10 , 0 , 0 ) elseif anim = I_STING then skelet( itail + rightno , 10 + Pend#( fase# , amp# ) , 0 , 0 ) skelet( itail + leftno , 10 - Pend#( fase# , amp# ) , 0 , 0 ) else for i = 0 to 63 skelet( i , 0 , 0 , 0 ) next: i end if end if end sub dim orange#( 3 ) = vec4( 1 , .5 , 0 , 1 ) sub tree( i as integer , prog as string , f as double , x as double , y as double , z as double , kl#() ) dim q , t , w$ , a$ '' 1 < i < 7 '' 0 < f < 1 ''prog : no[ = no] and [ left of ] if i > 0 then for q = 1 to len( prog ) w$ = mid$( prog , q , 1 ) if w$ = "f" then ''draw trunk or twig and move pen material.diffuse = orange# material.ambient = orange# material_use( gl_front_AND_BACK , material ) setbox( 0 , 1 , 0 , .3,1,.3 ) '' cilinder( 6 , .3 * f , .3 * f , 1 , 1 ) cube() gltranslated( 0 , 2 , 0 ) elseif w$ = "l" then ''draw leaf material.diffuse = green# material.ambient = green# material_use( gl_front_and_back , material ) glpushmatrix() glscaled( .5 , .5 , .5 ) setpoint( 0 , 0 , 0 , 0 ) setpoint( 1 , 1 , 0 , 1 ) setpoint( 2 , 3 , 0 , 0 ) setpoint( 3 , 1 , 0 , -1 ) quad( 0 , 1 , 2 , 3 ) glpopmatrix() elseif w$ = "L" then ''draw set of leaves material.diffuse = green# material.ambient = green# material_use( gl_front_and_back , material ) for t = 0 to 4 glpushmatrix() glrotated( 72 * t , 0 , 1 , 0 ) glscaled( .5 , .5 , .5 ) setpoint( 0 , 0 , 0 , 0 ) setpoint( 1 , 1 , 0 , 1 ) setpoint( 2 , 3 , 0 , 0 ) setpoint( 3 , 1 , 0 , -1 ) quad( 0 , 1 , 2 , 3 ) glpopmatrix() next : t elseif w$ = "h" then ''draw a flower material.diffuse = kl# material.ambient = kl# material_use( gl_front_and_back , material ) for t = 0 to 4 glpushmatrix() glscaled( .5 , .5 , .5 ) glrotated( 72 * t , 0 , 1 , 0 ) setpoint( 0 , 0 , 0 , 0 ) setpoint( 1 , 1 , 1 , 1 ) setpoint( 2 , 3 , 3 , 0 ) setpoint( 3 , 1 , 1 , -1 ) quad( 0 , 1 , 2 , 3 ) glpopmatrix() next : t elseif w$ = "g" then ''move pen gltranslated( 0 , 2 , 0 ) elseif w$ = "[" then ''store x,y,z glpushmatrix() elseif w$ = "]" then ''read x,y,z glpopmatrix() elseif w$ = "X" then glrotated( x , 1,0,0 ) elseif w$ = "x" then glrotated( -x , 1,0,0 ) elseif w$ = "Y" then glrotated( y , 0,1,0 ) elseif w$ = "y" then glrotated( -y , 0,1,0 ) elseif w$ = "Z" then glrotated( z , 0,0,1 ) elseif w$ = "z" then glrotated( -z , 0,0,1 ) elseif w$ = "r" then a$ = mid$( "xyzXYZ" , int( rnd() % 6 + 1 ) , 1 ) tree( i , a$ , f,x,y,z,kl# ) elseif w$ = "b" then ''draw hole tree smaler glscaled( f,f,f ) tree( i - 1 , prog , f,x,y,z,kl# ) else end if next : q end if end sub
dim i , j , k const letter$ = "abcdefghijklmnopqrstuvwxyz0123456789[]=" dim letterpart( 255 )( 8 )( 8 ) dim q as string for i = 1 to len( letter$ ) for j = 0 to 6 read q for k = 0 to 7 letterpart( asc(mid$(letter$,i,1)) )( j )( k ) = val( mid$( q , k + 1 , 1 ) ) next : k next : j next : i
''a data "..111..." data ".1...1.." data "1.....1." data "1111111." data "1.....1." data "1.....1." data "1.....1." ''b data "111111.." data "1.....1." data "1.....1." data "111111.." data "1.....1." data "1.....1." data "111111.." ''c data "..111..." data ".1...1.." data "1......." data "1......." data "1......." data ".1...1.." data "..111..." ''d data "11111..." data "1....1.." data "1.....1." data "1.....1." data "1.....1." data "1....1.." data "11111..." ''e data "1111111." data "1.....1." data "1......." data "111111.." data "1......." data "1.....1." data "1111111." ''f data "1111111." data "1.....1." data "1......." data "111111.." data "1......." data "1......." data "1......." ''g data "..111..." data ".1...1.." data "1......." data "1...111." data "1.....1." data ".1...1.." data "..111..." ''h data "1.....1." data "1.....1." data "1.....1." data "1111111." data "1.....1." data "1.....1." data "1.....1." ''i data "..111..." data "...1...." data "...1...." data "...1...." data "...1...." data "...1...." data "..111..." ''j data "..111..." data "...1...." data "...1...." data "...1...." data "1..1...." data "1..1...." data ".11...." ''k data "1.....1." data "1....1.." data "1...1..." data "1111...." data "1...1..." data "1....1.." data "1.....1." ''l data "1......." data "1......." data "1......." data "1......." data "1......." data "1......." data "1111111." ''m data "1.....1." data "11...11." data "1.1.1.1." data "1..1..1." data "1..1..1." data "1.....1." data "1.....1." ''n data "1.....1." data "11....1." data "1.1...1." data "1..1..1." data "1...1.1." data "1....11." data "1.....1." ''o data "..111..." data ".1...1.." data "1.....1." data "1.....1." data "1.....1." data ".1...1.." data "..111..." ''p data "11111..." data "1....1.." data "1....1.." data "11111..." data "1.....,." data "1......." data "1......." ''q data "..111..." data ".1...1.." data "1.....1." data "1.....1." data "1...1.1." data ".1...1.." data "..111.1." ''r data "11111..." data "1....1.." data "1....1.." data "111111.." data "1...1..." data "1....1.." data "1.....1." ''s data "..1111.." data ".1....1." data ".1......" data "..1111.." data "......1." data ".1....1." data "..1111.." ''t data "1111111." data "1..1..1." data "...1...." data "...1...." data "...1...." data "...1...." data "..111..." ''u data "1.....1." data "1.....1." data "1.....1." data "1.....1." data "1.....1." data ".1...1.." data "..111..." ''v
data "1.....1." data "1.....1." data ".1...1.." data ".1...1.." data "..1.1..." data "..1.1..." data "...1...." ''w data "1.....1." data "1.....1." data "1.....1." data "1..1..1." data "1.1.1.1." data "11...11." data "1.....1." ''x data "1.....1." data ".1...1.." data "..1.1.." data "...1...." data "..1.1..." data ".1...1.." data "1.....1." ''y data "1.....1." data ".1...1.." data "..1.1.." data "...1...." data "..1....." data ".1......" data "1......." ''z data "1111111." data ".....1.." data "....1..." data "...1...." data "..1....." data ".1......" data "1111111." ''0 data ".11111.." data "1.....1." data "1.....1." data "1.....1." data "1.....1." data "1.....1." data ".11111.." ''1 data "......1." data ".....11." data "....1.1." data "......1." data "......1." data "......1." data "......1." ''2 data ".11111.." data "......1." data "......1." data ".11111.." data "1......." data "1......." data ".11111.." ''3 data ".11111.." data "......1." data "......1." data "....11.." data "......1." data "......1." data ".11111.." ''4 data "1.....1." data "1.....1." data "1.....1." data ".111111." data "......1." data "......1." data "......1." ''5 data ".11111.." data "1......." data "1......." data ".11111.." data "......1." data "......1." data ".11111.." ''6 data ".11111.." data "1......." data "1......." data ".11111.." data "1.....1." data "1.....1." data ".11111.." ''7 data "1111111." data ".....1.." data "....1..." data "...1...." data "..1....." data ".1......" data "1......." ''8 data ".11111.." data "1.....1." data "1.....1." data ".11111.." data "1.....1." data "1.....1." data ".11111.." ''9 data ".11111.." data "1.....1." data "1.....1." data ".111111." data "......1." data "......1." data ".11111.." ''[ data "..1111.." data "..1....." data "..1....." data "..1....." data "..1....." data "..1....." data "..1111.." ''] data "..1111..." data ".....1.." data ".....1.." data ".....1.." data ".....1.." data ".....1.." data "..1111.." ''= data "........" data "........" data "..1111.." data "........" data "........" data "..1111.." data "........"
sub digit( x as single , y as single , z as single , b , d as single , kl#() ) dim i , j material.diffuse = kl# material.ambient = kl# material_use( gl_frONT_AND_BACK , material ) for i = 0 to 7 for j = 0 to 7 if letterpart( b )( i )( j ) = 1 then setbox( x + i * d - 3 * d , y + i * d - 3 * d , z , d/2 , d/2 , d/2 ) cube() end if next : j next : i end sub
sub text( x as single , y as single , z as single , t as string , d as single , kl#() ) dim i , l = len( t ) for i = 1 to l digit( x + i * 8 * d - l * 4 * d - 4 * d , y , z , asc( mid$( t , i , 1 ) ) , d , kl# ) next : i end sub
dim frame# while true glclear( GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT ) glLoadidentity() glpushmatrix() gltranslatef( 5 , 0 , -10 ) glrotatef( frame# / 10 , 0 , 1 , 0 ) animate( 13 , 0 , 0 ) animate( human_walk , frame# , 30.0 ) '' human_robot( 1 , cyan# , white# ) glpopmatrix() randomize( 0 ) glpushmatrix() gltranslated( 5 , 0 , -10 ) glrotatef( frame# / 5 , 0 , 1 , 0 ) tree( 3 , "f[rrbLh]rrbLh" , .7 , 45 , 90 , 30 , white# ) '' setbox( 0,0,0 , 1,1,1 ) '' cilinder( 64 , 1 , 1 , 1 , 1 ) glpopmatrix() glpushmatrix() gltranslated( 0 , 0 , -10 ) glrotatef( frame# / 5 , 0 , 1 , 0 ) tree( 3 , "f[rrbLh]rrbLh" , .7 , 45 , 90 , 30 , white# ) '' setbox( 0,0,0 , 1,1,1 ) '' cilinder( 64 , 1 , 1 , 1 , 1 ) glpopmatrix() glpushmatrix() gltranslated( -5 , 0 , -10 ) glrotatef( frame# / 5 , 0 , 1 , 0 ) tree( 3 , "f[rrbLh]rrbLh" , .7 , 45 , 90 , 30 , white# ) '' setbox( 0,0,0 , 1,1,1 ) '' cilinder( 64 , 1 , 1 , 1 , 1 ) glpopmatrix() glpushmatrix() gltranslatef( 0 , -3 , -10 ) glrotatef( frame# / 3 , 0 , 1 , 0 ) '' text( 0 , 0 , 0 , "this is a test" , 0.1 , white# ) glpopmatrix() glpushmatrix() gltranslatef( -4 , 0 , -10 ) glrotatef( -frame# / 10 , 0 , 1 , 0 ) animate( 13 , 0 , 0 ) animate( i_stand , 0 , 0 ) animate( i_sting , frame# , 7 ) '' bUg_robot( magenta# ) glpopmatrix() swapbuffers() sleep( 40 ) frame# = frame# + 10 wend
|
|