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 |
|
|
| Vue subjective (3D) | |
| | Auteur | Message |
---|
Sefiria
Nombre de messages : 25 Age : 32 Localisation : Nîmes (30), France Date d'inscription : 05/03/2013
| Sujet: Vue subjective (3D) Mar 5 Mar 2013 - 4:52 | |
| . Bon, voici mon véritable premier post (hors présentation donc): Ça pourrait paraître idiot. J'aimerai créer une vision subjective dans un scene3D. Jusque là rien de troublant. Sauf qu'à partir du moment où je tente de tourner avec mon "personnage" (nous dirons), là je bloque ! J'ai tenté d'utiliser le cercle trigonométrique, en vain, puis j'ai fini par tenter de le faire à ma sauce, toujours en vain. Le problème vient du fait du déplacement de Point_Position sur les axes X et Z. Voici un squelette de code, il n'y a plus qu'à entrer la formule magique (tout en bas du programme) permettant de faire tourner le personnage sur lui-même, en commençant tout bêtement par le faire tourner par la gauche (d'où Scancode=37): - Code:
-
' initialisation SCENE3D 1 3D_PLANE 2 WIDTH 1,640 HEIGHT 1,480 3D_LOAD_TEXTURE 2,"Texture 1.bmp" 3D_U_TILE 2,20 3D_V_TILE 2,20 3D_X_ROTATE 2,90 3D_CONE 3,3,1 3D_POSITION 3,5,1,1 CAM_POSITION 0,1,0
Label turn_left ' x_pt = coord x du point visé par la cam ' z-pt = bis pour la coordonnée z ' il est possible de faire de même pour y, ce qui peux être plus long DIM x_pt,z_pt ' à vous de définir les variables appropriées (rayon, et cetera) x_pt=1 : z_pt=0
POINT_POSITION x_pt,1,z_pt
' ------------------------------- MAIN ' fin du main et arrêt du programme si touche "echap" du clavier pressée WHILE ScanCode><27
' tourner à gauche If Scancode=37 Then GoSub turn_left
POINT_POSITION x_pt,1,z_pt
END_WHILE ' ------------------------------- FIN MAIN TERMINATE ' ------------------------------- ARRET DU PROGRAMME
' Tourner à gauche turn_left:
' debug print_locate 0,500 print x_pt print_locate 50,500 print z_pt Return ' fin tourner à gauche Si quelqu'un veut bien tenter quelque chose, quoique ce soit pourrait m'être utile ou m'inspirer, je vous remercie d'avance ! . | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Vue subjective (3D) Mar 5 Mar 2013 - 9:01 | |
| Je propose une solution pour les rotations droite/gauche. Explications dans les commentaires: - Code:
-
' initialisation SCENE3D 1 3D_PLANE 2 WIDTH 1,640 HEIGHT 1,480 ' 3D_LOAD_TEXTURE 2,"Texture 1.bmp" 3D_U_TILE 2,20 3D_V_TILE 2,20 3D_X_ROTATE 2,90 3D_CONE 3,3,1 3D_POSITION 3,5,1,1 CAM_POSITION 0,1,0
Label turn_left, turn_right ' x_pt = coord x du point visé par la cam ' z-pt = bis pour la coordonnée z ' il est possible de faire de même pour y, ce qui peux être plus long DIM x_pt,z_pt, teta, delta, pi ' à vous de définir les variables appropriées (rayon, et cetera) x_pt=5 : z_pt=0
pi = 4*atn(1) : ' valeur de pi teta = pi/2 : ' angle de visée initial delta = pi/90 : ' incrément de visée
POINT_POSITION x_pt,1,z_pt
' ------------------------------- MAIN ' fin du main et arrêt du programme si touche "echap" du clavier pressée WHILE ScanCode><27
' tourner à gauche If Scancode=37 Then GoSub turn_left If Scancode=39 Then GoSub turn_right
POINT_POSITION x_pt,1,z_pt
END_WHILE ' ------------------------------- FIN MAIN TERMINATE ' ------------------------------- ARRET DU PROGRAMME
' Tourner à droite turn_right: teta = teta - delta if teta>2*pi then teta = teta - 2*pi if teta<0 then teta = teta + 2*pi x_pt = 5 + 5*sin(teta) z_pt = 5*cos(teta) return ' Tourner à gauche turn_left: ' position de la caméra par défaut: (0,0,5) ' point visé par défaut: (0,0,0) ' donc, rotation a gauche/droite représente un changement ' du point visé en le déplaçant sur un cercle de ' centre (0,0,5) et de rayon 5: teta = teta + delta if teta>2*pi then teta = teta - 2*pi if teta<0 then teta = teta + 2*pi x_pt = 5 + 5*sin(teta) z_pt = 5*cos(teta)
' debug print_locate 0,500 print x_pt print_locate 50,500 print z_pt Return ' fin tourner à gauche | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Vue subjective (3D) Mar 5 Mar 2013 - 9:43 | |
| Bonjour Sefiria, Donc tu vas voir dans le code suivant les différentes manières de se déplacer dans un monde en 3d! Je pense avoir suffisament mis d'observation pour comprendre comment procéder, donc à toi de décortiquer le code! Si tu ne saisis pas bien, n'hésite surtout pas à t'adresser à nous par le biais de ce forum. Je crois qu'il y aura toujours quelqu'un pour t'apporter une solution à ton problème. - 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 1000,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(): ' création et initialisation de la scène
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,x,z,a$,p$ 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 + ou -) ' 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: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 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) 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=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)) 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
' après les calculs suite à l'appui sur une touche, on met à jour la vision de la scène en 3d 3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv): ' on positionne le véhicule point visé au nouvel emplacement du véhicule moteur 3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv): ' on positionne l'angle véhicule point visé au nouvel angle du véhicule moteur 3d_move pv,1:' on déplace le véhicule point visé qui doit toujours se trouver devant la caméra cam_position o3d_x_position(mv),sin(bh/6.28)+chy,o3d_z_position(mv): ' à son tour la caméra se positionne au nouvel emplacement du véhicule moteur point_position o3d_x_position(pv),phy,o3d_z_position(pv): ' le nouveau point visé
' affichage des positions de x, y et z ainsi que de l'angle de rotation 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))+"°" 3d_position 27,o3d_x_position(pv),phy+0.3,o3d_z_position(pv):3d_text_change 27,p$ 3d_position 28,o3d_x_position(pv),phy-0.7,o3d_z_position(pv):3d_text_change 28,a$ 3d_rotate 27,o3d_x_rotate(mv),o3d_y_rotate(mv)+180,o3d_z_rotate(mv) 3d_rotate 28,o3d_x_rotate(mv),o3d_y_rotate(mv)+180,o3d_z_rotate(mv) end_sub
' sub de création de la scene3d sub scene() full_space 0: ' on ajuste l'espace du formulaire à tout l'écran scene3d 1:' on crée une scène en 3d hide 1:' on la cache pour que la création des objets à l'intérieur soit plus rapide full_space 1:' on occupe tout l'espace du formulaire, c'est à dire tout l'écran color 1,0,0,200: ' on lui donne un couleur (bleu)
' création des objets de la scène en 3d ' sol de notre scene 3d_plane 1 3d_scale 1,40,40,1 3d_x_rotate 1,90 3d_y_position 1,0 3d_color 1,0,150,0
' création d'un mur à gauche 3d_box 2,8,3,1 3d_position 2,-8,1.5,-5 3d_y_rotate 2,90
' création d'une sphère à droite à demi enfoncée dans le sol 3d_sphere 3,2 3d_position 3,8,0,-4 3d_color 3,255,0,0
' création d'un cone au loin 3d_cone 4,10,4 3d_position 4,0,5,-50 3d_color 4,200,200,0
' création d'un cylindre au loin derrière la caméra, donc invisible au début 3d_cylinder 5,10,3,3 3d_position 5,0,5,52 3d_color 5,0,200,200
' objets d'affichage des positions de x et de z ainsi que de l'angle de rotation 3d_text 27,"":3d_scale 27,.1,.1,.1:3d_text 28,"":3d_scale 28,.1,.1,.1
' ici on crée un véhicule moteur de la caméra, un cube que l'on cache 3d_cube 1000,1 3d_y_rotate 1000,rot:3d_move 1000,-13:3d_hide 1000 ' ici on crée un véhicule point visé: ça peut-être une sphere, un cube, etc... (mais il faut faire 3d_hide 1001 aussi) 3d_mesh 1001
show 1 end_sub tu peux changer les valeurs de vd, vhy et vrot pour accélérer ou ralentir les déplacements. A+
Dernière édition par bignono le Mar 5 Mar 2013 - 14:07, édité 2 fois (Raison : edité suite petite erreur dans le code) | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Mar 5 Mar 2013 - 9:50 | |
| @ Sefiria, Tu peux jeter un oeil sur mon webdav dans "...\Sources\3D\Viewer3ds" Prends le dossier complet Ps : Tu peux aussi y trouver des objets 3ds dans "...\Ressources Externes" | |
| | | Sefiria
Nombre de messages : 25 Age : 32 Localisation : Nîmes (30), France Date d'inscription : 05/03/2013
| Sujet: Re: Vue subjective (3D) Mar 5 Mar 2013 - 17:00 | |
| . Et bien, si je m'attendais à ça o.O Merci à vous tous, je vais étudier chacun de vos codes et ainsi donner mes impressions (ce que je préfères), ce que je ne comprends pas (le cas échéant donc), et ainsi profiter de cette merveilleuse rotation tant attendue ! Merci encore à vous tous ! | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Vue subjective (3D) Mar 5 Mar 2013 - 17:59 | |
| Voici le même code que dans mon précédent post mais au lieu d'utiliser scancode, je fais appel à l'évènement on_key. - Code:
-
' ****************************************************************************** ' ***************************** COMMANDES CLAVIER ****************************** ' ****************************************************************************** dim esc :' * TOUCHE ESC ==> MET FIN AU PROGRAMME:................... CASE 27 * dim tpu :' * TOUCHE "page up" ==> DÉCOLLER (vision aérienne):....... CASE 33 * dim tpd :' * TOUCHE "page down" ==> REDESCENDRE (vision aérienne):.. CASE 34 * 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 * ' ****************************************************************************** ' ****************************** PAVÉ NUMÉRIQUE ******************************** ' ****************************************************************************** dim pn1 :' * TOUCHE "1" ==> RECULER VERS LA GAUCHE:................. CASE 97 * dim pn2 :' * TOUCHE "2" ==> RECULER:................................ CASE 98 * dim pn3 :' * TOUCHE "3" ==> RECULER VERS LA DROITE:................. CASE 99 * dim pn4 :' * TOUCHE "4" ==> DÉPLACEMENT LATÉRAL VERS LA GAUCHE:..... CASE 100 * dim pn5 :' * TOUCHE "5" ==> RETOUR AU POINT D'ORIGINE:.............. CASE 101 * dim pn6 :' * TOUCHE "6" ==> DÉPLACEMENT LATÉRAL VERS LA DROITE:..... CASE 102 * dim pn7 :' * TOUCHE "7" ==> AVANCER VERS LA GAUCHE:................. CASE 103 * dim pn8 :' * TOUCHE "8" ==> AVANCER:................................ CASE 104 * dim pn9 :' * TOUCHE "9" ==> AVANCER VERS LA DROITE:................. CASE 105 * dim pnp :' * TOUCHE "+" ==> MONTER:................................. CASE 107 * dim pnm :' * TOUCHE "-" ==> DESCENDRE:.............................. CASE 109 * ' ****************************************************************************** label t1,t2 on_key_down 0,t1 on_key_up 0,t2
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 1000,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(): ' création et initialisation de la scène
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,x,z,a$,p$ vrot=1:vd=0.2:vhy=0.025: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 + ou -) ' 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) if esc=1 then terminate if tpu=1 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 end_if if tpd=1 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 end_if 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>11 then bh=11 if tch=1 then bh=bh-.2:if bh<-11 then bh=-11 if pn1=1 then 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) if pn2=1 then 3d_move mv,vd-(2*vd) if pn3=1 then 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) if pn4=1 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 pn5=1 then 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 if pn6=1 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 pn7=1 then 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) if pn8=1 then 3d_move mv,vd if pn9=1 then 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) if pnp=1 then phy=phy+vhy:chy=chy+vhy if pnm=1 then phy=phy-vhy:chy=chy-vhy
' après les calculs suite à l'appui sur une touche, on met à jour la vision de la scène en 3d 3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv): ' on positionne le véhicule point visé au nouvel emplacement du véhicule moteur 3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv): ' on positionne l'angle véhicule point visé au nouvel angle du véhicule moteur 3d_move pv,1:' on déplace le véhicule point visé qui doit toujours se trouver devant la caméra cam_position o3d_x_position(mv),sin(bh/6.28)+chy,o3d_z_position(mv): ' à son tour la caméra se positionne au nouvel emplacement du véhicule moteur point_position o3d_x_position(pv),phy,o3d_z_position(pv): ' le nouveau point visé
' affichage des positions de x, y et z ainsi que de l'angle de rotation 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))+"°" 3d_position 27,o3d_x_position(pv),phy+0.3,o3d_z_position(pv):3d_text_change 27,p$ 3d_position 28,o3d_x_position(pv),phy-0.7,o3d_z_position(pv):3d_text_change 28,a$ 3d_rotate 27,o3d_x_rotate(mv),o3d_y_rotate(mv)+180,o3d_z_rotate(mv) 3d_rotate 28,o3d_x_rotate(mv),o3d_y_rotate(mv)+180,o3d_z_rotate(mv) end_sub
' sub de création de la scene3d sub scene() full_space 0: ' on ajuste l'espace du formulaire à tout l'écran scene3d 1:' on crée une scène en 3d hide 1:' on la cache pour que la création des objets à l'intérieur soit plus rapide full_space 1:' on occupe tout l'espace du formulaire, c'est à dire tout l'écran color 1,0,0,200: ' on lui donne un couleur (bleu)
' création des objets de la scène en 3d ' sol de notre scene 3d_plane 1 3d_scale 1,40,40,1 3d_x_rotate 1,90 3d_y_position 1,0 3d_color 1,0,150,0
' création d'un mur à gauche 3d_box 2,8,3,1 3d_position 2,-8,1.5,-5 3d_y_rotate 2,90
' création d'une sphère à droite à demi enfoncée dans le sol 3d_sphere 3,2 3d_position 3,8,0,-4 3d_color 3,255,0,0
' création d'un cone au loin 3d_cone 4,10,4 3d_position 4,0,5,-50 3d_color 4,200,200,0
' création d'un cylindre au loin derrière la caméra, donc invisible au début 3d_cylinder 5,10,3,3 3d_position 5,0,5,52 3d_color 5,0,200,200
' objets d'affichage des positions de x et de z ainsi que de l'angle de rotation 3d_text 27,"":3d_scale 27,.1,.1,.1:3d_text 28,"":3d_scale 28,.1,.1,.1
' ici on crée un véhicule moteur de la caméra, un cube que l'on cache 3d_cube 1000,1 3d_y_rotate 1000,rot:3d_move 1000,-13:3d_hide 1000 ' ici on crée un véhicule point visé: ça peut-être une sphere, un cube, etc... (mais il faut faire 3d_hide 1001 aussi) 3d_mesh 1001
show 1 end_sub
t1: if key_down_code=27 then esc=1 if key_down_code=33 then tpu=1 if key_down_code=34 then tpd=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=97 then pn1=1 if key_down_code=98 then pn2=1 if key_down_code=99 then pn3=1 if key_down_code=100 then pn4=1 if key_down_code=101 then pn5=1 if key_down_code=102 then pn6=1 if key_down_code=103 then pn7=1 if key_down_code=104 then pn8=1 if key_down_code=105 then pn9=1 if key_down_code=107 then pnp=1 if key_down_code=109 then pnm=1 return t2: if key_down_code=27 then esc=0 if key_down_code=33 then tpu=0 if key_down_code=34 then tpd=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=97 then pn1=0 if key_down_code=98 then pn2=0 if key_down_code=99 then pn3=0 if key_down_code=100 then pn4=0 if key_down_code=101 then pn5=0 if key_down_code=102 then pn6=0 if key_down_code=103 then pn7=0 if key_down_code=104 then pn8=0 if key_down_code=105 then pn9=0 if key_down_code=107 then pnp=0 if key_down_code=109 then pnm=0 return A+
Dernière édition par bignono le Mar 5 Mar 2013 - 19:38, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Vue subjective (3D) Mar 5 Mar 2013 - 18:31 | |
| Personnellement, je préfère la version ON_KEY..., Bignono. C'est plus propre dans l'esprit de Panoramic. Mais cela n'enlève rien à la solution SCANCODE qui est parfaitement fonctionnelle. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Vue subjective (3D) Mar 5 Mar 2013 - 18:42 | |
| Salut Bignono Très bon code, bien documenté, merci. Une petite rectification, les 2 dernières lignes du programme : - Code:
-
if key_down_code=106 then pnp=0 if key_down_code=107 then pnm=0 c’est plutôt 107 et 109 au lieu de 106 et 107, n’est-ce pas ? | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Vue subjective (3D) Mar 5 Mar 2013 - 19:41 | |
| Merci Papydall Heureusement que tu es là, je ne sais pas ce qu'on ferait sans toi! Tu as l'oeil à tout! J'ai édité et corrigé... A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Vue subjective (3D) Mer 6 Mar 2013 - 1:33 | |
| J’essaye d’être utile, c’est tout ! Et parfois j’y arrive, pas toujours mais quelques fois, oui ça peut m'arriver. | |
| | | jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: Vue subjective (3D) Mer 13 Mar 2013 - 14:36 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vue subjective (3D) Mer 13 Mar 2013 - 15:56 | |
| Salut Jim78. En effet, ça faisait un bail... Tu devrais te remettre à la 3D sous Panoramic. Jack va réimplanter des fonctions sympa bientôt. Fais nous de jolis programmes et on fera un effort pour fermer les yeux sur les fautes d'orthographes ... PS: Regarde le dernier jeu 3D fait par Bignono. Il a réussi à faire un super jeu avec peu de lignes et de ressources ... Je suis sur que ça te remotivera pour t'y remettre. | |
| | | Contenu sponsorisé
| Sujet: Re: Vue subjective (3D) | |
| |
| | | | Vue subjective (3D) | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |