|
Post by alexfish on May 27, 2013 3:45:02 GMT 1
Hey All '@ Vovchik
Goo Canvas , Implementing 3D Cube
' ******************************************************* ' PROGRAM: bmsv - BaCon SVG Vector (modded BaCon) ' VERSION: 0.1a ' PURPOSE: draw svg object (cube) and rotate ' AUTHOR: vovchik (Puppy Linux forum) ' MODDED: port of SFR's clever gtkdialog version ' posted on the Puppy Linux forum ' MODDED .org alexfish (bacon converter forum) 27.may.2013 ' .Impliment Goo Canvas ' DEPENDS: gcc, bacon (beta 1.30), hug (0.84) ' PLATFORM: Puppy Linux (actually, any *nix) ' DATE: 26-03-2013 ' LICENSE: GPL3 ' NOTES: Uses dynamic svgs. Pseudo-Glenz effect.
' source (bacon.bac) to increase number of ' string buffers from 32 to 256 in var ' g_MAX_BUFFERS: g_MAX_BUFFERS = 256 (not 32) ' or rewrite to obtain string vars in VECTOR ' SUB and use in svg CONCAT$ routines. ' ******************************************************* ' REQUIRES '@ BaCon CONST g_VERSION$ >= "2.1.4" '@ Latest Hug.bac >=0.86 ' ******************************************************* 'INCLUDE "hug86.bac" INCLUDE "hug.bac"
HUGOPTIONS("NOSCALING")
IMPORT "gdk_pixbuf_new_from_file(char*,void**)" FROM HUGLIB$("gdk") TYPE long IMPORT "goo_canvas_path_new(long,char*,...)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_raise(long,long)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_image_new(long,long,double,double,...)" FROM HUGLIB$("goo") TYPE long IMPORT "gdk_pixbuf_new_from_inline(int,unsigned char[],int,int)" FROM HUGLIB$("gdk") TYPE long IMPORT "goo_canvas_item_set_child_properties(long,long,...)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_group_new(long,...)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_remove_child(long,int)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_item_add_child(long,long,int)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_item_find_child(long,long)" FROM HUGLIB$("goo") TYPE int IMPORT "goo_canvas_item_get_parent(long)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_animate(long,double,double,double,double,int,int,int,int)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_rotate(long,double,double,double)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_item_set_simple_transform(long,double,double,double,double)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_scroll_to(long,double,double)" FROM HUGLIB$("goo") TYPE void
CONST GOO_CANVAS_ANIMATE_FREEZE = 0 CONST GOO_CANVAS_ANIMATE_RESET = 1 CONST GOO_CANVAS_ANIMATE_RESTART = 2 CONST GOO_CANVAS_ANIMATE_BOUNCE = 3
' ********************* ' END INCLUDES ' ********************* DECLARE key$ ASSOC STRING key$(STR$(65361))="LEFT" key$(STR$(65362))="UP" key$(STR$(65363))="RIGHT" key$(STR$(65364))="DOWN"
' ********************* ' INCLUDES ' *********************
' ********************* ' END INCLUDES ' *********************
' ********************* ' INIT VARS ' ********************* TRAP LOCAL OPTION COLLAPSE 1 SETENVIRON "OUTPUT_CHARSET", "UTF-8" OPTION INTERNATIONAL TRUE
DECLARE flag TYPE int DECLARE mycos[360], mysin[360] TYPE NUMBER DECLARE X1, X2, X3, X4, X5, X6, X7, X8 TYPE NUMBER DECLARE Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8 TYPE NUMBER DECLARE Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8 TYPE NUMBER DECLARE XX1, XX2, XX3, XX4, XX5, XX6, XX7, XX8 TYPE NUMBER DECLARE YY1, YY2, YY3, YY4, YY5, YY6, YY7, YY8 TYPE NUMBER DECLARE NX1, NX2, NX3, NX4, NX5, NX6, NX7, NX8 TYPE NUMBER DECLARE NY1, NY2, NY3, NY4, NY5, NY6, NY7, NY8 TYPE NUMBER DECLARE NZ1, NZ2, NZ3, NZ4, NZ5, NZ6, NZ7, NZ8 TYPE NUMBER DECLARE D, S, XANGLE, YANGLE, ZANGLE TYPE NUMBER DECLARE TEMPDIR$, svg_file$, svg_string$, pic_file$ TYPE STRING COLOR BG TO BLACK COLOR FG TO GREEN COLOR INTENSE flag = FALSE
D = 512 XANGLE = 0 YANGLE = 0 ZANGLE = 0 S = 0
' ********************* ' END INIT VARS ' *********************
' ********************* ' SUBS & FUNCTIONS ' *********************
' ----------------- SUB MK_SVG() ' ----------------- ' create initial svg A$="<svg width='1' height='1'><rect width='1' height='1' fill='green' opacity='0.5' /></svg>": a$="./green" B$="<svg width='1' height='1'><rect width='1' height='1' fill='red' opacity='0.5' /></svg>": b$="./red" C$="<svg width='1' height='1'><rect width='1' height='1' fill='cyan' opacity='0.5' /></svg>": c$="./cyan" D$="<svg width='1' height='1'><rect width='1' height='1' fill='brown' opacity='0.5' /></svg>": d$="./brown" E$="<svg width='1' height='1'><rect width='1' height='1' fill='yellow' opacity='0.5' /></svg>": e$="./yellow" F$="<svg width='1' height='1'><rect width='1' height='1' fill='orange' opacity='0.5' /></svg>": f$="./orange" G$="<svg width='1' height='1'><rect width='1' height='1' fill='black' opacity='0.5' /></svg>": g$="./black" OPEN a$ FOR WRITING AS svg WRITELN A$ TO svg CLOSE FILE svg OPEN b$ FOR WRITING AS svg WRITELN B$ TO svg CLOSE FILE svg OPEN c$ FOR WRITING AS svg WRITELN C$ TO svg CLOSE FILE svg OPEN d$ FOR WRITING AS svg WRITELN D$ TO svg CLOSE FILE svg OPEN e$ FOR WRITING AS svg WRITELN E$ TO svg CLOSE FILE svg OPEN f$ FOR WRITING AS svg WRITELN F$ TO svg CLOSE FILE svg OPEN g$ FOR WRITING AS svg WRITELN G$ TO svg CLOSE FILE svg END SUB
' ------------------ SUB MK_TABLES(NUMBER sin1[], NUMBER cos1[]) ' ------------------ ' initialize sinus and cosinus tables as arrays LOCAL rad TYPE double LOCAL i TYPE NUMBER FOR i = 0 TO 359 rad = i * (PI/180) sin1[i] = FLOOR((SIN(rad) * 1000)) cos1[i] = FLOOR((COS(rad) * 1000)) NEXT i END SUB
' ------------------ SUB ANIM_START() ' ------------------ ' start animation DISABLE(but1) ENABLE(but2) flag = TRUE CALL VECTOR END SUB
' ------------------ SUB ANIM_STOP() ' ------------------ ' stop animation ENABLE(but1) DISABLE(but2) flag = FALSE CALL VECTOR END SUB
' ------------------ SUB MY_QUIT() ' ------------------ ' quit program 'Delete colours g_object_unref(green) g_object_unref(red) g_object_unref(cyan) g_object_unref(brown) g_object_unref(yellow) g_object_unref(orange) g_object_unref(black) DELETE FILE a$: DELETE FILE b$ : DELETE FILE c$ DELETE FILE d$: DELETE FILE e$ :DELETE FILE f$ DELETE FILE g$ PRINT NL$, "End of demo...", NL$ QUIT END SUB
' ------------------ SUB VECTOR() ' ------------------ ' calculate and display sequence of images in a loop WHILE flag DO X1 = -64: Y1 = -64: Z1 = -64 X2 = -64: Y2 = 64: Z2 = -64 X3 = 64: Y3 = -64: Z3 = -64 X4 = 64: Y4 = 64: Z4 = -64 X5 = -64: Y5 = -64: Z5 = 64 X6 = -64: Y6 = 64: Z6 = 64 X7 = 64: Y7 = -64: Z7 = 64 X8 = 64: Y8 = 64: Z8 = 64 INCR XANGLE, 4: INCR YANGLE, 3: INCR ZANGLE, 1 IF XANGLE >= 360 THEN XANGLE = 0 IF YANGLE >= 360 THEN YANGLE = 0 IF ZANGLE >= 360 THEN ZANGLE = 0 ' rotate X NX1 = X1: NX2 = X2: NX3 = X3: NX4 = X4 NX5 = X5: NX6 = X6: NX7 = X7: NX8 = X8 ' OPT=1000 NY1 = ((mycos[XANGLE] * Y1) - (mysin[XANGLE] * Z1)) / OPT NY2 = ((mycos[XANGLE] * Y2) - (mysin[XANGLE] * Z2)) / OPT NY3 = ((mycos[XANGLE] * Y3) - (mysin[XANGLE] * Z3)) / OPT NY4 = ((mycos[XANGLE] * Y4) - (mysin[XANGLE] * Z4)) / OPT NY5 = ((mycos[XANGLE] * Y5) - (mysin[XANGLE] * Z5)) / OPT NY6 = ((mycos[XANGLE] * Y6) - (mysin[XANGLE] * Z6)) / OPT NY7 = ((mycos[XANGLE] * Y7) - (mysin[XANGLE] * Z7)) / OPT NY8 = ((mycos[XANGLE] * Y8) - (mysin[XANGLE] * Z8)) / OPT ' NZ1 = ((mysin[XANGLE] * Y1) + (mycos[XANGLE] * Z1)) / OPT NZ2 = ((mysin[XANGLE] * Y2) + (mycos[XANGLE] * Z2)) / OPT NZ3 = ((mysin[XANGLE] * Y3) + (mycos[XANGLE] * Z3)) / OPT NZ4 = ((mysin[XANGLE] * Y4) + (mycos[XANGLE] * Z4)) / OPT NZ5 = ((mysin[XANGLE] * Y5) + (mycos[XANGLE] * Z5)) / OPT NZ6 = ((mysin[XANGLE] * Y6) + (mycos[XANGLE] * Z6)) / OPT NZ7 = ((mysin[XANGLE] * Y7) + (mycos[XANGLE] * Z7)) / OPT NZ8 = ((mysin[XANGLE] * Y8) + (mycos[XANGLE] * Z8)) / OPT ' rotate Y X1 = ((mycos[YANGLE] * NX1) + (mysin[YANGLE] * NZ1)) / OPT X2 = ((mycos[YANGLE] * NX2) + (mysin[YANGLE] * NZ2)) / OPT X3 = ((mycos[YANGLE] * NX3) + (mysin[YANGLE] * NZ3)) / OPT X4 = ((mycos[YANGLE] * NX4) + (mysin[YANGLE] * NZ4)) / OPT X5 = ((mycos[YANGLE] * NX5) + (mysin[YANGLE] * NZ5)) / OPT X6 = ((mycos[YANGLE] * NX6) + (mysin[YANGLE] * NZ6)) / OPT X7 = ((mycos[YANGLE] * NX7) + (mysin[YANGLE] * NZ7)) / OPT X8 = ((mycos[YANGLE] * NX8) + (mysin[YANGLE] * NZ8)) / OPT ' Z1 = ((mycos[YANGLE] * NZ1) - (mysin[YANGLE] * NX1)) / OPT Z2 = ((mycos[YANGLE] * NZ2) - (mysin[YANGLE] * NX2)) / OPT Z3 = ((mycos[YANGLE] * NZ3) - (mysin[YANGLE] * NX3)) / OPT Z4 = ((mycos[YANGLE] * NZ4) - (mysin[YANGLE] * NX4)) / OPT Z5 = ((mycos[YANGLE] * NZ5) - (mysin[YANGLE] * NX5)) / OPT Z6 = ((mycos[YANGLE] * NZ6) - (mysin[YANGLE] * NX6)) / OPT Z7 = ((mycos[YANGLE] * NZ7) - (mysin[YANGLE] * NX7)) / OPT Z8 = ((mycos[YANGLE] * NZ8) - (mysin[YANGLE] * NX8)) / OPT ' rotate Z NX1 = ((mycos[ZANGLE] * X1) - (mysin[ZANGLE] * NY1)) / OPT NX2 = ((mycos[ZANGLE] * X2) - (mysin[ZANGLE] * NY2)) / OPT NX3 = ((mycos[ZANGLE] * X3) - (mysin[ZANGLE] * NY3)) / OPT NX4 = ((mycos[ZANGLE] * X4) - (mysin[ZANGLE] * NY4)) / OPT NX5 = ((mycos[ZANGLE] * X5) - (mysin[ZANGLE] * NY5)) / OPT NX6 = ((mycos[ZANGLE] * X6) - (mysin[ZANGLE] * NY6)) / OPT NX7 = ((mycos[ZANGLE] * X7) - (mysin[ZANGLE] * NY7)) / OPT NX8 = ((mycos[ZANGLE] * X8) - (mysin[ZANGLE] * NY8)) / OPT ' NY1 = ((mysin[ZANGLE] * X1) + (mycos[ZANGLE] * NY1)) / OPT NY2 = ((mysin[ZANGLE] * X2) + (mycos[ZANGLE] * NY2)) / OPT NY3 = ((mysin[ZANGLE] * X3) + (mycos[ZANGLE] * NY3)) / OPT NY4 = ((mysin[ZANGLE] * X4) + (mycos[ZANGLE] * NY4)) / OPT NY5 = ((mysin[ZANGLE] * X5) + (mycos[ZANGLE] * NY5)) / OPT NY6 = ((mysin[ZANGLE] * X6) + (mycos[ZANGLE] * NY6)) / OPT NY7 = ((mysin[ZANGLE] * X7) + (mycos[ZANGLE] * NY7)) / OPT NY8 = ((mysin[ZANGLE] * X8) + (mycos[ZANGLE] * NY8)) / OPT ' Perspective PERS=128 XX1 = ((NX1 * D) / (Z1 + D)) + PERS XX2 = ((NX2 * D) / (Z2 + D)) + PERS XX3 = ((NX3 * D) / (Z3 + D)) + PERS XX4 = ((NX4 * D) / (Z4 + D)) + PERS XX5 = ((NX5 * D) / (Z5 + D)) + PERS XX6 = ((NX6 * D) / (Z6 + D)) + PERS XX7 = ((NX7 * D) / (Z7 + D)) + PERS XX8 = ((NX8 * D) / (Z8 + D)) + PERS ' YY1 = ((NY1 * D) / (Z1 + D)) + PERS YY2 = ((NY2 * D) / (Z2 + D)) + PERS YY3 = ((NY3 * D) / (Z3 + D)) + PERS YY4 = ((NY4 * D) / (Z4 + D)) + PERS YY5 = ((NY5 * D) / (Z5 + D)) + PERS YY6 = ((NY6 * D) / (Z6 + D)) + PERS YY7 = ((NY7 * D) / (Z7 + D)) + PERS YY8 = ((NY8 * D) / (Z8 + D)) + PERS SYNC SLEEP 50 INCR S IF S = 512 THEN 'green red cyan brown yellow orange . path g_object_set(line_1,"fill-pixbuf",green , NULL) g_object_set(line_2 , "fill-pixbuf" ,red , NULL) g_object_set(line_3 , "fill-pixbuf" ,cyan , NULL) g_object_set(line_4 , "fill-pixbuf" ,brown , NULL) g_object_set(line_5 , "fill-pixbuf" ,yellow , NULL) g_object_set(line_6 , "fill-pixbuf" ,orange , NULL)
END IF L1$ = CONCAT$("M ", STR$(XX1), " ", STR$(YY1), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX6), " ", STR$(YY6), " L ", STR$(XX2), " ", STR$(YY2), " Z ") L2$ = CONCAT$("M ", STR$(XX3), " ", STR$(YY3), " L ", STR$(XX7), " ", STR$(YY7), " L ", STR$(XX8), " ", STR$(YY8), " L ", STR$(XX4), " ", STR$(YY4), " Z ") L3$ = CONCAT$("M ",STR$(XX2), " ", STR$(YY2), " L ", STR$(XX6), " ", STR$(YY6), " L ", STR$(XX8), " ", STR$(YY8), " L ", STR$(XX4), " ", STR$(YY4), " Z ") L4$ = CONCAT$("M ", STR$(XX3), " ", STR$(YY3), " L ", STR$(XX7), " ", STR$(YY7), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX1), " ", STR$(YY1), " Z ") L5$ = CONCAT$("M ", STR$(XX8), " ", STR$(YY8), " L ", STR$(XX7), " ", STR$(YY7), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX6), " ", STR$(YY6), " Z ") L6$ = CONCAT$("M ",STR$(XX1), " ", STR$(YY1), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX6), " ", STR$(YY6), " L ", STR$(XX2), " ", STR$(YY2), " Z ") g_object_set(line_1,"data",L1$ , NULL) g_object_set(line_2,"data",L2$, NULL) g_object_set(line_3,"data",L3$, NULL) g_object_set(line_4,"data",L4$, NULL) g_object_set(line_5,"data",L5$, NULL) g_object_set(line_6,"data",L6$, NULL) WEND END SUB
'@ use own defind Goo Canvas Without the Event Box / goo has its own FUNCTION GooCanvas(int hug_xsize, int hug_ysize)
LOCAL canvas ,root canvas = goo_canvas_new() goo_canvas_set_bounds(canvas,0,0,hug_xsize,hug_ysize)
IF HUG_WIDGET_SHOW THEN gtk_widget_show_all(canvas)
hug_widget_image(STR$(canvas)) = canvas hug_widget_xsize(STR$(canvas)) = hug_xsize hug_widget_ysize(STR$(canvas)) = hug_ysize hug_widget_signal(STR$(canvas)) = 4 hug_widget_s_widget(STR$(canvas)) = canvas hug_widget_type$(STR$(canvas)) = "canvas" RETURN canvas END FUNCTION ' ------------------ SUB MK_GUI() ' ------------------
' define widgets win = WINDOW("BaCon SVG Vectors", 600,600) but1 = BUTTON("Go", 80, 30) but2 = BUTTON("Pause", 80, 30) but3 = BUTTON("Exit", 80, 30) ' define properties PROPERTY(but1, "tooltip-text", "Start GOO animated vector demo.") PROPERTY(but2, "tooltip-text", "Pause GOO animated vector demo.") PROPERTY(but3, "tooltip-text", "Quit this animated vector demo.") ' attach widgets ATTACH(win, but1, 10, 550) ATTACH(win, but2, 100 ,550) ATTACH(win, but3, 200, 550) ' define callback actions for buttons CALLBACK(but1, ANIM_START) CALLBACK(but2, ANIM_STOP) CALLBACK(but3, MY_QUIT) ' set initial state of but2 DISABLE(but2) '@ Add Goo Canvas goo_canvas1=GooCanvas(600,500) '@ get the root of the canvas root_canvas1 = goo_canvas_get_root_item(goo_canvas1) '@ set the background to black g_object_set(goo_canvas1,"background-color","black",NULL) ATTACH(win,goo_canvas1,0,0) '@ get the red=gdk_pixbuf_new_from_file("./red", 0) green=gdk_pixbuf_new_from_file("./green", 0) cyan=gdk_pixbuf_new_from_file("./cyan", 0) brown=gdk_pixbuf_new_from_file("./brown", 0) yellow=gdk_pixbuf_new_from_file("./yellow", 0) orange=gdk_pixbuf_new_from_file("./orange", 0) orange=gdk_pixbuf_new_from_file("./orange", 0) black=gdk_pixbuf_new_from_file("./black", 0) line_1 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",black,"stroke-color","white","line-width" ,1.0, NULL) line_2 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",black,"stroke-color","white","line-width" ,1.0, NULL) line_3 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",black,"stroke-color","white","line-width" ,1.0, NULL) line_4 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",black,"stroke-color","white","line-width" ,1.0, NULL) line_5 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",black,"stroke-color","white","line-width" ,1.0, NULL) line_6 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",black,"stroke-color","white","line-width" ,1.0, NULL) goo_canvas_scroll_to(goo_canvas1,0,0) END SUB
' ********************* ' END SUBS & FUNCTIONS ' *********************
' ********************* ' MAIN ' *********************
MK_TABLES(mysin, mycos) MK_SVG MK_GUI
DISPLAY
' ********************* ' END MAIN ' ********************
Have Fun
Alex
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on May 27, 2013 5:29:29 GMT 1
I posted a OpenGL BaCon example a while back. (IUP) ' Example of using of 3D OpenGL and IUP
INCLUDE "iup_3dgl.inc"
SUB polygon(NUMBER a, NUMBER b, NUMBER c, NUMBER d) DECLARE vertices[][3] = {{-1,-1, 1}, {-1,1,1}, {1,1,1}, {1,-1,1}, \ {-1,-1,-1}, {-1,1,-1}, {1,1,-1}, {1,-1,-1}} TYPE double glBegin(GL_POLYGON) glVertex3dv(vertices[a]) glVertex3dv(vertices[b]) glVertex3dv(vertices[c]) glVertex3dv(vertices[d]) glEnd() END SUB
SUB colorCube glColor3f(1,0,0) glNormal3f(1,0,0) polygon(2,3,7,6)
glColor3f(0,1,0) glNormal3f(0,1,0) polygon(1,2,6,5)
glColor3f(0,0,1) glNormal3f(0,0,1) polygon(0,3,2,1)
glColor3f(1,0,1) glNormal3f(0,-1,0) polygon(3,0,4,7)
glColor3f(1,1,0) glNormal3f(0,0,-1) polygon(4,5,6,7)
glColor3f(0,1,1) glNormal3f(-1,0,0) polygon(5,4,0,1) END SUB
FUNCTION repaint_cb(Ihandle *self) IupGLMakeCurrent(self) glClearColor(0.3f, 0.3f, 0.3f, 1.0f) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glEnable(GL_DEPTH_TEST) glMatrixMode(GL_MODELVIEW) glPushMatrix() glTranslatef(0.0f, 0.0f , 0.0f) glScalef(1.0f, 1.0f, 1.0f) glRotatef(t, 0, 0, 1) colorCube() glPopMatrix() IupGLSwapBuffers(self) RETURN IUP_DEFAULT END FUNCTION
FUNCTION resize_cb(Ihandle *self, NUMBER new_width, NUMBER new_height) IupGLMakeCurrent(self) glViewport(0, 0, new_width, new_height) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60, 4./3., 1., 15) gluLookAt(3, 3, 3, 0, 0, 0, 0, 0, 1) width = new_width height = new_height repaint_cb(canvas) RETURN IUP_DEFAULT END FUNCTION
FUNCTION idle_cb INCR t repaint_cb(canvas) RETURN IUP_DEFAULT END FUNCTION
FUNCTION exit_cb RETURN IUP_CLOSE END FUNCTION
' MAIN
IupOpen(NULL, NULL) IupGLCanvasOpen() canvas = IupGLCanvas("repaint_cb") IupSetFunction("repaint_cb", (Icallback)repaint_cb) IupSetAttribute(canvas, IUP_RASTERSIZE, "640x480") IupSetAttribute(canvas, IUP_BUFFER, IUP_DOUBLE) IupSetCallback(canvas, "RESIZE_CB", (Icallback)resize_cb) dialog = IupDialog(canvas) IupSetAttribute(dialog, "TITLE", "IUP_3D_OpenGL") IupSetCallback(dialog, "CLOSE_CB", (Icallback)exit_cb) IupSetFunction (IUP_IDLE_ACTION, (Icallback)idle_cb) IupShowXY(dialog, IUP_CENTER, IUP_CENTER) IupMainLoop() IupClose()
iup_3dgl.inc CONST _CRT_SECURE_NO_WARNINGS
PRAGMA OPTIONS -I/usr/include/iup PRAGMA LDFLAGS iup iupgl GL GLU PRAGMA INCLUDE iup.h iupgl.h GL/gl.h GL/glu.h
PROTO IupOpen, IupGLCanvasOpen, IupShowXY, IupMainLoop, IupClose PROTO IupSetFunction, IupSetAttribute, IupSetCallback, IupDialog PROTO IupGLMakeCurrent, IupGLSwapBuffers PROTO glBegin, glVertex3dv, glEnd, glColor3f, glNormal3f PROTO glClearColor, glClear, glEnable, glMatrixMode PROTO glPushMatrix, glTranslatef, glScalef, glRotatef, glPopMatrix PROTO glViewport, glLoadIdentity, gluPerspective, gluLookAt
DECLARE *dialog, *canvas TYPE Ihandle DECLARE width = 640, height = 480 TYPE int DECLARE t = 0 TYPE float
To compile the original C version use the following command. gcc iup_3dgl.c -I/usr/include/iup -liup -liupgl -lGL -lGLU -o cube
|
|