NB. OpGLN_PriPyd.ijs 2013/7/24 T.Nishikawa NB. "Volume of pyramid equals to 1/3 of prism" NB. NB. Demo from "VNR Encyclopedia of Mathematics", p.194 NB. NB. Usage: NB. run '' NB. Enter 'u' split up Center Pyramid(V2), 'U' down it (=return) NB. 'v' split down Right Pyramid(V1), 'V' up it (=return) NB. 'r' split right Center Pyramid(V2), 'R' left it (=return) NB. 'l' split left Right Pyramid(V1), 'L' right it (=return) NB. Then, you will examine the pyramids from various eye-views: NB. Enter 'x X y Y z Z' rotate the object along the axis cylpyd =: (0, 0, 0);(1, 0, 0);(0, 0, _1);(0, 2, 0);(1, 2, 0);(0, 2, _1) wr =: 1!:2&2 require 'gl3' A=: 0 : 0 pc a closeok; menupop "&Help"; menu help "&Help" "" "" ""; menupopz; 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=: 3 : 0 V =: y. wd :: ] 'psel a;pclose' wd A glaRC '' R =: 0 0 0 XYZQ =: 0 0 0 XYZR =: 0 0 0 PQR =: 1 1 1 glaFont 'arial 30' glaUseFontBitmaps 0 32 26 32 wd 'pshow;ptop' ) NB. display the model picture ======================================= a_g_paint =: verb define glClearColor 1 1 1 0 glClear GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT glTranslate _0.5, _0.5 , 0 draw0 '' if. 0 = #V do. drawp '' NB. display the left pyramid(V3) drawq XYZQ NB. display the center pyramid(V2) at the position XYZQ drawr XYZR NB. display the right pyramid(V1) at the position XYZR else. select. V NB. display one selected pyramid only case. 'p';'P' do. drawp '' case. 'q';'Q' do. drawq XYZQ case. 'r';'R' do. drawr XYZR case. 'pq';'PQ' do. drawp '' [ drawq XYZQ case. 'pr';'PR' do. drawp '' [ drawr XYZR case. 'qr';'QR' do. drawq XYZQ [ drawr XYZR end. end. drawtext'' glaSwapBuffers '' ) draw0 =: 3 : 0 glPolygonMode GL_FRONT, GL_FILL glPolygonMode GL_BACK, GL_POINT glEnable GL_DEPTH_TEST glMatrixMode GL_MODELVIEW glLoadIdentity '' glRotate R ,. 3 3 $ 1 0 0 0 ) drawp =: 3 : 0 glBegin GL_TRIANGLES glColor 1 0 0 0 glVertex >0{cylpyd glVertex >1{cylpyd glVertex >3{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 0 0 1 0 glVertex >0{cylpyd glVertex >3{cylpyd glVertex >5{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 1 0 1 0 glVertex >1{cylpyd glVertex >5{cylpyd glVertex >3{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 0 1 1 0 glVertex >0{cylpyd glVertex >5{cylpyd glVertex >1{cylpyd glEnd '' ) drawq =: 3 : 0 glBegin GL_TRIANGLES glColor 1 0 0 0 glVertex y. +"(1) >1{cylpyd glVertex y. +"(1) >4{cylpyd glVertex y. +"(1) >3{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 1 1 0 0 glVertex y. +"(1) >4{cylpyd glVertex y. +"(1) >1{cylpyd glVertex y. +"(1) >5{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 1 0 1 0 glVertex y. +"(1) >3{cylpyd glVertex y. +"(1) >5{cylpyd glVertex y. +"(1) >1{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 0 1 0 0 glVertex y. +"(1) >3{cylpyd glVertex y. +"(1) >4{cylpyd glVertex y. +"(1) >5{cylpyd glEnd '' ) drawr =: 3 : 0 glBegin GL_TRIANGLES glColor 0 0 1 0 glVertex y. +"(1) >0{cylpyd glVertex y. +"(1) >5{cylpyd glVertex y. +"(1) >2{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 0 1 1 0 glVertex y. +"(1) >0{cylpyd glVertex y. +"(1) >1{cylpyd glVertex y. +"(1) >5{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 1 1 0 0 glVertex y. +"(1) >2{cylpyd glVertex y. +"(1) >5{cylpyd glVertex y. +"(1) >1{cylpyd glEnd '' glBegin GL_TRIANGLES glColor 0 1 0 0 glVertex y. +"(1) >0{cylpyd glVertex y. +"(1) >2{cylpyd glVertex y. +"(1) >1{cylpyd glEnd '' ) NB. project the picture on the screen =================== a_g_size =: verb define wh =. glqwh '' glViewport 0 0, wh glMatrixMode GL_PROJECTION glLoadIdentity '' glOrtho _2.7 2.7 _2.7 2.7 _2.7 2.7 NB. gluPerspective 60, (%/wh), 1 30 ) NB. key-in x, y, z, X, Y, Z for rotation ================ a_g_char =: verb define k =. 0 { sysdata R =: 360 | R + 5 * 'xyz' = 0 { sysdata R =: 360 | R - 5 * 'XYZ' = 0 { sysdata XYZQ =: XYZQ + (0, 0.25, 0) * 'u' = 0 { sysdata XYZQ =: XYZQ - (0, 0.25, 0) * 'U' = 0 { sysdata XYZR =: XYZR + (0, 0.25, 0) * 'V' = 0 { sysdata XYZR =: XYZR - (0, 0.25, 0) * 'v' = 0 { sysdata XYZQ =: XYZQ + (0.25, 0, 0) * 'r' = 0 { sysdata XYZQ =: XYZQ - (0.25, 0, 0) * 'R' = 0 { sysdata XYZR =: XYZR + (0.25, 0, 0) * 'L' = 0 { sysdata XYZR =: XYZR - (0.25, 0, 0) * 'l' = 0 { sysdata glpaintx'' ) NB. indicate rotated angle values x, y, z in degree ============ drawtext =: verb define glMatrixMode GL_MODELVIEW glLoadIdentity '' glColor 0 0 0 0 NB. glRasterPos _1 _2.5 0 glRasterPos _0.5 _1.5 0 glCallLists 5 ": R ) a_help_button =: verb define wd 'mb OpenGL *Press keys, x/X, y/Y, z/Z rotate, s: line or solid, h: line hidden toggle.' wd 'setfocus g' )