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 Hier à 23:55

» KGF_dll - nouvelles versions
par pascal10000 Hier à 17:27

» Mah-Jong européen new-look
par Minibug Mar 12 Déc 2017 - 22:31

» track_bar circulaire
par Klaus Mar 12 Déc 2017 - 13:54

» API Windows
par Klaus Mar 12 Déc 2017 - 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 | 
 

 Les nouvelles commandes caméra

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
bignono

avatar

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

MessageSujet: Les nouvelles commandes caméra   Lun 22 Avr 2013 - 0:20

J'ai essayé d'intégrer les nouvelles commandes CAM_ROLL, CAM_PITCH et CAM_TURN à mon module de déplacement et j'ai constaté qu'elles sont difficilement applicables parce que dans mon module de déplacement utilise la commande point_position et que la caméra est toujours dirigé vers ce point_position.
Les commandes que JACK a créées sont indépendantes de point_position et ça pose problème! Mais d'un autre coté, il ne pouvait pas faire autrement!
Donc dans le programme suivant, vous enlèverez l'apostrophe de la ligne de votre choix de 93 à 97 pour créer un ensemble d'objets 3d représentant une sorte de roue ou de disque.
Ensuite, grâce aux touches flèchées, au pavé numérique, vous pourrez vous déplacer.
Les case 68, 83, 88 et 90 (touches D,S,X,et Z) commandent cam_roll et cam_pitch. Si sur ces lignes vous enlevez le exit_sub, ces commandes n'agiront plus parce que le programme éxecutera les lignes 76 et 77 où la caméra se refixe sur le point_position.
Donc si vous restez appuyé sur les touches D, S, X ou Z vous verrez agir cam_roll et cam_pitch, mais dès que vous les relacherez, la caméra se recentrera directement sur point_position.
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 "D" ==> ROULIS CAMÉRA DROIT:.................... CASE 68  *
' * TOUCHE "H" ==> REGARDER VERS LE HAUT:.................. CASE 72  *
' * TOUCHE "S" ==> ROULIS CAMÉRA GAUCHE:................... CASE 83  *
' * TOUCHE "X" ==> LOOPING CAMÉRA ARRIÈRE:................. CASE 88  *
' * TOUCHE "Z" ==> LOOPING CAMÉRA AVANT:................... CASE 90  *
' ********************************************************************
' ************************** 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,m$:rot=180:chy=0:phy=0
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,j,k,mv,pv,x,z,a$,p$
vrot=1:vd=1:vhy=1:mv=1:pv=2
select scancode
  case 0:k=int(rnd(20)+20):for j=3 to number_3d_objects:3d_color j,(j/k)+k,abs(j/k-k),160:next j:' aucune touche enfoncée, on change la couleur des objets!
  case 27: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
  case 40:3d_move mv,vd-(2*vd)
  case 66:bh=bh+.2:if bh>11 then bh=11
  case 68:cam_roll vrot:exit_sub
  case 72:bh=bh-.2:if bh<-11 then bh=-11
  case 83:cam_roll vrot*-1:exit_sub
  case 88:cam_pitch vrot*-1:exit_sub
  case 90:cam_pitch vrot:exit_sub
  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)
  case 98:3d_move mv,vd-(2*vd)
  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)
  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))
  case 101:bh=0:rot=180:chy=0:phy=0:3d_position mv,0,chy,0:3d_y_rotate mv,rot:3d_move mv,-12
  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))
  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)
  case 104:3d_move mv,vd
  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)
  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)

x=o3d_x_position(mv):z=o3d_z_position(mv):p$="X= "+str$(int(x*100)/100)+"  Y= "+str$(int(chy*100)/100)+"  Z= "+str$(int(z*100)/100):a$="Angle= "+str$(wrap_value(rot))+"°"
caption 0,m$+"    "+p$+"  "+a$
end_sub

sub scene()
full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,0
3d_cube 1,1:3d_y_rotate 1,rot:3d_move 1,-12:3d_hide 1:3d_mesh 2
dim_local x,y,z,r,p,t,j  :r=10
for r=10 to -10 step -0.6
  for p=0.1 to 6.3 step 0.1
      x=r*sin(p)*cos(t)
      y=r*cos(p)
      z=r*sin(p)*sin(t)
      t=atn(z/x)
'      3d_cone number_3d_objects+1,1,0.5
'      3d_cone number_3d_objects+1,1,0.5:3d_x_rotate number_3d_objects,j:j=j+1
'      3d_cylinder number_3d_objects+1,2,0.5,05:3d_x_rotate number_3d_objects,45
      3d_sphere number_3d_objects+1,0.5
'      3d_torus number_3d_objects+1,1,0.5
      3d_position number_3d_objects,x,y,z
  next p
next r
show 1
m$="Nombre d'objets 3d: "+str$(number_3d_objects-2):caption 0,m$
end_sub
Ce qui me parait difficile, c'est de recalculer les coordonnées du point_position après un cam_roll ou un cam_pitch. Je ne sais pas si vous avez compris le problème.
A+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 542
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Les nouvelles commandes caméra   Lun 22 Avr 2013 - 21:35

bonsoir bignono
j'avais fait un test pour visualiser le monde depuit la cabine de mon robot
j'ai apliquer une equation de cercle avec pour centre la camera
je ne suis pas allez plus loin car je m'obstine a faire mon programme pedagogique et ce n'est pas ma prioritée
cela dit ça marche
mindstorm
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Les nouvelles commandes caméra   Mar 23 Avr 2013 - 13:06

Citation :
Ce qui me parait difficile, c'est de recalculer les coordonnées du point_position après un cam_roll ou un cam_pitch.
Pourquoi veux-tu recalculer les coordonnées du point visé pour faire ensuite un POINT_POSITION ?
Il te suffit d'annuler les commandes CAM_ROLL et CAM_PITCH par les mêmes commandes avec un angle inverse pour que la caméra vise à nouveau ce qu'elle visait.

Je ne comprends pas ton problème.
Peux-tu expliquer ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
bignono

avatar

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

MessageSujet: Re: Les nouvelles commandes caméra   Mar 23 Avr 2013 - 14:12

Bonjour JACK Smile
C'est parce que je veux faire un petit moteur 3d en utilisant entre autre CAM_TURN pour virer à gauche ou à droite et CAM_PITCH pour regarder en haut et en bas. Et je réserve CAM_ROLL pour des effets spéciaux.
Si le point_position suit le mouvement de caméra, alors là, on a un petit moteur 3d hyper léger et facile à utiliser avec les touches du clavier.
Regarde mon exemple:
Code:
dim vrot,z:vrot=1
scene()
while scancode <>27
if scancode=37 then cam_turn vrot
if scancode=39 then cam_turn vrot*-1
if scancode=38 then z=z+.1:cam_position 0,2,z:point_position 0,2,z+1
if scancode=40 then z=z-.1:cam_position 0,2,z:point_position 0,2,z+1
end_while
terminate

sub scene()
full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,200
cam_position 0,2,-1:point_position 0,2,0
3d_plane 3:3d_scale 3,40,40,1:3d_x_rotate 3,90:3d_y_position 3,0:3d_color 3,0,150,0
3d_box 4,8,3,1:3d_position 4,-8,1.5,-5:3d_y_rotate 4,90
3d_sphere 5,2:3d_position 5,8,0,-4:3d_color 5,255,0,0
3d_cone 6,10,4:3d_position 6,0,5,-50:3d_color 6,200,200,0
3d_cylinder 7,10,3,3:3d_position 7,0,5,52:3d_color 7,0,200,200
show 1
end_sub
si tu utilises les flèches gauche ou droite pour tourner dans un premier temps, pas de problème, mais quand tu appuies dans un second temps sur une touche flèche haute ou basse, tu es recentré automatiquement sur le point_position pour avancer ou reculer. Au lieu d'avoir le mouvement voulu à partir du dernier point visionné par la caméra.
Je ne sais pas si je me fais bien comprendre? Mais ce n'est pas grave si tu ne comprends pas, j'ai réussi à intégrer cam_pitch pour regarder en haut ou en bas dans mon module de déplacement.
A+ JACK Wink Wink 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: Les nouvelles commandes caméra   Mar 23 Avr 2013 - 14:17

Bien entendu, j'ai essayé de recalculer le point_position avec cosinus et sinus, mais dès qu'on est à 270° ça saute à 90° et ça repart, on ne voit jamais le cone.
Code:
dim rot,vrot,pi,rad:pi=4*atn(1):rad=pi/180:vrot=1
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()
select scancode
  case 27:terminate
  case 37:cam_turn vrot:rot=rot-vrot
  case 39:cam_turn vrot*-1:rot=rot+vrot
end_select
caption 0,rot
point_position cos(rad*rot),2,sin(rad*rot)
end_sub

sub scene()
full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,200
cam_position 0,2,-1:point_position 0,2,0
3d_plane 3:3d_scale 3,40,40,1:3d_x_rotate 3,90:3d_y_position 3,0:3d_color 3,0,150,0
3d_box 4,8,3,1:3d_position 4,-8,1.5,-5:3d_y_rotate 4,90
3d_sphere 5,2:3d_position 5,8,0,-4:3d_color 5,255,0,0
3d_cone 6,10,4:3d_position 6,0,5,-50:3d_color 6,200,200,0
3d_cylinder 7,10,3,3:3d_position 7,0,5,52:3d_color 7,0,200,200
show 1
end_sub

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: Les nouvelles commandes caméra   Mar 23 Avr 2013 - 14:31

Tu a essayé de faire un petit test du genre si angle > 180 alors angle =angle-360
et si angle < -180 alors angle=angle+360
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: Les nouvelles commandes caméra   Mar 23 Avr 2013 - 14:50

Bonjour Jicehel, Smile
Et oui! j'ai essayé, et c'est le même résultat!
Alors, à priori, ce qui marcherait, mais ya quand même un problème, Crying or Very sad c'est:
Citation :
point_position cos(rad*rot)-sin(rad*rot),2,sin(rad*rot)+cos(rad*rot)
A+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Les nouvelles commandes caméra   Mer 24 Avr 2013 - 20:06

Citation :
point_position cos(rad*rot)-sin(rad*rot),2,sin(rad*rot)+cos(rad*rot)

Quelle horreur !

En fait, il te manque une commande CAM_MOVE que je mets immédiatement en chantier. Cela t'évitera de recalculer les coordonnées du point visé, car le point visé par la caméra n'a rien à voir avec les mouvements de la caméra.
Puis j'écrirai un tutoriel avec des exemples sur les mouvements des objets 3D et de la caméra.

Voici un aperçu du tutoriel:

1 - les commandes de la famille 3D_POSITION, (c'est à dire 3D_POSITION, 3D_X_POSITION, 3D_Y_POSITION, 3D_Z_POSITION) servent à placer des objets dans l'espace, pour construire un décor, de la même façon qu'on place des objets système sur un conteneur avec TOP et LEFT.

2 - un objet 3D possède une direction de déplacement, et la commande 3D_MOVE fait avancer (ou reculer) un objet 3D d'un incrément dans sa direction de déplacement. En général, on utilise cette commande dans une boucle, car 3D_MOVE déplace l'objet d'un incrément élémentaire, et pour avoir un mouvement continu, il faut répéter la commande.

3 - on modifie la direction de déplacement d'un objet 3D par les commandes de la famille 3D_ROTATE, (c'est à dire 3D_ROTATE, 3D_X_ROTATE, 3D_Y_ROTATE, 3D_Z_ROTATE).

4 - Les commandes de la famille 3D_ROTATE servent donc à piloter un objet 3D lorsqu'on le déplace dans l'espace avec 3D_MOVE.

5 - un objet 3D peut se déplacer vers un autre objet 3D par la commande 3D_POINT_OBJECT, suivi d'une ou de plusieurs commandes 3D_MOVE.
La commande 3D_POINT_OBJECT modifie elle aussi la direction de déplacement d'un objet 3D.

6 - pour la caméra, c'est la même chose.
On la positionne initialement dans l'espace par les commandes de la famille CAM_POSITION, (c'est à dire CAM_POSITION, CAM_X_POSITION, CAM_Y_POSITION, CAM_Z_POSITION)
On peut éventuellement lui faire viser un point par les commandes de la famille POINT_POSITION, (c'est à dire POINT_POSITION, POINT_X_POSITION, POINT_Y_POSITION, POINT_Z_POSITION)
Mais la caméra a elle aussi une direction de déplacement propre et on déplace la caméra par la commande CAM_MOVE qui la fait avancer (ou reculer) d'un incrément dans sa direction de déplacement.
On peut modifier cette direction de déplacement de la caméra par les commandes CAM_TURN, CAM_PITCH et CAM_ROLL.


En résumé:
Les commandes de la famille 3D_ROTATE servent à piloter un objet 3D lorsqu'on le déplace dans l'espace avec 3D_MOVE.
Les commandes CAM_TURN, CAM_PITCH et CAM_ROLL servent à piloter la caméra lorsqu'on la déplace dans l'espace avec CAM_MOVE.


Dernière édition par Jack le Mer 24 Avr 2013 - 20:38, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
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: Les nouvelles commandes caméra   Mer 24 Avr 2013 - 20:30

Merci Jack.

Si ce n’est trop te demander et si tu as du temps :
Un programme exemple complet codé par tes soins (sur la 3D) ferait bien des heureux !

De toute façon mille mercis pour ce que tu fais pour PANORAMIC et pour la communauté panoramicienne.
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: Les nouvelles commandes caméra   Mer 24 Avr 2013 - 21:31

C'est vrai qu'un nouveau programme de Jack ça nous ferait plaisir Wink
Avec les nouvelles commandes 3D, une petite démo, un jeu, un simulateur, une balade dans un monde 3D ou je ne sais quoi fait selon la façon que tu le conçoit serait intéressant. De toute façon tu sais bien que comme je disais à Klaus, nous ne seront jamais en manque d'idées et en demanderons toujours plus.
En tout cas, ton nouveau tuto fera du bien et si tu nous faits pas de programme toi même nous devront nous rabattre sur ce que l'esprit tortueux de Bignono en fera Very Happy (Je plaisante Bignono, j'adore tes programme comme tu le sais)
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: Les nouvelles commandes caméra   Jeu 25 Avr 2013 - 8:15

Bonjour à tous Smile , à JACK Smile
Désolé JACK pour ce que j'ai écrit "point_position cos(rad*rot)-sin(rad*rot),2,sin(rad*rot)+cos(rad*rot)", mais ça fait réagir afin de faire avancer les choses. En tout cas une nouvelle commande CAM_MOVE serait génial et répondrait à mon besoin comme à celui de tous ceux qui son adepte de la 3d.
Là, je saute de joie! bounce bounce bounce
A+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Les nouvelles commandes caméra   Ven 26 Avr 2013 - 20:19

Une nouvelle version instantanée introduit la commande CAM_MOVE

Voici ton exemple avec cette commande:
Code:
dim vrot,z:vrot=1
scene()
while scancode <>27
if scancode=37 then cam_turn vrot*-1
if scancode=39 then cam_turn vrot
if scancode=38 then cam_move 0.1
if scancode=40 then cam_move -0.1
end_while
terminate

sub scene()
full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,200
cam_position 0,2,-1:point_position 0,2,0
3d_plane 3:3d_scale 3,40,40,1:3d_x_rotate 3,90:3d_y_position 3,0:3d_color 3,0,150,0
3d_box 4,8,3,1:3d_position 4,-8,1.5,-5:3d_y_rotate 4,90
3d_sphere 5,2:3d_position 5,8,0,-4:3d_color 5,255,0,0
3d_cone 6,10,4:3d_position 6,0,5,-50:3d_color 6,200,200,0
3d_cylinder 7,10,3,3:3d_position 7,0,5,52:3d_color 7,0,200,200
show 1
end_sub

La commande répond à ton problème, mais dans cet exemple, les mouvements de la caméra sont trop saccadés.
En fait, les touches fléchées doivent agir sur la vitesse et non sur la position.

Je prépare des tutoriels sur le pilotage des objets 3D et de la caméra, qui expliqueront comment "lisser" les mouvements et qui expliqueront la technique du "camera follow", c'est à dire comment donner de l'inertie aux mouvements de la caméra ou d'un objet 3D.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
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: Les nouvelles commandes caméra   Ven 26 Avr 2013 - 20:39

Salut Jack

Dans l’exemple que tu donnes, si on appuie sur la flèche haute ou basse, il y a une erreur : Not correct expression. Line 7 (ou Line 6)

J'utilise la version V0.9.25i1 du 20/04/2013


Dernière édition par papydall le Ven 26 Avr 2013 - 20:44, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Les nouvelles commandes caméra   Ven 26 Avr 2013 - 20:42

Je viens de télécharger la version instantanée pour la tester, et l'exemple s'exécute sans problème.
As-tu bien la version 0.9.25i2 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
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: Les nouvelles commandes caméra   Ven 26 Avr 2013 - 20:45

Désolé Jack, J'utilise la version V0.9.25i1 du 20/04/2013
Je vais télécharger la nouvelle version

EDIT:
C'est fait et ça marche, merci.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
bignono

avatar

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

MessageSujet: Re: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 10:16

Bon cette fois-ci on a vraiment un petit moteur 3d hyper léger, sympa et facile d'emploi! J'ai repris le même programme d'essai et j'ai intégré toutes les nouvelles commandes. Je pense que l'on pourra bientôt piloter une voiture, un train, un bateau, un hélico, un avion, ... etc avec ces déplacements de la caméra, tout est envisageable maintenant. Laughing
Il ne me reste plus qu'à attendre ton tutoriel sur les mouvements d'inertie de la caméra JACK, et là, je crois que l'on va pouvoir réaliser de supers programmes en 3d.
J'espère que dans l'avenir tu résoudras le problème que tu as avec les animations des fichiers md2.
Code:
' ********************************************************************
' ************************* COMMANDES CLAVIER ************************
' ********************************************************************
' * TOUCHE ESC ==> MET FIN AU PROGRAMME:................... CASE 27  *

' * 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" ==> LOOPING VERS LE BAS:.................... CASE 66  *
' * TOUCHE "H" ==> LOOPING VERS LE HAUT:................... CASE 72  *
' * TOUCHE "V" ==> TONNEAUX À GAUCHE:...................... CASE 86  *
' * TOUCHE "N" ==> TONNEAUX À DROITE:...................... CASE 78  *
' * TOUCHE "O" ==> RETOUR À L'ORIGINE:..................... CASE 79  *
' * TOUCHE "C" ==> POINTER VERS LE CONE:................... CASE 67  *
' * TOUCHE "S" ==> POINTER VERS LA SPHÈRE:................. CASE 83  *
' ********************************************************************
dim vrot,z:vrot=0.5
scene()
while scancode <>27
if scancode=86 then cam_roll vrot*-1    :' Faire des tonneaux en partant sur la gauche
if scancode=78 then cam_roll vrot      :' Faire des tonneaux en partant sur la droite
if scancode=37 then cam_turn vrot*-1    :' Virer sur la gauche
if scancode=39 then cam_turn vrot      :' Virer sur la droite
if scancode=38 then cam_move 0.05        :' Avancer
if scancode=40 then cam_move -0.05      :' Reculer
if scancode=66 then cam_pitch vrot*-1  :' Faire un looping en piquant vers le sol
if scancode=72 then cam_pitch vrot      :' Faire un looping en grimpant vers le ciel
if scancode=79 then cam_position 0,2,-1 :' Revenir au point d'origine de la caméra (cela équivaut aussi à: point_object 7)
if scancode=67 then point_object 6      :' Pointer la caméra sur le cone jaune
if scancode=83 then point_object 5      :' Pointer la caméra sur la 1/2 sphère rouge
end_while
terminate

sub scene()
full_space 0:scene3d 1:hide 1:full_space 1:color 1,0,0,200
cam_position 0,2,-1:point_position 0,2,0
3d_plane 3:3d_scale 3,40,40,1:3d_x_rotate 3,90:3d_y_position 3,0:3d_color 3,0,150,0
3d_box 4,8,3,1:3d_position 4,-8,1.5,-5:3d_y_rotate 4,90
3d_sphere 5,2:3d_position 5,8,0,-4:3d_color 5,255,0,0
3d_cone 6,10,4:3d_position 6,0,5,-50:3d_color 6,200,200,0
3d_cylinder 7,10,3,3:3d_position 7,0,5,52:3d_color 7,0,200,200
show 1
end_sub
A+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 15:15

Voici un petit exemple de pilotage d'un objet 3D (juste un cube rouge) avec un suivi par la caméra.
Ce type de suivi porte le nom de "camera follow".
Tu peux noter que cet exemple n'utilise aucune des nouvelles commandes et qu'il peut être exécuté avec toute version de Panoramic depuis la V 0.9.10 de juin 2008.

Code:
' =====================================================================
' tutoriel :
' - pilotage d'un véhicule suivi par une caméra
' - technique de "camera follow" pour adoucir le mouvement de la caméra
' scénario:
' 1 - un véhicule (cube rouge) est immobile sur un quadrillage (sol)
' 2 - la caméra va se positionner derière le véhicule
' 3 - le véhicule devient pilotable avec les touches fléchées
'    la caméra suit le véhicule à distance et avec une inertie
' =====================================================================

' variables pour tracer le quadrillage
dim maxi,nb_case,taille_case,i

' variables pour positionner le véhicule et la caméra
dim vehicx,vehicy,vehicz
dim cam_posx,cam_posy,cam_posz
dim posx_camera_cible,posy_camera_cible,posz_camera_cible
dim deltax,deltay,deltaz,p

' variables pour piloter le véhicule et la caméra
dim vitesse,direction,angle

 ' label la pour boucle infinie du jeu
label loop

' taille maximale du quadrillage
maxi=800

' nombre de cases sur X ou Y
nb_case=100

' taille d'une case
taille_case=int(maxi/nb_case)

' création de l'univers 3D
full_space 0:scene3D 1:full_space 1:color 1,0,0,0

' ===========================================================
' on trace un quadrillage dans le plan XZ pour simuler le sol
' rappel : le plan XZ est un plan horizontal, c'est le "sol"
'          les plans XY et YZ sont verticaux
' ===========================================================

' tracé des lignes parallèles à l'axe X
for i=0 to nb_case
    3d_line i+3,                  0, 0, i*taille_case
    3d_line i+3, nb_case*taille_case, 0, i*taille_case
    3d_line_width i+3,3
    3d_color i+3,255,255,0
next i

' tracé des lignes parallèles à l'axe Z
for i=0 to nb_case
    3d_line i+nb_case+4, i*taille_case, 0, 0
    3d_line i+nb_case+4, i*taille_case, 0, nb_case*taille_case
    3d_line_width i+nb_case+4,3
    3d_color i+nb_case+4,255,255,0
next i

' création du véhicule
3d_cube 1,8:3d_color 1,255,0,0

' position initiale du véhicule
vehicx=nb_case*taille_case/2
vehicy=4
vehicz=nb_case*taille_case/6
3d_x_position 1,vehicx
3d_y_position 1,vehicy
3d_z_position 1,vehicz

' création du décompte pour le départ
3d_text 2,"9"
3d_y_rotate 2,180
3d_scale 2,4,4,4
3d_color 2,50,50,255

' position initiale du décompte
3d_x_position 2,vehicx
3d_y_position 2,vehicy+5
3d_z_position 2,vehicz-5

' position initiale de la caméra
cam_posx=vehicx
cam_posy=500
cam_posz=vehicy
cam_position cam_posx, cam_posy, cam_posz

' position de la lumière
light_position vehicx, vehicy-20, vehicz-20

' ===================================================
' technique de lissage de mouvement: "camera follow"
' sur 80 trames, la caméra se positionne "doucement"
' derrière le véhicule (cube rouge)
' ===================================================

' la caméra va pointer en permanence sur le véhicule
point_position vehicx, vehicy, vehicz

' point à atteindre par la caméra
posx_camera_cible=vehicx
posy_camera_cible=vehicy+5:  '  5  = un peu au dessus
posz_camera_cible=vehicz-15: ' -15 = derrière

' vitesse de lissage
p=0.08

for i=1 to 80
 ' delta=cible-actuel
 deltax=posx_camera_cible-cam_posx
 deltay=posy_camera_cible-cam_posy
 deltaz=posz_camera_cible-cam_posz
 ' actuel=actuel+delta*p
 cam_posx=cam_posx+deltax*p
 cam_posy=cam_posy+deltay*p
 cam_posz=cam_posz+deltaz*p
 cam_position cam_posx, cam_posy, cam_posz
 3d_text_change 2,str$(8-i/10)
 wait 50
next i

3d_text_change 2,"GO"
caption 0,"*** Arrêt par la touche ESPACE ***"
wait 500:3d_delete 2

' ========================================================================
' pilotage en douceur du véhicule:
' la flèche du haut agit sur la vitesse et non sur la position.
' c'est la pédale d'accélérateur
' la flèche du bas est la pédale de frein
'
' il y a des frottements: si on lache l'accélérateur, le véhicule ralentit.
'
' la caméra suit le véhicule avec une inertie, comme si elle était attachée
' au véhicule par un élastique: c'est encore la technique "camera follow".
' ========================================================================

direction=0
vitesse=0

' vitesse de lissage
p=0.1

loop:
 if scancode=38:' flèche haute
  vitesse=vitesse+.2
 end_if

 if scancode=40:' flèche basse
  vitesse=vitesse-.2
 end_if

 if scancode=39:' flèche droite
  direction=direction-2
  3d_y_rotate 1,direction
 end_if

 if scancode=37:' flèche gauche
  direction=direction+2
  3d_y_rotate 1,direction
  end_if

 if scancode=32 then terminate:' espace

 ' déplacement du véhicule
 3d_move 1,vitesse
 
 ' ==========================================
 ' ici, il n'y a plus que 2 dimensions X et Z
 ' car on se déplace dans le plan XZ
 ' on ne calcule donc plus les positions sur Y
  ' ==========================================
 
 ' point à atteindre par la caméra
 angle=direction*.01745328
 posx_camera_cible=o3d_x_position(1)-15*sin(angle)
 posz_camera_cible=o3d_z_position(1)-15*cos(angle)
 ' delta=cible-actuel
 deltax=posx_camera_cible-cam_posx
 deltaz=posz_camera_cible-cam_posz
 ' actuel=actuel+delta*p
 cam_posx=cam_posx+deltax*p
 cam_posz=cam_posz+deltaz*p
 cam_x_position cam_posx
 cam_z_position cam_posz
 point_x_position o3d_x_position(1)
 point_z_position o3d_z_position(1)

 ' simulation d'une friction: la vitesse diminue
 vitesse=vitesse-.08
 if vitesse<0 then vitesse=0

 wait 100
goto loop
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
Jicehel

avatar

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

MessageSujet: Re: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 15:28

Excellent Wink

C'est cool de voir tes programmes aussi Jack sur le forum. Merci pour ce source
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 15:33

En ajoutant quelques lignes, pour piloter le véhicule sur la composante Y, on peut alors piloter un avion.
Si on lui permet ensuite de tirer, on a un début de "flight simulator".
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
Jicehel

avatar

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

MessageSujet: Re: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 15:42

ou un X-Wing dans l'espace (moins de décors donc plus simple pour commencer, je pense).
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: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 15:59

Merci JACK pour ce petit tutoriel. Very Happy Very Happy Very Happy
Là je pars quelques jours en province, à mon retour, j'analyserais ce programme en détail. A première vue ça parait hyper simple.
A bientôt Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6018
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 19:30

Tout ça en Panoramic, c'est assez impressionnant en effet !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 27 Avr 2013 - 22:40

Houaou !!!! tout çà en si peu de lignes !!!

Bravo Jack !!!
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: Les nouvelles commandes caméra   Sam 27 Avr 2013 - 22:43

Bignono, si tu adaptes, je te conseille d'allier les mouvements de la souris pour la direction de la vue et le clavier pour avancer, reculer, déplacement latéral, ça fait moins de touches à retenir. Enfin c'est mon opinion...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

Nombre de messages : 542
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Les nouvelles commandes caméra   Lun 29 Avr 2013 - 21:31

bonsoir a tous
Là Là c'est la quatrieme dimention
et oui la quatrieme dimention c'est le temps Suspect
Jack nous distile un programme super en un rien de temps et avec des commandes simples.
CQFD
j'en veux encore
Mindstorm
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Les nouvelles commandes caméra   

Revenir en haut Aller en bas
 
Les nouvelles commandes caméra
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Jeu flash - commandes avec le clavier
» Problème - Win32 - Commandes cmd.exe
» désolé de nepas donner de mes nouvelles
» Les nouvelles en bref
» Graph Commandes

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: