FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Klaus Aujourd'hui à 19:48

» KGF_dll - nouvelles versions
par pascal10000 Aujourd'hui à 17:27

» Mah-Jong européen new-look
par Minibug Hier à 22:31

» track_bar circulaire
par Klaus Hier à 13:54

» API Windows
par Klaus Hier à 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

» Ecouter la radio fm sur votre pc
par pascal10000 Sam 9 Déc 2017 - 3:42

» anomalie
par Klaus Sam 9 Déc 2017 - 3:21

» hommage
par Jicehel Ven 8 Déc 2017 - 11:29

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 8 Déc 2017 - 10:43

» carte son
par Klaus Ven 8 Déc 2017 - 2:37

» mise a jour calculatrice
par joeeee2017 Mer 6 Déc 2017 - 22:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Créer un peu de 3d...

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4
AuteurMessage
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Créer un peu de 3d...   Mer 24 Oct 2012 - 0: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

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Mer 24 Oct 2012 - 1: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Créer un peu de 3d...   Mer 24 Oct 2012 - 1: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Mer 24 Oct 2012 - 2: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Créer un peu de 3d...   Sam 10 Nov 2012 - 19:18

Hello les Panoramiciens, Laughing
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+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Créer un peu de 3d...   Sam 10 Nov 2012 - 22:24

"Le cinema par Bignono".
C’est intéressant. Je vais regarder de plus près !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

Nombre de messages : 5086
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Créer un peu de 3d...   Dim 11 Nov 2012 - 19: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 What a Face
Un conseil te devrais huiler la porte..... Wink

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Lun 12 Nov 2012 - 1: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Créer un peu de 3d...   Jeu 10 Jan 2013 - 2:05

Bonsoir à tous, Smile
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+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Jeu 10 Jan 2013 - 4:13

Joli Bignono. "Plus qu'à" gérer les collisions avec les objets pour plus que l'on traverse les murs ... Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Créer un peu de 3d...   Jeu 10 Jan 2013 - 12:09

Bonjour Jicehel, Smile et à tous les panoramiciens, Smile
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+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Jeu 10 Jan 2013 - 12: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é Wink

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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Créer un peu de 3d...   Jeu 14 Mar 2013 - 16:46

Bonjour à tous, Smile
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+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Jeu 14 Mar 2013 - 17:53

Merci Bignono Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Ven 22 Mar 2013 - 3: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Créer un peu de 3d...   Ven 22 Mar 2013 - 11:04

Bonjour Jicehel Smile
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é... Laughing Cool Very Happy
A+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Ven 22 Mar 2013 - 12: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 Wink
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 Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Créer un peu de 3d...   Ven 22 Mar 2013 - 23: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Créer un peu de 3d...   

Revenir en haut Aller en bas
 
Créer un peu de 3d...
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 4 sur 4Aller à la page : Précédent  1, 2, 3, 4

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: