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 |
|
|
| Les nouvelles commandes caméra | |
| | |
Auteur | Message |
---|
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Les nouvelles commandes caméra Dim 21 Avr 2013 - 23: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+ | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Les nouvelles commandes caméra Lun 22 Avr 2013 - 20: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 | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Les nouvelles commandes caméra Mar 23 Avr 2013 - 12: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 ? | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Les nouvelles commandes caméra Mar 23 Avr 2013 - 13:12 | |
| Bonjour JACK 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 | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Les nouvelles commandes caméra Mar 23 Avr 2013 - 13: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
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Les nouvelles commandes caméra Mar 23 Avr 2013 - 13: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 | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Les nouvelles commandes caméra Mar 23 Avr 2013 - 13:50 | |
| Bonjour Jicehel, 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, c'est: - Citation :
- point_position cos(rad*rot)-sin(rad*rot),2,sin(rad*rot)+cos(rad*rot)
A+ | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Les nouvelles commandes caméra Mer 24 Avr 2013 - 19: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 - 19:38, édité 2 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Les nouvelles commandes caméra Mer 24 Avr 2013 - 19: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.
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Les nouvelles commandes caméra Mer 24 Avr 2013 - 20:31 | |
| C'est vrai qu'un nouveau programme de Jack ça nous ferait plaisir 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 (Je plaisante Bignono, j'adore tes programme comme tu le sais) | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Les nouvelles commandes caméra Jeu 25 Avr 2013 - 7:15 | |
| | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Les nouvelles commandes caméra Ven 26 Avr 2013 - 19:19 | |
| Une nouvelle version instantanée introduit la commande CAM_MOVEVoici 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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Les nouvelles commandes caméra Ven 26 Avr 2013 - 19: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 - 19:44, édité 1 fois | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Les nouvelles commandes caméra Ven 26 Avr 2013 - 19: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 ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Les nouvelles commandes caméra Ven 26 Avr 2013 - 19: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.
| |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 9: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. 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+ | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 14: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
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 14:28 | |
| Excellent C'est cool de voir tes programmes aussi Jack sur le forum. Merci pour ce source | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 14: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". | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 14:42 | |
| ou un X-Wing dans l'espace (moins de décors donc plus simple pour commencer, je pense). | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 14:59 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 18:30 | |
| Tout ça en Panoramic, c'est assez impressionnant en effet ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 27 Avr 2013 - 21:40 | |
| Houaou !!!! tout çà en si peu de lignes !!!
Bravo Jack !!! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Les nouvelles commandes caméra Sam 27 Avr 2013 - 21: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... | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Les nouvelles commandes caméra Lun 29 Avr 2013 - 20:31 | |
| bonsoir a tous Là Là c'est la quatrieme dimention et oui la quatrieme dimention c'est le temps Jack nous distile un programme super en un rien de temps et avec des commandes simples. CQFD j'en veux encore Mindstorm | |
| | | Contenu sponsorisé
| Sujet: Re: Les nouvelles commandes caméra | |
| |
| | | | Les nouvelles commandes caméra | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |