carl
Nombre de messages : 6 Date d'inscription : 14/08/2010
| Sujet: editeur de monde 3d Dim 15 Aoû 2010 - 0:32 | |
| Bonjour a tous, et merci a tous ceux qui m'ont souhaité la bienvenue. voila, j'ai découvert panoramic il y a peut de temps et ce langage m'a tout de suite intéressé de par sa simplicité. mais le coté qui m'interresse le plus est la 3d, je vous dévoille donc ce petit programme que je viens de finir en une journée ,merci la doc et les forums ! , j'espère le faire évoluer car il est encore très simpliste , bref j'attends vos remarques et conseils merci. - Code:
-
error_french dim dxx,dxy dxx = screen_x : dxy = screen_y : width 0,dxx : height 0,dxy : caption 0,"" scene3d 1 : height 1,dxy : width 1,dxx : left 1,0 : top 1,0 :full_space 1 dim camerax,cameray,cameraz,angle,rayon,souris,pointx,pointy,pointz,speedcam angle=3.2 : rayon=1000 : camerax = -200 : cameray = 8 : cameraz = -200 :speedcam = .5 dim objetfile$(100),pxobjet(100),pyobjet(100),pzobjet(100),sxobjet(100),syobjet(100),szobjet(100) dim rotxobjet(100),rotyobjet(100),rotzobjet(100) dim objetmax,objet,x,objetencours,scale,a$,b$,dir$,info$,aide ,b ,r,s,file$,msg objet = 39 : scale = .1 : dir$ = dir_current$ : aide = 1 rem on demarre les objets a 40 pour laisser la place aux objets de base label init,save,main,quit,open,undo,skybox,pointe_camera,pointe_cameray,scrollchange,event,opentexture,resetscroll,opensavefile,savefile scroll_bar 3 : left 3,00 : top 3,100 : min 3,-200 : max 3,200 : position 3,0 : hide 3 : rem posxobjet scroll_bar 4 : left 4,00 : top 4,120 : min 4,-200 : max 4,200 : position 4,0 : hide 4 : rem posyobjet scroll_bar 5 : left 5,00 : top 5,140 : min 5,-200 : max 5,200 : position 5,0 : hide 5 : rem poszobjet scroll_bar 6 : left 6,00 : top 6,160 : min 6,0 : max 6,200 : position 6,0 : hide 6 : rem scalexobjet scroll_bar 7 : left 7,00 : top 7,180 : min 7,0 : max 7,200 : position 7,0 : hide 7 : rem scaleyobjet scroll_bar 8 : left 8,00 : top 8,200 : min 8,0 : max 8,200 : position 8,0 : hide 8 : rem scalezobjet scroll_bar 9 : left 9,00 : top 9,220 : min 9,-200 : max 9,200 : position 9,0 : hide 9 : rem rotationxobjet scroll_bar 10 : left 10,00 : top 10,240 : min 10,-200 : max 10,200 : position 10,0 : hide 10 : rem rotationyobjet scroll_bar 11 : left 11,00 : top 11,260 : min 11,-200 : max 11,200 : position 11,0 : hide 11 : rem rotationzobjet gosub skybox 3D_PLANE 15 3d_x_position 15,camerax 3d_y_position 15,cameray -8 3d_z_position 15,cameraz 3d_x_scale 15,200 3d_y_scale 15,200 3d_z_scale 15,200 3d_x_rotate 15,90 3d_load_texture 15,"media/terrain_0.bmp" 3D_U_TILE 15,30 3D_V_TILE 15,30 edit 2 : left 2,00 : top 2,5 : width 2,160 : height 2,20 : hide 2 button 17 : left 17,00 : top 17,30 : caption 17," << precedent " : hide 17 button 18 : left 18,80 : top 18,30 : caption 18," suivant >> " : hide 18 button 19 : left 19,00 : top 19,60 : caption 19,"texture " : hide 19 button 20 : left 20,80 : top 20,60 : caption 20,"aller a l'objet " : hide 20 button 21 : left 21,00 : top 21,300 : caption 21,"ouvrir " : hide 21 button 22 : left 22,80 : top 22,300 : caption 22,"sauver " : hide 22 button 23 : left 23,50 : top 23,360 : caption 23,"quitter " : hide 23 while scancode <> 45 gosub main end_while gosub quit return rem --------------------------------------------------------------------------- init: if file_exists(file$) = 1 file_open_read 13,file$ file_readln 13,a$ file_readln 13,a$ : camerax = val(a$) file_readln 13,a$ : cameray = val(a$) file_readln 13,a$ : cameraz = val(a$) file_readln 13,a$ if a$="" objet = 39 else objet = val(a$) end_if if objet >= 40 objetmax = objet for x = 40 to objetmax 3d_mesh x file_readln 13,a$ objetfile$(x) = a$ 3d_load_object x,objetfile$(x) file_readln 13,a$ pxobjet(x)=a$ 3d_x_position x,pxobjet(x) file_readln 13,a$ pyobjet(x)=a$ 3d_y_position x,pyobjet(x) file_readln 13,a$ pzobjet(x)=a$ 3d_z_position x,pzobjet(x) file_readln 13,a$ sxobjet(x)=a$ 3d_x_scale x,sxobjet(x) file_readln 13,a$ syobjet(x)=a$ 3d_y_scale x,syobjet(x) file_readln 13,a$ szobjet(x)=a$ 3d_z_scale x,szobjet(x) file_readln 13,a$ rotxobjet(x)=a$ 3d_x_rotate x,rotxobjet(x) file_readln 13,a$ rotyobjet(x)=a$ 3d_y_rotate x,rotyobjet(x) file_readln 13,a$ rotzobjet(x)=a$ 3d_z_rotate x,rotzobjet(x) text 2," objet n° " + str$(x) next x end_if file_close 13 end_if return rem --------------------------------------------------------------------------- opensavefile: open_dialog 12 filter 12,"fichiers world|*.world" b$=file_name$(12) If Right$(b$,5) = "world" file$ = b$ gosub init end_if b$ = "" delete 12 return rem --------------------------------------------------------------------------- savefile: save_dialog 12 filter 12,"fichiers world|*.world" b$=file_name$(12) file$ = b$ file$ = file$+".world" gosub save b$ = "" delete 12 return rem --------------------------------------------------------------------------- save: rem dir_change dir$ file_open_write 14,file$ file_writeln 14,date$ + " " + time$ file_writeln 14,camerax file_writeln 14,cameray file_writeln 14,cameraz if objet > 39 file_writeln 14,objetmax for x = 40 to objetmax if objetfile$(x)="" : return : end_if file_writeln 14,objetfile$(x) file_writeln 14,o3d_x_position(x) : rem pxobjet(x) file_writeln 14,o3d_y_position(x) : rem pyobjet(x) file_writeln 14,o3d_z_position(x) : rem pzobjet(x) file_writeln 14,o3d_x_scale(x) : rem sxobjet(x) file_writeln 14,o3d_y_scale(x) : rem syobjet(x) file_writeln 14,o3d_z_scale(x) : rem szobjet(x) file_writeln 14,o3d_x_rotate(x) : rem rotxobjet(x) file_writeln 14,o3d_y_rotate(x) : rem rotyobjet(x) file_writeln 14,o3d_z_rotate(x) : rem rotzobjet(x) next x end_if file_close 14 return rem --------------------------------------------------------------------------- quit: msg = message_confirmation_yes_no("Etes vous sur de vouloir quitter ? ") if msg = 1 then terminate if msg = 0 then return if msg = 2 then return return rem --------------------------------------------------------------------------- open: open_dialog 12 filter 12,"fichiers 3ds|*.3ds|md2|*.md2" b$=file_name$(12) If Right$(b$,3) = "3ds" or Right$(b$,3) ="md2" objet = objet + 1 objetfile$(objet) = b$ pxobjet(objet)=camerax pyobjet(objet)=cameray pzobjet(objet)=cameraz sxobjet(objet)=scale syobjet(objet)=scale szobjet(objet)=scale 3d_mesh objet 3d_load_object objet,objetfile$(objet) 3d_x_scale objet,sxobjet(objet) 3d_y_scale objet,syobjet(objet) 3d_z_scale objet,szobjet(objet) 3d_x_position objet,pxobjet(objet) 3d_y_position objet,pyobjet(objet) 3d_z_position objet,pzobjet(objet) 3d_x_rotate objet,rotxobjet(objet) 3d_y_rotate objet,rotyobjet(objet) 3d_z_rotate objet,rotzobjet(objet) end_if text 2," objet n° " + str$(objet) objetmax = objet b$ = "" delete 12 return rem --------------------------------------------------------------------------- opentexture: open_dialog 12 filter 12,"fichiers jpg|*.jpg|bmp|*.bmp" b$=file_name$(12) If Right$(b$,3) = "jpg" or Right$(b$,3) ="bmp" if objetmax>39 : 3d_load_texture objet,b$ : end_if end_if b$ = "" delete 12 return rem --------------------------------------------------------------------------- undo: if objet > 39 : 3d_delete objet : objet = objet - 1 :end_if return rem --------------------------------------------------------------------------- main: if scancode = 114 : camerax = 0 : cameray = 0 : cameraz = 0 : end_if : rem f3 if scancode = 33 : cameray = cameray + speedcam : end_if if scancode = 34 : cameray = cameray - speedcam : end_if if scancode = 90 : camerax = camerax + speedcam : end_if :rem z if scancode = 83 : camerax = camerax - speedcam : end_if :rem s if scancode = 81 : cameraz = cameraz + speedcam : end_if :rem q if scancode = 68 : cameraz = cameraz - speedcam : end_if :rem d if scancode = 37 : angle=angle+0.005 : gosub pointe_camera : end_if if scancode = 39 : angle=angle-0.005 : gosub pointe_camera : end_if if scancode = 38 : angle=angle+0.005 : gosub pointe_cameray : end_if if scancode = 40 : angle=angle-0.005 : gosub pointe_cameray : end_if cam_x_position camerax cam_y_position cameray cam_z_position cameraz if cameray < o3d_y_position(15)+10 : cameray = cameray +1 : end_if if mouse_left_down(1)=1 : souris = 1 : end_if if mouse_left_up(1)=1 : souris = 0 : end_if if mouse_right_down(1)=1 : aide = 0 : end_if if mouse_right_up(1)=1 : aide = 1 : end_if if scancode = 112 : gosub open : end_if if scancode = 113 : aide = aide +1 : end_if if aide = 0 : height 1,dxy : width 1,dxx : left 1,200 : top 1,0 : cursor_default 1 : for b= 2 to 11 : show b : next b : show 17 : show 18 : show 19 :show 20: show 21 : show 22: show 23 : end_if if aide = 1 : left 1,00 : full_space 1 : cursor_hide 1 : for b= 2 to 11 : hide b : next b : hide 17 : hide 18 : hide 19 : hide 20 :hide 21 : hide 22: hide 23: end_if if aide > 1 : aide = 0 : end_if if objetmax>39 : gosub event : else : text 2,"aucun objet chargé press f1" :end_if if CLICKED(21)=1 gosub opensavefile end_if if CLICKED(22)=1 gosub savefile message "sauvegarde effectuée " end_if if CLICKED(23)=1 gosub quit end_if return rem --------------------------------------------------------------------------- skybox: 3D_SKYBOX 16 3D_LOAD_TEXTURE_TOP 16,"media/SKY_up.jpg" 3D_LOAD_TEXTURE_LEFT 16,"media/SKY_bk.jpg" 3D_LOAD_TEXTURE_BACK 16,"media/SKY_rt.jpg" 3D_LOAD_TEXTURE_FRONT 16,"media/SKY_lf.jpg" 3D_LOAD_TEXTURE_RIGHT 16,"media/SKY_fr.jpg" 3D_LOAD_TEXTURE_BOTTOM 16,"media/SKY_floor.jpg" return rem --------------------------------------------------------------------------- pointe_camera: pointx = camerax + rayon*sin(angle) pointz = cameraz + rayon*cos(angle) point_x_position pointx point_z_position pointz return rem --------------------------------------------------------------------------- pointe_cameray: pointy = cameray + (rayon*sin(angle))/2 point_y_position pointy return rem --------------------------------------------------------------------------- event: if CLICKED(17)=1 objet = objet - 1 if objet < 40 : objet = 40 : end_if text 2," objet n° " + str$(objet) gosub resetscroll end_if if CLICKED(18)=1 objet = objet + 1 if objet > objetmax : objet = objetmax : end_if text 2," objet n° " + str$(objet) gosub resetscroll end_if if CLICKED(19)=1 gosub opentexture end_if if CLICKED(20)=1 camerax = o3d_x_position(objet) cameray = o3d_y_position(objet) cameraz = o3d_z_position(objet) end_if gosub scrollchange return rem --------------------------------------------------------------------------- resetscroll: position 3,o3d_x_position(objet) position 4,o3d_y_position(objet) position 5,o3d_z_position(objet) position 6,o3d_x_scale(objet) position 7,o3d_y_scale(objet) position 8,o3d_z_scale(objet) position 9,o3d_x_rotate(objet) position 10,o3d_y_rotate(objet) position 11,o3d_z_rotate(objet) return rem --------------------------------------------------------------------------- scrollchange: 3d_x_position objet,pxobjet(objet)+ position(3) 3d_y_position objet,pyobjet(objet)+ position(4) 3d_z_position objet,pzobjet(objet)+ position(5) 3d_x_scale objet,sxobjet(objet) + position(6) 3d_y_scale objet,syobjet(objet) + position(7) 3d_z_scale objet,szobjet(objet) + position(8) 3d_x_rotate objet,rotxobjet(objet) + position(9) 3d_y_rotate objet,rotyobjet(objet) + position(10) 3d_z_rotate objet,rotzobjet(objet) + position(11) return
| |
|