NB. Cube with Texture Selected Pattern NB. Checher Pattern 2010/2/17 NB. Dice Pattern 2010/4/5 NB. Dice Casting 2010/4/13, 4/17 NB. run '' => display dice pattern NB. run 0 => display checker pattern require 'gl3' A=: noun define pc a closeok; xywh 0 0 200 200;cc g isigraph ws_clipchildren ws_clipsiblings rightmove bottommove; pas 0 0; rem form end; ) run =: a_run a_run=: verb define T =: y. wd A glaRC'' R=: 0 0 0 wd 'pshow;ptop' ) NB. Dice will be cast 2010/4/13, 4/17 a_g_char =: verb define NB. if. press 'g' or 'G', then dice is cast if. 'g' = 0 { sysdata do. R =: 90*(3?5) end. NB. cast if. 'G' = 0 { sysdata do. R =: 360 | 3?360 end. NB. random R=: 360 | R + 5 * 'xyz' = 0 { sysdata R=: 360 | R - 5 * 'XYZ' = 0 { sysdata glpaintx'' ) a_g_size=:verb define glViewport 0 0,glqwh'' glMatrixMode GL_PROJECTION glLoadIdentity'' NB. glOrtho _2 2 _2 2 _2 2 gluPerspective 80 1 1 100 ) a_g_paint=:verb define glMatrixMode GL_MODELVIEW glLoadIdentity '' glTranslate 0 0 _5 glRotate R ,. 3 3$ 1 0 0 0 if. 0 = #T do. 1 drawface1 texdraw pat_d1 drawface2 texdraw pat_d2 drawface3 texdraw pat_d3 drawface4 texdraw pat_d4 drawface5 texdraw pat_d5 drawface6 texdraw pat_d6 else. select. T case. 0 do. texture pattern end. end. glaSwapBuffers'' ) NB. DrawTexture one face, one pattern ========================================= NB. Adverb definition / left arg(u.): verb, right arg(y.): noun NB. revised 2010/4/7 adverb definition to verb(u.) with 2 noun arguments(x. y.) NB. first, clear buffer_bit => 1 drawface1 texdraw pattern1 NB. other, not clear buffer => drawfaceN texdraw patternN texdraw =: 1 : 0 0 u. texdraw y. : glClearColor 0 0 1 0 glEnable GL_DEPTH_TEST glDepthFunc GL_LEQUAL glPixelStore GL_UNPACK_ALIGNMENT, 1 glTexImage2D (GL_TEXTURE_2D, 0 3 64 64 0, GL_RGBA, GL_UNSIGNED_BYTE); y. NB. Select Pattern glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_CLAMP glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_CLAMP glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL glEnable GL_TEXTURE_2D glShadeModel GL_FLAT if. x. do. NB. when x.=1, clear buffer bit glClear GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT end. u. '' NB. execute verb as left argument u. ) NB. Bind Texture Coordinates to Vertex ================================ drawface1 =: 3 : 0 glBegin GL_QUADS glTexCoord 0 0 0 1 NB. face1 glVertex _1 1 1 glTexCoord 0 1 0 1 glVertex _1 _1 1 glTexCoord 1 1 0 1 glVertex 1 _1 1 glTexCoord 1 0 0 1 glVertex 1 1 1 glEnd'' ) drawface2 =: 3 : 0 glBegin GL_QUADS glTexCoord 0 0 0 1 NB. face2 glVertex 1 1 1 glTexCoord 0 1 0 1 glVertex 1 _1 1 glTexCoord 1 1 0 1 glVertex 1 _1 _1 glTexCoord 1 0 0 1 glVertex 1 1 _1 glEnd'' ) drawface3 =: 3 : 0 glBegin GL_QUADS glTexCoord 0 0 0 1 NB. face3 glVertex 1 1 _1 glTexCoord 0 1 0 1 glVertex 1 _1 _1 glTexCoord 1 1 0 1 glVertex _1 _1 _1 glTexCoord 1 0 0 1 glVertex _1 1 _1 glEnd'' ) drawface4 =: 3 : 0 glBegin GL_QUADS glTexCoord 0 0 0 1 NB. face4 glVertex _1 1 _1 glTexCoord 0 1 0 1 glVertex _1 _1 _1 glTexCoord 1 1 0 1 glVertex _1 _1 1 glTexCoord 1 0 0 1 glVertex _1 1 1 glEnd'' ) drawface5 =: 3 : 0 glBegin GL_QUADS glTexCoord 0 0 0 1 NB. face5 glVertex _1 1 _1 glTexCoord 0 1 0 1 glVertex _1 1 1 glTexCoord 1 1 0 1 glVertex 1 1 1 glTexCoord 1 0 0 1 glVertex 1 1 _1 glEnd'' ) drawface6 =: 3 : 0 glBegin GL_QUADS glTexCoord 0 0 0 1 NB. face6 glVertex _1 _1 1 glTexCoord 0 1 0 1 glVertex _1 _1 _1 glTexCoord 1 1 0 1 glVertex 1 _1 _1 glTexCoord 1 0 0 1 glVertex 1 _1 1 glEnd'' ) NB. make dice pattern ================================================== IJ100 =: 10 #.^:(_1) i.100 IJ64 =: 8 #.^:(_1) i.64 IJ36 =: 6 #.^:(_1) i.36 tc =: 3 : 0 : 'I J R' =. x. 'X Y' =. y. 0 < ((%:2)*R) - (%: +/ *: (X-I), (Y-J)) ) dice =: 3 : 0 : 'I J R' =. x. N =. y. IJN =. N #.^:(_1) i. *: N NB. ((N, N)$ (I, J, R) tc"(1) IJN) { _1 0 (N, N)$ (I, J, R) tc"(1) IJN ) pat_d1 =: , (32 32 6 dice 64) { _1 _16776961 NB. Red in White pat_d30 =: 16 16 4 dice 64 pat_d31 =: 32 32 4 dice 64 pat_d32 =: 48 48 4 dice 64 pat_d2 =: , (pat_d30 +. pat_d32) { _1 0 NB. Black in White pat_d3 =: , (pat_d30 +. pat_d31 + pat_d32) { _1 0 pat_d40 =: 16 16 4 dice 64 pat_d41 =: 16 48 4 dice 64 pat_d42 =: 48 16 4 dice 64 pat_d43 =: 48 48 4 dice 64 pat_d4 =: , (pat_d40 +. pat_d41 +. pat_d42 +. pat_d43) { _1 0 pat_d5 =: , (pat_d40 +. pat_d41 +. pat_d42 +. pat_d43 +. pat_d31) { _1 0 pat_d60 =: 16 20 4 dice 64 pat_d61 =: 16 44 4 dice 64 pat_d62 =: 32 20 4 dice 64 pat_d63 =: 32 44 4 dice 64 pat_d64 =: 48 20 4 dice 64 pat_d65 =: 48 44 4 dice 64 pat_d6 =: , (pat_d60 +. pat_d61 +. pat_d62 +. pat_d63 +. pat_d64 +. pat_d65) { _1 0 NB. ================================================================================ NB. Checker Texture for Reference NB. note GL_RGBA so that pattern is 1 integer per texel texture=:verb define glClearColor 0 0 1 0 glEnable GL_DEPTH_TEST glDepthFunc GL_LEQUAL glPixelStore GL_UNPACK_ALIGNMENT, 1 glTexImage2D (GL_TEXTURE_2D, 0 3 64 64 0, GL_RGBA, GL_UNSIGNED_BYTE); y. NB. Checker glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_CLAMP glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_CLAMP glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL glEnable GL_TEXTURE_2D glShadeModel GL_FLAT glClear GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT drawcube '' ) Cube =: (_1 _1 1);(_1 1 1);(1 1 1);(1 _1 1) drawcube =: 3 : 0 glBegin GL_QUADS glTexCoord 0 0 0 1 glVertex _1 _1 1 glTexCoord 0 1 0 1 glVertex _1 1 1 glTexCoord 1 1 0 1 glVertex 1 1 1 glTexCoord 1 0 0 1 glVertex 1 _1 1 glTexCoord 0 0 0 1 glVertex 1 _1 1 glTexCoord 0 1 0 1 glVertex 1 1 1 glTexCoord 1 1 0 1 glVertex 1 1 _1 glTexCoord 1 0 0 1 glVertex 1 _1 _1 glTexCoord 0 0 0 1 glVertex 1 _1 _1 glTexCoord 0 1 0 1 glVertex 1 1 _1 glTexCoord 1 1 0 1 glVertex _1 1 _1 glTexCoord 1 0 0 1 glVertex _1 _1 _1 glTexCoord 0 0 0 1 glVertex _1 _1 _1 glTexCoord 0 1 0 1 glVertex _1 1 _1 glTexCoord 1 1 0 1 glVertex _1 1 1 glTexCoord 1 0 0 1 glVertex _1 _1 1 glTexCoord 0 0 0 1 glVertex 1 1 1 glTexCoord 0 1 0 1 glVertex 1 1 _1 glTexCoord 1 1 0 1 glVertex _1 1 _1 glTexCoord 1 0 0 1 glVertex _1 1 1 glTexCoord 0 0 0 1 glVertex 1 _1 1 glTexCoord 0 1 0 1 glVertex 1 _1 _1 glTexCoord 1 1 0 1 glVertex _1 _1 _1 glTexCoord 1 0 0 1 glVertex _1 _1 1 glEnd'' ) NB. checker pattern =============================================== w=.8 8$_1 b=.8 8$0 pattern=: ,64 64$, (8 64$,w,.b),8 64$,b,.w