Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Petit essai autour de la 3D Ven 16 Mar 2012 - 1:48 | |
| J'ai fait un petit essai d'utilisation de mon squelette de programme Panoramic, adapté au monde 3D. C'est un outil permettant de créer les objets 3D selon un choix présenté dans un COMBO. Pour chaque objet, à l'aide de SCROLL_BARs, on peut gérer sa position dans les 3 axes, sa rotation autour des 3 axes, et sa couleur RGB. On peut créer autant d'objets 3D qu'on veut. Les objets créés sont insérés dans une seconde COMBO listant les objets disponibles. Un clic sur un des objets dans cette liste "sélectionne" cet objet, et les glissières de paramétrage s'appliquent alors sur cet objet. Et il y a un écran d'aide. - Code:
-
' test3d.bas
' *** routine principale label labels : gosub labels gosub variables gosub form0 gosub menu gosub GUI gosub initialisations end
' *** définition de tous les labels labels: label variables, form0, menu, GUI, initialisations, sortir label aide, apropos, close_apropos label select3d, creer3d label changex3d, changey3d, changez3d label translatex3d, translatey3d, translatez3d label rouge3d, vert3d, bleu3d return
' *** définition de toutes les variables variables: dim no%, parent_1%, parent_2% dim no_scene3d%, no_objet3d%, no_objets3d%, no_choisi3d% dim no3d%, flag_creation3d% dim no_rotatex3d%, no_rotatey3d%, no_rotatez3d% dim no_translatex3d%, no_translatey3d%, no_translatez3d% dim no_rouge3d%, no_vert3d%, no_bleu3d% dim nom_fichier$, no_open%, no_save% dim no_apropos%, no_aide% dim i%, j%, k%, s$ dim nl$ : nl$ = chr$(13)+chr$(10) dim version$ : version$ = "V01.00" dim creation$ : creation$ = "13 Mars 2012" dim nom_rep$, nom_ini$ return ' *** configuration de l'écran principal form0: ' full_space 0 width 0,850 : height 0,800 caption 0,"Test 3d" return
' *** création des menus menu: no% = no% + 1 : main_menu no% : parent_1% = no% no% = no% + 1 : sub_menu no% : parent no%,parent_1% parent_2% = no% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,parent_2% caption no%,"Sortir" : on_click no%,sortir
no% = no% + 1 : sub_menu no% : parent no%,parent_1% parent_2% = no% : caption no%,"Aide" no% = no% + 1 : sub_menu no% : parent no%,parent_2% caption no%,"Aide" : on_click no%, aide no% = no% + 1 : sub_menu no% : parent no%,parent_2% caption no%,"A-propos" : on_click no%, apropos
return création de tous les objets Panoramic GUI: ' *** d'abord les objets invisibles ' dialogues, list, timer, ... no% = no% + 1 : open_dialog no% : no_open% = no% filter no%,"Fichier texte|*.txt" no% = no% + 1 : save_dialog no% : no_save% = no% filter no%,"Fichier texte|*.txt" ' *** les objets de la form 0 no% = no% + 1 : alpha no% : top no%,2 : left no%,10 caption no%,"Objet à créer:" no% = no% + 1 : combo no% : no_objet3d% = no% top no%,20 : left no%,10 : on_click no%,creer3d item_add no%,"cone" item_add no%,"cube" item_add no%,"cylinder" item_add no%,"dodecahedron" item_add no%,"line" item_add no%,"plane" item_add no%,"skybox" item_add no%,"sphere" item_add no%,"teapot" item_add no%,"text" item_add no%,"torus" no% = no% + 1 : alpha no% : top no%,2 : left no%,170 caption no%,"Sélection:" no% = no% + 1 : combo no% : no_objets3d% = no% top no%,20 : left no%,170 : on_click no%,select3d
no% = no% + 1 : alpha no% : top no%,2 : left no%,330 caption no%,"Rotation X" no% = no% + 1 : scroll_bar no% : no_rotatex3d% = no% min no%,0 : max no%,360 : position no%,0 top no%,20 : left no%,330 : on_change no%,changex3d no% = no% + 1 : alpha no% : top no%,2 : left no%,490 caption no%,"Rotation Y" no% = no% + 1 : scroll_bar no% : no_rotatey3d% = no% min no%,0 : max no%,360 : position no%,0 top no%,20 : left no%,490 : on_change no%,changey3d no% = no% + 1 : alpha no% : top no%,2 : left no%,650 caption no%,"Rotation Z" no% = no% + 1 : scroll_bar no% : no_rotatez3d% = no% min no%,0 : max no%,360 : position no%,0 top no%,20 : left no%,650 : on_change no%,changez3d no% = no% + 1 : alpha no% : top no%,52 : left no%,330 caption no%,"Translation X" no% = no% + 1 : scroll_bar no% : no_translatex3d% = no% min no%,0-100 : max no%,100 : position no%,0 top no%,70 : left no%,330 : on_change no%,translatex3d no% = no% + 1 : alpha no% : top no%,52 : left no%,490 caption no%,"Translation Y" no% = no% + 1 : scroll_bar no% : no_translatey3d% = no% min no%,0-100 : max no%,100 : position no%,0 top no%,70 : left no%,490 : on_change no%,translatey3d no% = no% + 1 : alpha no% : top no%,52 : left no%,650 caption no%,"Translation Z" no% = no% + 1 : scroll_bar no% : no_translatez3d% = no% min no%,0-100 : max no%,100 : position no%,0 top no%,70 : left no%,650 : on_change no%,translatez3d
no% = no% + 1 : alpha no% : top no%,102 : left no%,330 caption no%,"Rouge" no% = no% + 1 : scroll_bar no% : no_rouge3d% = no% min no%,0 : max no%,255 : position no%,0 top no%,120 : left no%,330 : on_change no%,rouge3d no% = no% + 1 : alpha no% : top no%,102 : left no%,490 caption no%,"Vert" no% = no% + 1 : scroll_bar no% : no_vert3d% = no% min no%,0 : max no%,255 : position no%,0 top no%,120 : left no%,490 : on_change no%,vert3d no% = no% + 1 : alpha no% : top no%,102 : left no%,650 caption no%,"Bleu" no% = no% + 1 : scroll_bar no% : no_bleu3d% = no% min no%,0 : max no%,255 : position no%,0 top no%,120 : left no%,650 : on_change no%,bleu3d
no% = no% + 1 : scene3d no% : no_scene3d% = no% top no%,200 : left no%,10 width no%,width(0)-30 : height no%,height(0)-370 ' *** la fenêtre a-propos avec ses champs no% = no% + 1 : form no% : hide no% : no_apropos% = no% : parent_1% = no% caption no%,"A-propos" top no%, 200 : left no%,200 : height no%,150 : width no%,250 on_close no%,close_apropos no% = no% + 1 : alpha no% : parent no%,parent_1% top no%,20 : left no%,20 s$ = "test 3D"+nl$ s$ = s$ + "Version: "+version$+nl$ s$ = s$ + "Date: "+creation$+nl$ s$ = s$ + "Auteur: Klaus"+nl$ caption no%,s$
' *** la fenêtre d'aide avec ses champs no% = no% + 1 : form no% : hide no% : no_aide% = no% : parent_1% = no% caption no%,"Aide" top no%, 200 : left no%,200 : height no%,400 : width no%,400 on_close no%,close_apropos no% = no% + 1 : alpha no% : parent no%,parent_1% top no%,20 : left no%,20 s$ = "Mode d'emploi"+nl$+nl$ s$ = s$ + "Le sélecteur Objet à créer permet de choisir un type d'objet 3D."+nl$ s$ = s$ + "Cet objet sera créé avec quelques attributs par défaut"+nl$ s$ = s$ + "et placé au centre du monde (0,0,0)."+nl$ s$ = s$ + "Le sélecteur Sélection permet de choisir un objet 3d déjà"+nl$ s$ = s$ + "créé et cibler l'action des glissières sur lui."+nl$ s$ = s$ + "Par défaut, le dernier objet créé est sélectionné."+nl$ s$ = s$ + "Les glissières de rotation et de translations permettent"+nl$ s$ = s$ + "d'agir sur l'objet sélectionné."+nl$ s$ = s$ + " On sort du programme par la fonction Sortir du menu Fichiers."+nl$ caption no%,s$
return ' *** toutes les initialisations du programme initialisations: ' répertoire de l'application, nom du fichier ini s$ = param_value$(0) nom_rep$ = file_extract_path$(s$) if instr(lower$(s$),"\temp\")>0 then nom_rep$ = "C:\temp\" nom_ini$ = nom_rep$ + "test3d.ini" : ' adapter le nom du fichier ini dir_dialog no_open%,nom_rep$ dir_dialog no_save%,nom_rep$ if dir_exists(nom_rep$)=0 then dir_make nom_rep$ if file_exists(nom_ini$)=0 : ' créer le fichier ini vide s'il n'existe pas file_open_write 1,nom_ini$ file_writeln 1,"; créé le "+date$+" à "+time$+" heures" file_close 1 end_if ' traiter le fichier ini file_open_read 1,nom_ini$ file_readln 1,s$ while file_eof(1)=0 ' charger le fichier ini end_while file_close 1 return
' *** fonction "sortir dur programme" sortir: terminate ' *** afficher la page d'aide en mode non-modal aide: show no_aide% to_foreground no_aide% return
' *** afficher la page à-propos en mode modal apropos: inactive 0 show no_apropos% return ' *** fermer la page a-propos close_apropos: hide no_apropos% active 0 to_foreground 0 return
' ***choisir un objet 3d select3d: s$ = text$(no_objets3d%) no_choisi3d% = val(left$(s$,instr(s$,"=")-1)) return
' *** créer un objet 3d creer3d: flag_creation3d% = 1 position no_rotatex3d%,0 position no_rotatey3d%,0 position no_rotatez3d%,0 position no_translatex3d%,0 position no_translatey3d%,0 position no_translatez3d%,0 position no_rouge3d%,0 position no_vert3d%,0 position no_bleu3d%,0 flag_creation3d% = 0 s$ = text$(no_objet3d%) if s$="cone" no3d% = no3d% + 1 3d_cone no3d%,1,1 item_add no_objets3d%,str$(no3d%)+"=cone" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="cube" no3d% = no3d% + 1 3d_cube no3d%,1 item_add no_objets3d%,str$(no3d%)+"=cube" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="cylinder" no3d% = no3d% + 1 3d_cylinder no3d%,1,1,0.5 item_add no_objets3d%,str$(no3d%)+"=cylinder" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="dodecahedron" no3d% = no3d% + 1 3d_dodecahedron no3d% item_add no_objets3d%,str$(no3d%)+"=dodecahedron" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="line" no3d% = no3d% + 1 3d_line no3d%,0-1,0,0 3d_line no3d%,1,0,0 item_add no_objets3d%,str$(no3d%)+"=line" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="plane" no3d% = no3d% + 1 3d_plane no3d% item_add no_objets3d%,str$(no3d%)+"=plane" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="skybox" no3d% = no3d% + 1 3d_skybox no3d% item_add no_objets3d%,str$(no3d%)+"=skybox" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="sphere" no3d% = no3d% + 1 3d_sphere no3d%,1 item_add no_objets3d%,str$(no3d%)+"=sphere" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="teapot" no3d% = no3d% + 1 3d_teapot no3d% item_add no_objets3d%,str$(no3d%)+"=teapot" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="text" no3d% = no3d% + 1 3d_text no3d%,"Mon texte" item_add no_objets3d%,str$(no3d%)+"=text" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if if s$="torus" no3d% = no3d% + 1 3d_torus no3d%,2,1.5 item_add no_objets3d%,str$(no3d%)+"=torus" no_choisi3d% = no3d% text no_objets3d%,item_read$(no_objets3d%,count(no_objets3d%)) 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) end_if return ' *** rotation X changex3d: if flag_creation3d%=1 then return 3d_x_rotate no_choisi3d%,position(no_rotatex3d%) return
' *** rotation Y changey3d: if flag_creation3d%=1 then return 3d_y_rotate no_choisi3d%,position(no_rotatey3d%) return
' *** rotation Z changez3d: if flag_creation3d%=1 then return 3d_z_rotate no_choisi3d%,position(no_rotatez3d%) return
' *** translation X translatex3d: if flag_creation3d%=1 then return 3d_x_position no_choisi3d%,position(no_translatex3d%)/10 return
' *** translation Y translatey3d: if flag_creation3d%=1 then return 3d_y_position no_choisi3d%,position(no_translatey3d%)/10 return
' *** translation Z translatez3d: if flag_creation3d%=1 then return 3d_z_position no_choisi3d%,position(no_translatez3d%)/10 return
' *** rouge rouge3d: if flag_creation3d%=1 then return 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) return
' *** vert vert3d: if flag_creation3d%=1 then return 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) return
' *** bleu bleu3d: if flag_creation3d%=1 then return 3d_color no_choisi3d%,position(no_rouge3d%),position(no_vert3d%),position(no_bleu3d%) return
| |
|