Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Créer un peu de 3d... | |
|
+5Klaus papydall Jicehel Yannick bignono 9 participants | |
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Créer un peu de 3d... Mar 23 Oct 2012 - 23:36 | |
| Salut Bignono La cheminée et l’animation du feu : c’est bien. Mais il manque le bruitage du feu ! Qu’à cela ne tienne ! J’ai modifié un peu le code : juste avant le END, j’ai ajouté - Code:
-
if file_exists(rep$ + "\feu_cheminee.mp3") = 1 then bruitage()
Et j’ai ajouté à la fin du programme : - Code:
-
SUB bruitage() sound 100 : file_load 100,rep$ +"\feu_cheminee.mp3" play 100 END_SUB
Tu peux télécharger le fichier du bruitage ‘feu_cheminee.mp3’ qui se trouve sur mon WebDav Répertoire : Pour Bignono Fichier : feu_cheminee.mp3 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Mer 24 Oct 2012 - 0:02 | |
| L'effet de feu, j'adore, mais par contre je trouve que le linteau de la cheminée est trop gros, mais bon, c'est un détail. J'ai fais une petite modif au niveau de l'angle de vue et pour la sortie du programme - Code:
-
dim n,f$,rep$ label feu, fin
rep$="C:\Panoramic-Init\sources\3D_Feu\" full_space 0:scene3d 1:full_space 1:hide 1 cam_position 0,8,11:point_position 0,5,3 font_bold 0:font_size 0,40:print_locate 200,200:print "PATIENCE!"
3d_plane 1:3d_scale 1,100,100,1:3d_x_rotate 1,90:3d_position 1,0,-2.5,0:' le sol 3d_load_texture 1,rep$+"soldalle.jpg":3d_u_tile 1,100:3d_v_tile 1,100
3d_plane 2:3d_scale 2,100,100,1:3d_position 2,0,0,-11.5:' le mur du fond 3d_load_texture 2,rep$+"mur.jpg":3d_u_tile 2,100:3d_v_tile 2,100
3d_mesh 3:3d_load_object 3,rep$+"cheminée.3ds":' la cheminée 3d_load_texture 3,rep$+"cheminée.bmp" 3d_position 3,0,-2.5,-10:3d_scale 3,1.5,1.5,1.5:3d_x_rotate 3,90
3d_plane 4:3d_position 4,0,0,-11:3d_u_tile 4,1:3d_v_tile 4,1:' pour le feu
3d_mesh 5:3d_load_object 5,rep$+"accessoires1.3ds":' Accessoires (pelle, balai, ...) 3d_load_texture 5,rep$+"accessoires1.bmp" 3d_position 5,8,-2.2,-2:3d_scale 5,10,10,10:3d_x_rotate 5,90:3d_z_rotate 5,45
3d_mesh 6:3d_load_object 6,rep$+"accessoires2.3ds":' Panier à bois 3d_load_texture 6,rep$+"accessoires2.jpg"
3d_mesh 7:3d_load_object 7,rep$+"accessoires3.3ds":' les buches 3d_load_texture 7,rep$+"accessoires3.jpg":3d_chain 6,7 3d_position 7,-8,-2.2,-2:3d_scale 7,10,10,10:3d_x_rotate 7,90:3d_z_rotate 7,315
show 1 timer 99:timer_interval 99,150:on_timer 99,feu n=1 end
feu: timer_off 99 if scancode=27 then goto fin f$=rep$+"feu"+str$(n)+".jpg":3d_load_texture 4,f$ n=n+2:if n>=30 then n=1 timer_on 99 return
fin: terminate | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Créer un peu de 3d... Mer 24 Oct 2012 - 0:27 | |
| Chargez ‘feu_cheminee.mp3’ sur mon WebDav, dans le dossier ‘Pour Bignono’, modifiez le programme comme ceci et …. réchauffez-vous en écoutant le crépitement! - Code:
-
dim n,f$,rep$ label feu
rep$="D:\Panoramic\Forum\Bignono\Effet_Feu\" full_space 0:scene3d 1:full_space 1:hide 1 cam_position 0,2,10:point_position 0,2,9 font_bold 0:font_size 0,40:print_locate 200,200:print "PATIENCE!"
3d_plane 1:3d_scale 1,100,100,1:3d_x_rotate 1,90:3d_position 1,0,-2.5,0:' le sol 3d_load_texture 1,rep$+"soldalle.jpg":3d_u_tile 1,100:3d_v_tile 1,100
3d_plane 2:3d_scale 2,100,100,1:3d_position 2,0,0,-11.5:' le mur du fond 3d_load_texture 2,rep$+"mur.jpg":3d_u_tile 2,100:3d_v_tile 2,100
3d_mesh 3:3d_load_object 3,rep$+"cheminée.3ds":' la cheminée 3d_load_texture 3,rep$+"cheminée.bmp" 3d_position 3,0,-2.5,-10:3d_scale 3,1.5,1.5,1.5:3d_x_rotate 3,90
3d_plane 4:3d_position 4,0,0,-11:3d_u_tile 4,1:3d_v_tile 4,1:' pour le feu
3d_mesh 5:3d_load_object 5,rep$+"accessoires1.3ds":' Accessoires (pelle, balai, ...) 3d_load_texture 5,rep$+"accessoires1.bmp" 3d_position 5,8,-2.2,-2:3d_scale 5,10,10,10:3d_x_rotate 5,90:3d_z_rotate 5,45
3d_mesh 6:3d_load_object 6,rep$+"accessoires2.3ds":' Panier à bois 3d_load_texture 6,rep$+"accessoires2.jpg"
3d_mesh 7:3d_load_object 7,rep$+"accessoires3.3ds":' les buches 3d_load_texture 7,rep$+"accessoires3.jpg":3d_chain 6,7 3d_position 7,-8,-2.2,-2:3d_scale 7,10,10,10:3d_x_rotate 7,90:3d_z_rotate 7,315
show 1 timer 99:timer_interval 99,1:on_timer 99,feu n=1 ' ajouter cette ligne if file_exists(rep$ + "\feu_cheminee.mp3") = 1 then bruitage() end
feu: timer_off 99 if scancode=27 then terminate f$=rep$+"feu"+str$(n)+".jpg":3d_load_texture 4,f$:wait 70 n=n+1:if n=30 then n=1 timer_on 99 return ' Ajouter cette procédure SUB bruitage() sound 100 : file_load 100,rep$ +"\feu_cheminee.mp3" play 100 END_SUB
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Mer 24 Oct 2012 - 1:21 | |
| Merci Papydal - Code:
-
dim n,f$,rep$ label feu, fin
rep$="C:\Panoramic-Init\sources\3D_Feu\" full_space 0:scene3d 1:full_space 1:hide 1 cam_position 0,8,11:point_position 0,5,3 font_bold 0:font_size 0,40:print_locate 200,200:print "PATIENCE!"
3d_plane 1:3d_scale 1,100,100,1:3d_x_rotate 1,90:3d_position 1,0,-2.5,0:' le sol 3d_load_texture 1,rep$+"soldalle.jpg":3d_u_tile 1,100:3d_v_tile 1,100
3d_plane 2:3d_scale 2,100,100,1:3d_position 2,0,0,-11.5:' le mur du fond 3d_load_texture 2,rep$+"mur.jpg":3d_u_tile 2,100:3d_v_tile 2,100
3d_mesh 3:3d_load_object 3,rep$+"cheminée.3ds":' la cheminée 3d_load_texture 3,rep$+"cheminée.bmp" 3d_position 3,0,-2.5,-10:3d_scale 3,1.5,1.5,1.5:3d_x_rotate 3,90
3d_plane 4:3d_position 4,0,0,-11:3d_u_tile 4,1:3d_v_tile 4,1:' pour le feu
3d_mesh 5:3d_load_object 5,rep$+"accessoires1.3ds":' Accessoires (pelle, balai, ...) 3d_load_texture 5,rep$+"accessoires1.bmp" 3d_position 5,8,-2.2,-2:3d_scale 5,10,10,10:3d_x_rotate 5,90:3d_z_rotate 5,45
3d_mesh 6:3d_load_object 6,rep$+"accessoires2.3ds":' Panier à bois 3d_load_texture 6,rep$+"accessoires2.jpg"
3d_mesh 7:3d_load_object 7,rep$+"accessoires3.3ds":' les buches 3d_load_texture 7,rep$+"accessoires3.jpg":3d_chain 6,7 3d_position 7,-8,-2.2,-2:3d_scale 7,10,10,10:3d_x_rotate 7,90:3d_z_rotate 7,315
show 1 : n=1 sound 100 : file_load 100,rep$ +"\feu_cheminee.mp3" timer 99:timer_interval 99,150:on_timer 99,feu
end
feu: timer_off 99 if scancode=27 then goto fin f$=rep$+"feu"+str$(n)+".jpg":3d_load_texture 4,f$ n=n+2:if n>=30 then n=1 if file_exists(rep$ + "\feu_cheminee.mp3") = 1 then play 100 timer_on 99 return
fin: terminate | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Créer un peu de 3d... Sam 10 Nov 2012 - 17:18 | |
| Hello les Panoramiciens, Bon, je reviens avec mon feu de cheminée, et j'ai rajouté quelques objets 3d pour embellir le décor, j'y ai mis mon personnage animé de mon petit jeu Fort Labyrinth, j'ai gardé le bruitage du feu que Papydall avait mis, j'ai ajouté également quelques autres bruitages, et mis une petite musique. Et je me suis dis, je m'essaye à faire un petit film. Bien entendu, on est très très loin des films 3d comme Toy Story ou l'âge de glace, mais ce que je cherche avant tout, c'est la manière de programmer ce genre de chose. Pour ce premier essai, je me suis donc basé sur le cycle du feu qui doit être de 29 images, et pendant un cycle de feu, une action se déroule: La porte s'ouvre en grinçant, puis au cycle suivant, le personnage entre dans la pièce, ensuite au cycle suivant il est en position statique regardant à droite et à gauche, etc... Cela dure en gros 1 minute. Ce qui me déçois le plus, c'est quand le personnage se tourne. On le voit faire de 2 manières différentes: la première fois avec les mouvement d'animation de la marche et la seconde fois avec tout simplement la commande 3d_rotate. A ces moments précis, il faudrait que la caméra soit plus proche du personnage de manière à n'en voir que le haut de son corps. Mais ce programme n'est qune simple ébauche, une recherche personnelle et il n'est en rien un modèle à copier pour faire de l'animation. Voilà, vous allez sur mon web dav, vous téléchargez scene2.zip dans le dossier 3D et vous lancez scene.bas après avoir adapté la variable rep$ au début du programme. http://www.mydrive.ch/identifiant: panoramic@bignono mot de passe: panoramic123 A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Créer un peu de 3d... Sam 10 Nov 2012 - 20:24 | |
| "Le cinema par Bignono". C’est intéressant. Je vais regarder de plus près ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Créer un peu de 3d... Dim 11 Nov 2012 - 17:56 | |
| Après quelques bricolages dans le code (problème de répertoire), j'ai réussi à visualiser la scène... C'est pas mal. L'ambiance château moyenâgeux est prenante Un conseil te devrais huiler la porte..... A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Dim 11 Nov 2012 - 23:56 | |
| Très bon Bignono. 2 petites remarques toutefois: 1/ Dans ton source, tu as laissé le chemin du chaudron 'en dur- et non relatif à rep$ 2/ Il y a un tout petit bug d'animation du personnage. Un triangle disparait sur certaines parties de l'animation, entre les jambes de notre héros.
En tout cas, c'est une belle démo | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Créer un peu de 3d... Jeu 10 Jan 2013 - 0:05 | |
| Bonsoir à tous, J'ai vite fait une petite scene en 3d qu'avec des objets statiques. Ce sont queques ruines et quelques rochers que j'ai un peu bricolés après les avoir récupérés sur des sites 3d. Pour les uns commes pour les autres, il n'y avait pas de textures, et j'ai cherché ce qui pouvait correspondre le mieux dans ma base de données personnelles. Rien de bien extraordinaire! Sur mon webdav, télécharger scene3.zip dans le dossier 3D. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Jeu 10 Jan 2013 - 2:13 | |
| Joli Bignono. "Plus qu'à" gérer les collisions avec les objets pour plus que l'on traverse les murs ... | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Créer un peu de 3d... Jeu 10 Jan 2013 - 10:09 | |
| Bonjour Jicehel, et à tous les panoramiciens, J'ai essayé de gérer les collisions avec les espèces de rochers que j'ai créés. A l'heure actuelle, le meilleur résultat en utilisant les instructions 3d_collision_as_... c'est avec faces! Mais grand Dieu, que c'est lent! Et oui! 4 objets 3d avec d'innombrables faces, ça doit être long à traiter: si je compte bien, terra1.3ds a 7938 facettes, terra2.3ds a 23814 facettes, terra3.3ds a 15876 facettes et terra5.3ds en a 7938 soit au total pour ces 4 objets: 55566 facettes à controler toutes les milisecondes! Alors, si on essayeà la place de 3d_collision_as_faces de mettre 3d_collision_as_cube ou sphere ou ellipsoid..., là on se trouve bloqué bien avant d'être sur le rocher! Et ça n'a pas l'air de ressembler à une collision bien que le déplacement soit normal. - Code:
-
' ******************************************************************** ' ************************* COMMANDES CLAVIER ************************ ' ******************************************************************** ' * TOUCHE ESC ==> MET FIN AU PROGRAMME:................... CASE 27 *
' * TOUCHE "page up" ==> DÉCOLLER (vision aérienne):....... CASE 33 * ' * TOUCHE "page down" ==> REDESCENDRE (vision aérienne):.. CASE 34 * ' * TOUCHE FLÈCHE GAUCHE ==> PIVOTER À GAUCHE:............. CASE 37 * ' * TOUCHE FLÈCHE HAUTE ==> AVANCER:....................... CASE 38 * ' * TOUCHE FLÈCHE DROITE ==> PIVOTER À DROITE:............. CASE 39 * ' * TOUCHE FLÈCHE BASSE ==> RECULER:....................... CASE 40 * ' * TOUCHE "B" ==> REGARDER VERS LE BAS:................... CASE 66 * ' * TOUCHE "H" ==> REGARDER VERS LE HAUT:.................. CASE 72 * ' ******************************************************************** ' ************************** PAVÉ NUMÉRIQUE ************************** ' ******************************************************************** ' * TOUCHE "1" ==> RECULER VERS LA GAUCHE:................. CASE 97 * ' * TOUCHE "2" ==> RECULER:................................ CASE 98 * ' * TOUCHE "3" ==> RECULER VERS LA DROITE:................. CASE 99 * ' * TOUCHE "4" ==> DÉPLACEMENT LATÉRAL VERS LA GAUCHE:..... CASE 100 * ' * TOUCHE "5" ==> RETOUR AU POINT D'ORIGINE:.............. CASE 101 * ' * TOUCHE "6" ==> DÉPLACEMENT LATÉRAL VERS LA DROITE:..... CASE 102 * ' * TOUCHE "7" ==> AVANCER VERS LA GAUCHE:................. CASE 103 * ' * TOUCHE "8" ==> AVANCER:................................ CASE 104 * ' * TOUCHE "9" ==> AVANCER VERS LA DROITE:................. CASE 105 * ' * TOUCHE "+" ==> MONTER:................................. CASE 107 * ' * TOUCHE "-" ==> DESCENDRE:.............................. CASE 109 * ' ********************************************************************
dim rot,chy,phy,bh:rot=180:chy=1.7:phy=1.7 ' rot=angle auquel se trouve le cube invisible du moteur 3d, soit 3d_y_rotate 100,rot ' chy=la position y de la caméra, soit cam_y_position ' phy=la position y du point visé par la caméra, soit point_y_position label bouge
scene()
timer 200:timer_interval 200,1:on_timer 200,bouge end
bouge: timer_off 200 deplace() timer_on 200 return
sub deplace() dim_local vrot,vd,vhy,i,mv,pv,scd vrot=1:vd=0.2:vhy=0.25:mv=1000:pv=1001 ' vrot=vitesse de rotation lorsqu'on pivote à gauche ou à droite (flèches gauche ou droite) ' vd=vitesse de déplacement lorsqu'on avance, recule, va droite ou à gauche ' vhy=vitesse ascensionnelle pour monter ou descendre (touches H ou B) ' mv=numéro objet 3d véhicule moteur soit 1000 (3d_cube 1000,1) ' pv=numéro objet 3d point visé soit 1001 (3d_mesh 1001; on peut mettre aussi un 3d_cube ou autre, mais il faut lui faire hide aussi) select scancode case 27:delete 1:terminate case 33:if chy<300 then for i=chy to 200 step 05:cam_position o3d_x_position(mv),i,o3d_z_position(mv):display:next i:chy=300 case 34:if chy>phy then for i=200 to phy step -5:cam_position o3d_x_position(mv),i,o3d_z_position(mv):display:next i:chy=phy case 37:rot=rot+vrot:3d_y_rotate mv,rot case 39:rot=rot-vrot:3d_y_rotate mv,rot case 38:3d_move mv,vd:scd=1 case 40:3d_move mv,vd-(2*vd):scd=2 case 66:bh=bh+.2:if bh>11 then bh=11 case 72:bh=bh-.2:if bh<-11 then bh=-11 case 97:3d_move mv,vd-(2*vd):3d_x_position mv,o3d_x_position(mv)+(cos(rot*3.1415/180)*vd):3d_z_position mv,o3d_z_position(mv)-(sin(rot*3.1415/180)*vd):scd=3 case 98:3d_move mv,vd-(2*vd):scd=2 case 99:3d_move mv,vd-(2*vd):3d_x_position mv,o3d_x_position(mv)-(cos(rot*3.1415/180)*vd):3d_z_position mv,o3d_z_position(mv)+(sin(rot*3.1415/180)*vd):scd=4 case 100:3d_x_position mv,o3d_x_position(mv)+(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)-(sin(rot*3.1415/180)*(vd*2)):scd=5 case 101:bh=0:rot=180:chy=1.7:phy=1.7:3d_position mv,0,chy,0:3d_y_rotate mv,rot:3d_move mv,-13 case 102:3d_x_position mv,o3d_x_position(mv)-(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)+(sin(rot*3.1415/180)*(vd*2)):scd=6 case 103:3d_move mv,vd:3d_x_position mv,o3d_x_position(mv)+(cos(rot*3.1415/180)*vd):3d_z_position mv,o3d_z_position(mv)-(sin(rot*3.1415/180)*vd):scd=7 case 104:3d_move mv,vd:scd=1 case 105:3d_move mv,vd:3d_x_position mv,o3d_x_position(mv)-(cos(rot*3.1415/180)*vd):3d_z_position mv,o3d_z_position(mv)+(sin(rot*3.1415/180)*vd):scd=8 case 107:phy=phy+vhy:chy=chy+vhy case 109:phy=phy-vhy:chy=chy-vhy end_select
3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv) 3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv) 3d_move pv,1:cam_position o3d_x_position(mv),sin(bh/6.28)+chy,o3d_z_position(mv) point_position o3d_x_position(pv),phy,o3d_z_position(pv) if o3d_collision(mv,3)=1 or o3d_collision(mv,4)=1 or o3d_collision(mv,5)=1 or o3d_collision(mv,7)=1 then bloq(scd,vd,mv) end_sub
sub bloq(scd,vd,mv) if scd=1 then 3d_move mv,-1*vd if scd=2 then 3d_move mv,-1*(vd-(2*vd)) if scd=3 then 3d_move mv,-1*(vd-(2*vd)):3d_x_position mv,o3d_x_position(mv)-(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)+(sin(rot*3.1415/180)*(vd*2)) if scd=4 then 3d_move mv,-1*(vd-(2*vd)):3d_x_position mv,o3d_x_position(mv)+(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)-(sin(rot*3.1415/180)*(vd*2)) if scd=5 then 3d_x_position mv,o3d_x_position(mv)-(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)+(sin(rot*3.1415/180)*(vd*2)) if scd=6 then 3d_x_position mv,o3d_x_position(mv)+(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)-(sin(rot*3.1415/180)*(vd*2)) if scd=7 then 3d_move mv,-1*vd:3d_x_position mv,o3d_x_position(mv)-(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)+(sin(rot*3.1415/180)*(vd*2)) if scd=8 then 3d_move mv,-1*vd:3d_x_position mv,o3d_x_position(mv)+(cos(rot*3.1415/180)*(vd*2)):3d_z_position mv,o3d_z_position(mv)-(sin(rot*3.1415/180)*(vd*2)) end_sub
sub scene() dim_local rep1$,rep2$:rep1$="c:\mesprog\scene3\":rep2$="c:\mesprog\scene3\terras\" full_space 0:scene3d 1:full_space 1:hide 1 font_name 0,"Consolas":font_size 0,40:font_bold 0 print_locate (width(0)/2)-(text_width("PATIENTEZ! MISE EN PLACE DE LA SCÈNE",0)/2),height(0)/3 print "PATIENTEZ! MISE EN PLACE DE LA SCÈNE"
cam_position 0,1.7,10:point_position 0,1.7,9:light_position 0,0,10 ' Décor 3d_skybox 1:3d_load_texture_top 1,rep1$+"031top.jpg":3d_load_texture_left 1,rep1$+"031left.jpg" 3d_load_texture_back 1,rep1$+"031back.jpg":3d_load_texture_front 1,rep1$+"031front.jpg":3d_load_texture_right 1,rep1$+"031right.jpg"
' Terrain 3d_plane 2:3d_load_texture 2,rep2$+"\terreseche.jpg" 3d_scale 2,10000,10000,1:3d_rotate 2,90,0,0:3d_u_tile 2,30000:3d_v_tile 2,30000
' terra1 3d_mesh 3:3d_load_object 3,rep2$+"terra1.3ds":3d_load_texture 3,rep2$+"poussière.bmp":3d_collision_as_faces 3 3d_scale 3,1,1,4:3d_rotate 3,90,9,0:3d_position 3,60,3.8,-40
' terra2 3d_mesh 4:3d_load_object 4,rep2$+"terra2.3ds":3d_load_texture 4,rep2$+"mousse1.bmp":3d_collision_as_faces 4 3d_scale 4,1,1,5:3d_rotate 4,90,0,0:3d_position 4,-20,-4.75,-40
' terra3 3d_mesh 5:3d_load_object 5,rep2$+"terra3.3ds":3d_load_texture 5,rep2$+"terre2.bmp":3d_collision_as_faces 5 3d_scale 5,1,1,4:3d_rotate 5,90,0,0:3d_position 5,0,0,-90
' terra4 3d_mesh 6:3d_load_object 6,rep2$+"terra4.3ds":3d_load_texture 6,rep2$+"roche.bmp":' 3d_collision_as_faces 6 3d_scale 6,1,1,1.5:3d_rotate 6,90,0,0:3d_position 6,-50,-20,0
' terra5 3d_mesh 7:3d_load_object 7,rep2$+"terra5.3ds":3d_load_texture 7,rep2$+"pavés.jpg":3d_collision_as_faces 7 3d_scale 7,1,2.25,9:3d_rotate 7,90,0,0:3d_position 7,80,0,-80
' tombe 3d_mesh 8:3d_load_object 8,rep1$+"tombe.3ds":3d_load_texture 8,rep2$+"goudron.jpg" 3d_scale 8,2.5,2.5,2.5:3d_rotate 8,90,0,-50:3d_position 8,-23,-0.05,-105
' stele 3d_mesh 9:3d_load_object 9,rep1$+"stele.3ds":3d_load_texture 9,rep2$+"beton.jpg" 3d_scale 9,2.5,2.5,2.5:3d_rotate 9,90,0,-50:3d_position 9,-23,0,-105
' socle 3d_mesh 10:3d_load_object 10,rep1$+"socle.3ds":3d_load_texture 10,rep1$+"marbre.jpg" 3d_scale 10,2,2,2:3d_rotate 10,90,0,0:3d_position 10,-10,0,-90
' croix 3d_mesh 11:3d_load_object 11,rep1$+"croix.3ds":3d_load_texture 11,rep1$+"metal060.jpg" 3d_scale 11,2,2,2:3d_rotate 11,90,0,0:3d_position 11,-10,0,-90
' cristal 3d_mesh 12:3d_load_object 12,rep1$+"cristal.3ds":3d_load_texture 12,rep2$+"water.bmp" 3d_scale 12,2,2,2:3d_rotate 12,90,0,0:3d_position 12,-10,0,-90
' épée 3d_mesh 13:3d_load_object 13,rep1$+"épée.3ds":3d_load_texture 13,rep1$+"épée.jpg" 3d_scale 13,2,2,2:3d_rotate 13,90,0,-140:3d_position 13,-24,0,-106
' ruina1 3d_mesh 14:3d_load_object 14,rep1$+"ruina1.3ds":3d_load_texture 14,rep1$+"marbre.jpg" 3d_scale 14,10,10,10:3d_rotate 14,90,0,0:3d_position 14,0,0,-70
' ruina2 3d_mesh 15:3d_load_object 15,rep1$+"ruina2.3ds":3d_load_texture 15,rep2$+"beton.jpg" 3d_scale 15,10,10,10:3d_rotate 15,90,0,0:3d_position 15,0,0,-70
' ruina3 3d_mesh 16:3d_load_object 16,rep1$+"ruina3.3ds":3d_load_texture 16,rep1$+"mur1.jpg" 3d_scale 16,10,10,10:3d_rotate 16,90,0,0:3d_position 16,0,0,-70
' ruina4 3d_mesh 17:3d_load_object 17,rep1$+"ruina4.3ds":3d_load_texture 17,rep1$+"arche.jpg" 3d_scale 17,10,10,10:3d_rotate 17,90,0,0:3d_position 17,0,0,-70
' ruinb1 3d_mesh 18:3d_load_object 18,rep1$+"ruinb1.3ds":3d_load_texture 18,rep1$+"marbre.jpg" 3d_scale 18,10,10,10:3d_rotate 18,90,0,0:3d_position 18,-7,-0.5,-60
' ruinb2 3d_mesh 19:3d_load_object 19,rep1$+"ruinb2.3ds":3d_load_texture 19,rep2$+"beton.jpg" 3d_scale 19,10,10,10:3d_rotate 19,90,0,0:3d_position 19,-7,-0.5,-60
' ruinb3 3d_mesh 20:3d_load_object 20,rep1$+"ruinb3.3ds":3d_load_texture 20,rep1$+"mur3.jpg" 3d_scale 20,10,10,10:3d_rotate 20,90,0,0:3d_position 20,-7,-0.5,-60
' ruinb4 3d_mesh 21:3d_load_object 21,rep1$+"ruinb4.3ds":3d_load_texture 21,rep1$+"arche.jpg" 3d_scale 21,10,10,10:3d_rotate 21,90,0,0:3d_position 21,-7,-0.5,-60
' arche 3d_mesh 22:3d_load_object 22,rep1$+"arche.3ds":3d_load_texture 22,rep1$+"arche.jpg" 3d_scale 22,0.1,0.1,0.1:3d_rotate 22,90,0,31.4:3d_position 22,-4,0,-84
' ruinc1 3d_mesh 23:3d_load_object 23,rep1$+"ruinc1.3ds":3d_load_texture 23,rep1$+"marbre.jpg" 3d_scale 23,10,10,10:3d_rotate 23,90,0,0:3d_position 23,20,-0.4,-40
' ruinc2 3d_mesh 24:3d_load_object 24,rep1$+"ruinc2.3ds":3d_load_texture 24,rep1$+"mur3.jpg" 3d_scale 24,10,10,10:3d_rotate 24,90,0,0:3d_position 24,20,-0.4,-40
' ruinc3 3d_mesh 25:3d_load_object 25,rep1$+"ruinc3.3ds":3d_load_texture 25,rep1$+"mur1.jpg" 3d_scale 25,10,10,10:3d_rotate 25,90,0,0:3d_position 25,20,-0.4,-40
' ruinc4 3d_mesh 26:3d_load_object 26,rep1$+"ruinc4.3ds":3d_load_texture 26,rep1$+"arche.jpg" 3d_scale 26,10,10,10:3d_rotate 26,90,0,0:3d_position 26,20,-0.4,-40
' ruind1 3d_mesh 27:3d_load_object 27,rep1$+"ruind1.3ds":3d_load_texture 27,rep2$+"beton.jpg" 3d_scale 27,10,10,10:3d_rotate 27,90,0,0:3d_position 27,20,-0.1,-90
' ruind2 3d_mesh 28:3d_load_object 28,rep1$+"ruind2.3ds":3d_load_texture 28,rep1$+"mur3.jpg" 3d_scale 28,10,10,10:3d_rotate 28,90,0,0:3d_position 28,20,-0.1,-90
' ruind3 3d_mesh 29:3d_load_object 29,rep1$+"ruind3.3ds":3d_load_texture 29,rep1$+"mur1.jpg" 3d_scale 29,10,10,10:3d_rotate 29,90,0,0:3d_position 29,20,-0.1,-90
' ruind4 3d_mesh 30:3d_load_object 30,rep1$+"ruind4.3ds":3d_load_texture 30,rep1$+"arche.jpg" 3d_scale 30,10,10,10:3d_rotate 30,90,0,0:3d_position 30,20,-0.1,-90 3d_scale 7,1,2.25,9:3d_rotate 7,90,0,0:3d_position 7,80,0,-80
3d_cube 1000,1:3d_y_rotate 1000,rot:3d_move 1000,-13::3d_scale 1000,0.1,0.1,0.1:3d_hide 1000:3d_collision_as_cube 1000 3d_mesh 1001 show 1 end_sub Essayez de tester aux lignes 114,118,122,130 en changeant les 3d_collision_as_faces en sphere, cube, etc... et voyez le résultat en essayant de rentrer en collision avec les rochers! Donc, au premier abord on serait tenté de conclure que les instructions 3d_collision_as_... ont un bug ou ne fonctionnent pas correctement! Il n'en est rien! Le problème vient de mes objets 3ds auxquels je n'ai pas bien défini dans mon logiciel 3d la boîte englobante. C'est un cube dans lequel se trouve mon objet et qui doit être bien ajusté. On peut lui définir une sphere ou un ellipsoide et en modifier les contours, mais là, je ne sais pas encore faire. Bon, je ne sais pas si vous saisissez bien mon explication, mais ce que je veux dire, c'est que mes objets 3d ne sont pas bons, bien qu'ils soient apparemments corrects. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Jeu 10 Jan 2013 - 10:15 | |
| OK bignono, c'est très clair et ce n'est pas moi qui te jetterais la pierre pour les cubes englobants comme je ne sais pas faire non plus. Par contre c'est dommage que tu ne sache pas (encore) faire car en effet, ça simplifierait le test de collisions et qui sait on pourrait faire notre premier vrai petit jeu dans un univers 3D complexe (après le labyrinthe, le casse-brique et je ne sais quel petit jeu déjà existant dans le monde de la 3D Panoramic) En tout cas bel réactivité Est-ce que quelqu'un du forum sait faire ça et pourrait mettre à jour les objets de Bignono pour que l'on puisse faire un 3D collision_as_cube ? | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Créer un peu de 3d... Jeu 14 Mar 2013 - 14:46 | |
| Bonjour à tous, Voici toujours mon programme allégé de mon module de déplacement dans un monde en 3d, auquel j'ai adjoint un petit algorithme que j'ai bricolé vite fait ce matin, et qui permet de créer une ville avec des building de toutes sortes. Ci joint les images pour les textures que vous copiez et installez dans le répertoire de votre choix, et vous n'oubliez pas de changer rep$ dans le programme. Je suis sûr que l'on peut améliorer l'algorithme, et en rajoutant d'autres textures differentes, on doit pouvoir faire de manière aléatoire de vrais grandes cités. D'ailleurs, en plus, ça ressemble un peu aussi à un labyrinthe, vous ne croyez pas? [img] herbe.jpg[/img] [img] beton[/img] [img] imm1.jpg[/img] [img] imm2.jpg[/img] [img] imm3.jpg[/img] [img] imm4.jpg[/img] [img] imm5.jpg[/img] [img] imm6.jpg[/img] [img] imm7.jpg[/img] - Code:
-
' ****************************************************************************** ' ***************************** COMMANDES CLAVIER ****************************** ' ****************************************************************************** dim esc :' * TOUCHE ESC ==> MET FIN AU PROGRAMME:................... CASE 27 * dim tfg :' * TOUCHE FLÈCHE GAUCHE ==> PIVOTER À GAUCHE:............. CASE 37 * dim tfh :' * TOUCHE FLÈCHE HAUTE ==> AVANCER:....................... CASE 38 * dim tfd :' * TOUCHE FLÈCHE DROITE ==> PIVOTER À DROITE:............. CASE 39 * dim tfb :' * TOUCHE FLÈCHE BASSE ==> RECULER:....................... CASE 40 * dim tcb :' * TOUCHE "B" ==> REGARDER VERS LE BAS:................... CASE 66 * dim tch :' * TOUCHE "H" ==> REGARDER VERS LE HAUT:.................. CASE 72 * dim pn5 :' * TOUCHE "5" ==> RETOUR AU POINT D'ORIGINE:.............. CASE 101 * ' ****************************************************************************** dim rep$,rot,chy,phy,bh:rot=180:chy=0.7:phy=0.7:rep$="c:\mesprog\Ville\" label t1,t2,bouge
on_key_down 0,t1 on_key_up 0,t2
scene()
timer 200:timer_interval 200,1:on_timer 200,bouge end
bouge: timer_off 200 deplace() timer_on 200 return
sub deplace() dim_local vrot,vd,mv,pv vrot=1:vd=0.025:mv=1000:pv=1001 if esc=1 then terminate if tfg=1 then rot=rot+vrot:3d_y_rotate mv,rot if tfd=1 then rot=rot-vrot:3d_y_rotate mv,rot if tfh=1 then 3d_move mv,vd if tfb=1 then 3d_move mv,vd-(2*vd) if tcb=1 then bh=bh+.2:if bh>4 then bh=4 if tch=1 then bh=bh-.2:if bh<-4 then bh=-4 if pn5=1 then bh=0:rot=180:chy=0.75:phy=0.75:3d_position mv,0,chy,0:3d_y_rotate mv,rot:3d_move mv,-30
3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv):3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv) 3d_move pv,1:cam_position o3d_x_position(mv),sin(bh/6.28)+chy,o3d_z_position(mv):point_position o3d_x_position(pv),phy,o3d_z_position(pv)
caption 0,str$(wrap_value(rot))+"°"+str$(bh) end_sub
sub scene() dim_local bx,by,bz,ox,oz,imm full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,200 font_name 0,"Consolas":font_size 0,40:font_bold 0 print_locate (width(0)/2)-(text_width("PATIENTEZ! MISE EN PLACE DE LA SCÈNE",0)/2),height(0)/3 print "PATIENTEZ! MISE EN PLACE DE LA SCÈNE"
' sol de notre scene 3d_plane 1:3d_scale 1,40,40,1:3d_u_tile 1,200:3d_v_tile 1,200:3d_x_rotate 1,90:3d_y_position 1,0:3d_load_texture 1,rep$+"herbe.jpg" 3d_plane 2:3d_scale 2,2.5,2.5,1:3d_u_tile 2,5:3d_v_tile 2,5:3d_x_rotate 2,90:3d_y_position 2,0.1:3d_load_texture 2,rep$+"beton.jpg" ' algorithme de création des immeubles ox=10:oz=10 for bz=-1*oz to oz step 2 for bx=-1*ox to ox imm=int(rnd(1)*11) if imm=7 by=2.25:3d_box number_3d_objects+1,1,by*2,1 3d_position number_3d_objects,bx,by,bz:3d_load_texture number_3d_objects,rep$+"imm7.jpg" end_if if imm=6 by=3:3d_box number_3d_objects+1,1,by*2,1 3d_position number_3d_objects,bx,by,bz:3d_load_texture number_3d_objects,rep$+"imm6.jpg" end_if if imm=5 by=3:3d_box number_3d_objects+1,1,by*2,1 3d_position number_3d_objects,bx,by,bz:3d_load_texture number_3d_objects,rep$+"imm5.jpg" end_if if imm=4 by=2:3d_box number_3d_objects+1,1,by*2,1 3d_position number_3d_objects,bx,by,bz:3d_load_texture number_3d_objects,rep$+"imm4.jpg" end_if if imm=3 by=1.5:3d_box number_3d_objects+1,1,by*2,1 3d_position number_3d_objects,bx,by,bz:3d_load_texture number_3d_objects,rep$+"imm3.jpg" end_if if imm=2 by=1.5:3d_box number_3d_objects+1,1,by*2,1 3d_position number_3d_objects,bx,by,bz:3d_load_texture number_3d_objects,rep$+"imm2.jpg" end_if if imm=1 by=2:3d_box number_3d_objects+1,1,by*2,1 3d_position number_3d_objects,bx,by,bz:3d_load_texture number_3d_objects,rep$+"imm1.jpg" end_if next bx next bz
3d_cube 1000,1:3d_y_rotate 1000,rot:3d_move 1000,-30:3d_hide 1000:3d_mesh 1001
show 1 end_sub
t1: if key_down_code=27 then esc=1 if key_down_code=37 then tfg=1 if key_down_code=38 then tfh=1 if key_down_code=39 then tfd=1 if key_down_code=40 then tfb=1 if key_down_code=66 then tcb=1 if key_down_code=72 then tch=1 if key_down_code=101 then pn5=1 return t2: if key_down_code=27 then esc=0 if key_down_code=37 then tfg=0 if key_down_code=38 then tfh=0 if key_down_code=39 then tfd=0 if key_down_code=40 then tfb=0 if key_down_code=66 then tcb=0 if key_down_code=72 then tch=0 if key_down_code=101 then pn5=0 return
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Jeu 14 Mar 2013 - 15:53 | |
| Merci Bignono | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Ven 22 Mar 2013 - 1:24 | |
| Hum, j'ai ajouté les collision, mais je pense que tu peux optimiser ça Bignono. Ca merdouille par moment au niveau de la gestion de la collision (pas Panoramic, mais le programme que j'ai modifié) - Code:
-
' ******************************************************************************** ' ******************************* COMMANDES CLAVIER ****************************** ' ******************************************************************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:.... CASE 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> PIVOTER À GAUCHE:....... CASE 37 * dim tfh,ctfh : ctfh=38 : ' * FLÈCHE HAUTE ==> AVANCER:................. CASE 38 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> PIVOTER À DROITE:....... CASE 39 * dim tfb,ctfb : ctfb=40 : ' * FLÈCHE BASSE ==> RECULER:................. CASE 40 * dim tcb,ctcb : ctcb=66 : ' * TOUCHE "B" ==> REGARDER VERS LE BAS:...... CASE 66 * dim tch,ctch : ctch=72 : ' * TOUCHE "H" ==> REGARDER VERS LE HAUT:..... CASE 72 * dim pn5,cpn5 : cpn5=101: ' * TOUCHE "5" ==> RETOUR AU POINT D'ORIGINE:. CASE 101 * ' ********************************************************************************
dim rep$,rot,chy,phy,bh,test,i:rot=180:chy=0.7:phy=0.7:rep$="C:\Panoramic-Init\sources\3D_ville\" label t1,t2,bouge
on_key_down 0,t1 on_key_up 0,t2
scene()
timer 200:timer_interval 200,1:on_timer 200,bouge end
bouge: timer_off 200 deplace() timer_on 200 return
sub deplace() dim_local vrot,vd,mv,pv vrot=1:vd=0.05:mv=1000:pv=1001 if esc=1 then terminate if tfg=1 then rot=rot+vrot:3d_y_rotate mv,rot: if scancode<>ctfg then tfg=0 if tfd=1 then rot=rot-vrot:3d_y_rotate mv,rot: if scancode<>ctfd then tfd=0 if tfh=1 then 3d_move mv,vd : if scancode<>ctfh then tfh=0 if tfb=1 then 3d_move mv,vd-(2*vd): if scancode<>ctfb then tfb=0 if tcb=1 then bh=bh+.2:if bh> 4 then bh= 4 : if scancode<>ctcb then tcb=0 if tch=1 then bh=bh-.2:if bh<-4 then bh=-4 : if scancode<>ctch then tch=0 if pn5=1 then bh=0:rot=180:chy=0.75:phy=0.75:3d_position mv,0,chy,0:3d_y_rotate mv,rot:3d_move mv,-30: pn5=0
test=0 for i = 3 to (number_3d_objects - 2) if O3D_collision(1000,i)=1 then test = 1 next i if test = 0 3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv):3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv) 3d_move pv,1:cam_position o3d_x_position(mv),sin(bh/6.28)+chy,o3d_z_position(mv):point_position o3d_x_position(pv),phy,o3d_z_position(pv) caption 0,str$(wrap_value(rot))+"°"+str$(bh) else if tfh=1 then 3d_move mv,vd-(2*vd) :else: 3d_move mv,vd end_if end_sub
sub scene() dim_local bx,by,bz,ox,oz,imm full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,200 font_name 0,"Consolas":font_size 0,40:font_bold 0 print_locate (width(0)/2)-(text_width("PATIENTEZ! MISE EN PLACE DE LA SCÈNE",0)/2),height(0)/3 print "PATIENTEZ! MISE EN PLACE DE LA SCÈNE"
' sol de notre scene 3d_plane 1:3d_scale 1,40,40,1:3d_u_tile 1,200:3d_v_tile 1,200:3d_x_rotate 1,90:3d_y_position 1,0:3d_load_texture 1,rep$+"herbe.jpg" 3d_plane 2:3d_scale 2,2.5,2.5,1:3d_u_tile 2,5:3d_v_tile 2,5:3d_x_rotate 2,90:3d_y_position 2,0.1:3d_load_texture 2,rep$+"beton.jpg"
' algorithme de création des immeubles ox=10:oz=10 for bz=-1*oz to oz step 2 for bx=-1*ox to ox imm=int(rnd(1)*11) if imm=7 then by=2.5 if imm=6 or imm=5 then by=3 if imm=4 or imm=1 then by=2 if imm=3 or imm=2 then by=1.5 if imm>0 and imm<8 3d_box number_3d_objects+1,1,by*2,1 3d_load_texture number_3d_objects,rep$+"imm"+str$(imm)+".jpg" 3d_position number_3d_objects,bx,by,bz : 3d_collision_as_cube number_3d_objects end_if next bx next bz
3d_cube 1000,1:3d_y_rotate 1000,rot:3d_move 1000,-30:3d_hide 1000:3d_mesh 1001 3d_collision_as_cube 1000
show 1 end_sub
t1: if key_down_code=cesc then esc=1 if key_down_code=ctfg then tfg=1 if key_down_code=ctfh then tfh=1 if key_down_code=ctfd then tfd=1 if key_down_code=ctfb then tfb=1 if key_down_code=ctcb then tcb=1 if key_down_code=ctch then tch=1 if key_down_code=cpn5 then pn5=1 return t2: if key_down_code=cesc then esc=0 if key_down_code=ctfg then tfg=0 if key_down_code=ctfh then tfh=0 if key_down_code=ctfd then tfd=0 if key_down_code=ctfb then tfb=0 if key_down_code=ctcb then tcb=0 if key_down_code=ctch then tch=0 if key_down_code=cpn5 then pn5=0 return | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Créer un peu de 3d... Ven 22 Mar 2013 - 9:04 | |
| Bonjour Jicehel J'ai regardé les collisions et le problème, c'est que l'on résonne toujours en 2d et jamais en 3d. On avance, et dès qu'on rencontre un obstacle, on dit au cube moteur de reculer! Mais on oublie aussi que les cotés gauche et droit ainsi que l'arrière du cube peuvent être en collision aussi! Il faut donc traiter les mouvements arrières et de pivots aussi en conséquences! donc 1ère modif: - Code:
-
if test = 0 3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv):3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv) 3d_move pv,1:cam_position o3d_x_position(mv),sin(bh/6.28)+chy,o3d_z_position(mv):point_position o3d_x_position(pv),phy,o3d_z_position(pv) caption 0,str$(wrap_value(rot))+"°"+str$(bh) else if tfh=1 then 3d_move mv,vd-(2*vd) if tfg=1 then rot=rot-vrot:3d_y_rotate mv,rot if tfd=1 then rot=rot+vrot:3d_y_rotate mv,rot if tfb=1 then 3d_move mv,vd end_if
L'autre problème, c'est que tous les immeubles, font 1 de large, et 1 de profondeur, "3d_box number_3d_objects+1, 1,by*2, 1" comme le cube moteur: "3d_cube 1000,1" ce qui fait un cube de 1 de large, 1 de haut et 1 de profondeur! Donc en conséquences, ton véhicule moteur ne peut jamais passer entre 2 immeubles rapprochés, puisque le passage est égale à 1 de large! Si le passage est de 2 emplacemments sans immeubles, pas de problème il passe. Tu comprends? Donc il faut réduire la grosseur de ton véhicule moteur pour que ça fonctionne! 3d_scale fait ça très bien! donc 2ème modif: - Code:
-
3d_cube 1000,1:3d_scale 1000,0.25,0.75,0.75:3d_y_rotate 1000,rot:3d_move 1000,-30:3d_hide 1000:3d_mesh 1001 En espérant t'avoir aidé... A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Ven 22 Mar 2013 - 10:50 | |
| Bien sûr Bignono. Je pense que la visite de la ville est plus sympa maintenant que l'on ne passe plus à travers les immeubles Bon en plus c'est directement applicable pour un donjon texturé avec des murs différents en modifiants on peut avoir plus de 7 types de murs donc, on peut mettre des torches, des tableaux, différents type de pierres ou d'interrupteurs. Le seul truc c'est qu'il vaut mieux générer les labyrinthe à la main pour qu'un seul interrupteur soit visible et encadré de murs standards. Mais comme ça on peut vite faire des niveaux assez jolis sans ce prendre la tête | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Créer un peu de 3d... Ven 22 Mar 2013 - 21:31 | |
| J'ai testé avec tes recommandations et ça marche plutôt bien. J'ai légèrement modifié pour éviter la vision X (vue à travers les murs) mais on a quand même souvent cet effet lors des collisions. Tu préconiserais quoi Bignono comme solution simple pour ne plus avoir de super pouvoirs en visitant la ville ? - Code:
-
' ******************************************************************************** ' ******************************* COMMANDES CLAVIER ****************************** ' ******************************************************************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:.... CASE 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> PIVOTER À GAUCHE:....... CASE 37 * dim tfh,ctfh : ctfh=38 : ' * FLÈCHE HAUTE ==> AVANCER:................. CASE 38 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> PIVOTER À DROITE:....... CASE 39 * dim tfb,ctfb : ctfb=40 : ' * FLÈCHE BASSE ==> RECULER:................. CASE 40 * dim tcb,ctcb : ctcb=66 : ' * TOUCHE "B" ==> REGARDER VERS LE BAS:...... CASE 66 * dim tch,ctch : ctch=72 : ' * TOUCHE "H" ==> REGARDER VERS LE HAUT:..... CASE 72 * dim pn5,cpn5 : cpn5=101: ' * TOUCHE "5" ==> RETOUR AU POINT D'ORIGINE:. CASE 101 * ' ********************************************************************************
dim rep$,rot,chy,phy,bh,test,i:rot=180:chy=0.7:phy=0.7:rep$="C:\Panoramic-Init\sources\3D_ville\" label t1,t2,bouge
on_key_down 0,t1 on_key_up 0,t2
scene()
timer 200:timer_interval 200,1:on_timer 200,bouge end
bouge: timer_off 200 deplace() timer_on 200 return
sub deplace() dim_local vrot,vd,mv,pv vrot=1:vd=0.07:mv=1000:pv=1001 if esc=1 then terminate if tfg=1 then rot=rot+vrot:3d_y_rotate mv,rot: if scancode<>ctfg then tfg=0 if tfd=1 then rot=rot-vrot:3d_y_rotate mv,rot: if scancode<>ctfd then tfd=0 if tfh=1 then 3d_move mv,vd : if scancode<>ctfh then tfh=0 if tfb=1 then 3d_move mv,vd-(2*vd): if scancode<>ctfb then tfb=0 if tcb=1 then bh=bh+.2:if bh> 4 then bh= 4 : if scancode<>ctcb then tcb=0 if tch=1 then bh=bh-.2:if bh<-4 then bh=-4 : if scancode<>ctch then tch=0 if pn5=1 then bh=0:rot=180:chy=0.75:phy=0.75:3d_position mv,0,chy,0:3d_y_rotate mv,rot:3d_move mv,-30: pn5=0
test=0 for i = 3 to (number_3d_objects - 2) if O3D_collision(1000,i)=1 then test = 1 next i if test = 0 3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv):3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv) 3d_move pv,1:cam_position o3d_x_position(mv),sin(bh/6.28)+chy,o3d_z_position(mv):point_position o3d_x_position(pv),phy,o3d_z_position(pv) caption 0,str$(wrap_value(rot))+"°"+str$(bh) else if tfh=1 then 3d_move mv,vd-(3*vd) if tfg=1 then rot=rot-2*vrot:3d_y_rotate mv,rot if tfd=1 then rot=rot+2*vrot:3d_y_rotate mv,rot if tfb=1 then 3d_move mv,2*vd end_if end_sub
sub scene() dim_local bx,by,bz,ox,oz,imm full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,200 font_name 0,"Consolas":font_size 0,40:font_bold 0 print_locate (width(0)/2)-(text_width("PATIENTEZ! MISE EN PLACE DE LA SCÈNE",0)/2),height(0)/3 print "PATIENTEZ! MISE EN PLACE DE LA SCÈNE"
' sol de notre scene 3d_plane 1:3d_scale 1,40,40,1:3d_u_tile 1,200:3d_v_tile 1,200:3d_x_rotate 1,90:3d_y_position 1,0:3d_load_texture 1,rep$+"herbe.jpg" 3d_plane 2:3d_scale 2,2.5,2.5,1:3d_u_tile 2,5:3d_v_tile 2,5:3d_x_rotate 2,90:3d_y_position 2,0.1:3d_load_texture 2,rep$+"beton.jpg"
' algorithme de création des immeubles ox=10:oz=10 for bz=-1*oz to oz step 2 for bx=-1*ox to ox imm=int(rnd(1)*11) if imm=7 then by=2.5 if imm=6 or imm=5 then by=3 if imm=4 or imm=1 then by=2 if imm=3 or imm=2 then by=1.5 if imm>0 and imm<8 3d_box number_3d_objects+1,1,by*2,1 3d_load_texture number_3d_objects,rep$+"imm"+str$(imm)+".jpg" 3d_position number_3d_objects,bx,by,bz : 3d_collision_as_cube number_3d_objects end_if next bx next bz 3d_cube 1000,1:3d_scale 1000,0.2,0.5,0.5:3d_y_rotate 1000,rot:3d_move 1000,-30:3d_hide 1000:3d_mesh 1001 3d_collision_as_cube 1000
show 1 end_sub
t1: if key_down_code=cesc then esc=1 if key_down_code=ctfg then tfg=1 if key_down_code=ctfh then tfh=1 if key_down_code=ctfd then tfd=1 if key_down_code=ctfb then tfb=1 if key_down_code=ctcb then tcb=1 if key_down_code=ctch then tch=1 if key_down_code=cpn5 then pn5=1 return t2: if key_down_code=cesc then esc=0 if key_down_code=ctfg then tfg=0 if key_down_code=ctfh then tfh=0 if key_down_code=ctfd then tfd=0 if key_down_code=ctfb then tfb=0 if key_down_code=ctcb then tcb=0 if key_down_code=ctch then tch=0 if key_down_code=cpn5 then pn5=0 return | |
| | | Contenu sponsorisé
| Sujet: Re: Créer un peu de 3d... | |
| |
| | | | Créer un peu de 3d... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |