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
» I Love You
par papydall Aujourd'hui à 2:58

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Hier à 18:08

» mise a jour calculatrice
par joeeee2017 Hier à 15:57

» [solved] 3D_LINE How to ?
par Jicehel Hier à 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 FPS 3D : La suite !

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

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: FPS 3D : La suite !   Jeu 23 Avr 2015 - 13:36

Allez je m'emballe, voici une version améliorée du programme précédent: maintenant il y a une forêt, une gestion des collisions avec l'environnement et un ciel.

Maintenant il faut à tout prix que je me mette a bosser mes partiels pour la rentrée, je vais devoir faire une pause Panoramic Razz (Même si ces premiers résultats sont hyper encourageants pour moi Smile )

Le programme est beaucoup plus lourd, si vous avez des problèmes de fluidité ajustez l'intervalle timer ou les variables suivantes:
   • vit_depl (vitesse de déplacement de la caméra)
   • sensi (sensibilité de la souris)

Les graphismes sont un peu nul mais il y a une bonne base. La prochaine étape sera de mettre en place les sauts et la gravité. Enfin, je pourrais commencer à envisager un système de tir sur cible (la forêt est pas mon objectif final, je voudrais plutôt partir sur un environnement futuriste composé de cubes (pour le décors) et de sphères qu'il faudrait dégomer Smile )

Le code:

Code:
' ======= Déclaration des label =======
' Positionnnement de la souris
label Programme_principal


' ======= Déclaration des variables   =======

' Comportement de la souris
dim souris_x_init
dim souris_x_comp
dim souris_y_init
dim souris_y_comp

' Repère sphérique et cartésiens pour le pointage caméra
dim sph_point_teta
dim sph_point_phi
dim sph_point_R

dim cart_point_x
dim cart_point_y
dim cart_point_z

' Repère cartesien pour la position de la caméra
dim cam_pos_x
dim cam_pos_y

' Sensibilité de la souris
dim sensi

' Vitesse de déplacement
dim vit_depl

' Variable de détection de collision
dim detec_col
dim vit_col_front
dim vit_col_back
dim col_point

' ======= Initialisation des variables  =======
sph_point_R = 0.9
sph_point_teta=0
sph_point_phi=0
sensi=-0.05
cam_pos_x = 0
cam_pos_y = 0
vit_depl = 0.3

' ======= Initialisation de l'affichage  =======


' Création de la fenetre
caption 0,"Test de caméra 3D"
border_hide 0
full_space 0


' === Création de l'environnement 3D de déplacement de la caméra ===
' Légende des couleur
' x: Rouge
' y: vert
' z: Bleu

scene3d 1
full_space 1
axes_show
color 1,0,0,0
cursor_hide 1
light_y_position 5
light_x_position 10
light_z_position 5

3d_skybox 1
3d_load_texture_front 1,"Skybox coté.bmp"
3d_load_texture_back 1,"Skybox coté.bmp"
3d_load_texture_left 1,"Skybox coté.bmp"
3d_load_texture_right 1,"Skybox coté.bmp"
3d_load_texture_top 1,"Skybox haut.bmp"

3d_plane 2
3d_position 2,0,0,0
3d_load_texture 2,"terrain.bmp"
3d_x_rotate 2,90
3d_u_tile 2,100
3d_v_tile 2,100
3d_scale 2,100,100,100

3d_sphere 3,0.5
3d_collision_as_sphere 3
3d_y_position 3,1
3d_hide 3

3d_sphere 4,0.005
3d_color 4,255,0,0
3d_collision_as_cube 4

3d_sphere 5,0.1
3d_position 5,0,1,0
3d_hide 5
3d_collision_as_sphere 5

dim i
dim arbre_x
dim arbre_z
i=6

while i<30

arbre_x=rnd(25)
arbre_z=rnd(25)

3d_sphere i,1
3d_x_scale i,2.5
3d_y_scale i,2.5
3d_x_rotate i,270
3d_y_position i,3
3d_color i,0,25,0
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_ellipsoid i
i=i+1

3d_cylinder i,5,0.5,1
3d_color i,85,67,12
3d_x_rotate i,180
3d_y_position i,0.5
3d_load_texture i,"Ecorce.jpg"
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_faces i
i=i+1

end_while

while i<60

arbre_x=rnd(25)-25
arbre_z=rnd(25)

3d_sphere i,1
3d_x_scale i,2.5
3d_y_scale i,2.5
3d_x_rotate i,270
3d_y_position i,3
3d_color i,0,25,0
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_ellipsoid i
i=i+1

3d_cylinder i,5,0.5,1
3d_color i,85,67,12
3d_x_rotate i,180
3d_y_position i,0.5
3d_load_texture i,"Ecorce.jpg"
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_cube i
i=i+1

end_while

while i<90

arbre_x=rnd(25)
arbre_z=rnd(25)-25

3d_sphere i,1
3d_x_scale i,2.5
3d_y_scale i,2.5
3d_x_rotate i,270
3d_y_position i,3
3d_color i,0,25,0
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_ellipsoid i
i=i+1

3d_cylinder i,5,0.5,1
3d_color i,85,67,12
3d_x_rotate i,180
3d_y_position i,0.5
3d_load_texture i,"Ecorce.jpg"
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_cube i
i=i+1

end_while

while i<120

arbre_x=rnd(25)-25
arbre_z=rnd(25)-25

3d_sphere i,1
3d_x_scale i,2.5
3d_y_scale i,2.5
3d_x_rotate i,270
3d_y_position i,3
3d_color i,0,25,0
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_ellipsoid i
i=i+1

3d_cylinder i,5,0.5,1
3d_color i,85,67,12
3d_x_rotate i,180
3d_y_position i,0.5
3d_load_texture i,"Ecorce.jpg"
3d_x_position i,arbre_x
3d_z_position i,arbre_z
3d_collision_as_cube i
i=i+1

end_while




' === FIN de la création de la map ===


' ======= PROGRAMME PRINCIPAL Création du timer de surveillance de la souris =======
timer 30
timer_interval 30,25
on_timer 30,Programme_principal

end

' ======= Ecriture des sous-programmes =======


' === Programme principal ===

Programme_principal:
' Test sur le comportement du pointeur
' Comportement horizontal
  if souris_x_init <> mouse_x_position(1)
     sph_point_phi = sph_point_phi-(mouse_x_position(1)-souris_x_init)*sensi
  end_if

' Comportement vertical
 if souris_y_init <> mouse_y_position(1)
     sph_point_teta=sph_point_teta+(mouse_y_position(1)-souris_y_init)*sensi
     if sph_point_teta > 24.8
      sph_point_teta=24.8
     end_if
     if sph_point_teta < 14.85
      sph_point_teta=14.85
     end_if
 end_if
 
  ' Detection des collisions
 detec_col = 0
 col_point=0
 for i=6 to 119
  detec_col = detec_col + o3d_collision(5,i)
  col_point = col_point + o3d_collision(3,i)
 next i

 vit_col_front = 0
 vit_col_back = 0

 ' Calcul de la vitesse a opposer au mouvement dans le cas d'une collision
 if detec_col <> 0
   if col_point <> 0
   vit_col_front = vit_depl+0.001
   vit_col_back = 0
   else
   vit_col_back = vit_depl+0.001
   vit_col_front = 0
 end_if

 end_if

 ' Test sur le comportement des touches du clavier
 if scancode=90
     cam_pos_x = cam_pos_x + (vit_depl-vit_col_front)*(cart_point_x-cam_pos_x)
     cam_pos_y = cam_pos_y + (vit_depl-vit_col_front)*(cart_point_y-cam_pos_y)
 end_if

 if scancode=83
     cam_pos_x = cam_pos_x - (vit_depl-vit_col_back)*(cart_point_x-cam_pos_x)
     cam_pos_y = cam_pos_y - (vit_depl-vit_col_back)*(cart_point_y-cam_pos_y)
 end_if
 
 if scancode=27
  timer_off_all
  terminate
 end_if
 
 
 
 ' Calcul des coordonnées du pointeur 3D
 cart_point_x = cam_pos_x + sph_point_R*cos(sph_point_teta/3.141592654)*cos(sph_point_phi/3.141592654)
 cart_point_y = cam_pos_y + sph_point_R*cos(sph_point_teta/3.141592654)*sin(sph_point_phi/3.141592654)
 cart_point_z = 1+sph_point_R*sin(sph_point_teta/3.141592654)
 
 ' Calcul des coordonnées de la caméra
 
 ' Actualisation affichage
 3d_position 3,cart_point_x,cart_point_z,cart_point_y
 3d_position 4,cart_point_x,cart_point_z,cart_point_y
 point_position cart_point_x,cart_point_z,cart_point_y
 cam_position cam_pos_x,1,cam_pos_y
 3d_position 5,cam_pos_x,1,cam_pos_y
 light_position cam_pos_x,1,cam_pos_y

souris_x_init=mouse_x_position(1)
souris_y_init=mouse_y_position(1)

return


Les textures et Cie: tectures

J'espère que ça vous plaira  cheers  ! Maintenant je cours à ma thermodynamique  pale
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Jicehel

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Jeu 23 Avr 2015 - 13:51

Oui c'est excellent et c'est bien dommage que tu doives réviser tes partiels. Toutefois c'est en effet plus important.
Bon courage et encore bravo, ça fonctionne très bien
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Jeu 23 Avr 2015 - 16:42

Salut The Gamer Le Joueur.
Un bon petit code où il y a des bonnes idées.
Panoramic c’es bien, mais la thermodynamique c’est mieux !
Enfin, comme ça fini par ique (ic) ça doit être bon.

Comme on est dans  les inutilitaires, ça ne risque pas de trop polluer ce post, je m’adresse donc à jicehel :
Hé jicehel, pourquoi dis-tu que c’est bien dommage que The Gamer Le joueur doive réviser ses partiels ?
Surtout la thermodynamique.
Hmmm, attends un peu : ça me rappelle quelque chose, mais quoi ?
Ah oui, j’étais météorologue professionnel et la thermodynamique était mon plat de tous les jours.

Ah, Jicehel si tu goûtes à la thermodynamique !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Jeu 23 Avr 2015 - 17:15

Je préfère un muffin à la Nutella, mais bon, à chacun ses goûts ... ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Jeu 23 Avr 2015 - 23:07

alors là bravo Le Gamer
comme cela tu ne fais pas que jouer
si tu veux , il est possible de créer une foret en un seul objet pour faciliter la gestion des collisions
bon courage pour les partielles
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: FPS 3D : La suite !   Dim 26 Avr 2015 - 23:14

Grappillant sur mes révisions, mon programme se développe:

Nouveau code avec un chargement animé du décor (qui est cubique maintenant), une simulation du mouvement lors des déplacement (je dois encore ajouter un léger mouvement latéral):

Code:
' Merci Silverman pour ton code sur la position de la souris

' ======= Chargement des librairies ============
dll_on "user32"


' ======= Déclaration des label =======
' Positionnnement de la souris
label Programme_principal


' ======= Déclaration des variables   =======

' Paramètres de l'affichage
dim demi_ecran_x%
dim demi_ecran_y%

' Comportement de la souris
dim souris_mouv_x
dim souris_mouv_y
dim init_pos_souris
dim position_souris

' Repère sphérique et cartésiens pour le pointage caméra
dim sph_point_teta
dim sph_point_phi
dim sph_point_R

dim cart_point_x
dim cart_point_y
dim cart_point_z

' Repère cartesien pour la position de la caméra
dim cam_pos_x
dim cam_pos_y
dim cam_pos_z
dim cam_ampli
dim cam_osci
dim cam_freq

' Repère sphérique + variables nécéssaire a la rotation de la caméra pendant le chargement
dim cam_pos_phi

' Sensibilité de la souris
dim sensi

' Vitesse de déplacement
dim vit_depl

' Variable de détection de collision
dim detec_col
dim vit_col_front
dim vit_col_back
dim col_point

' Variables pour le tirage au sort permettant de créer la map
dim taille_cube
dim cube_x
dim cube_z
dim nombre_cube
dim taille_map
dim detec_col_cube
dim num_cube_premier

' Compteurs pour boucle utilisés de multiples fois
dim i
dim j

' ======= Initialisation des variables  =======

' Position/sensibilité du pointeur
sph_point_R = 0.9
sph_point_teta=0
sph_point_phi=0
sensi=-0.5

' Position de la caméra
cam_pos_x = 0
cam_pos_y = 0
cam_pos_phi = 0

' Déplacement
vit_depl = 0.15

' Caractéristiques de la map
taille_map = 40
nombre_cube=power(taille_map,2)*0.04
init_pos_souris = 1

' Caractéristiques de l'oscillation caméra
cam_osci=0
cam_freq=vit_depl*170-2
cam_ampli=0.03
cam_pos_z = 1





' ======= Initialisation de l'affichage  =======


' Création de la fenetre
caption 0,"Test de caméra 3D"
border_hide 0
' width 0,screen_x
' height 0,screen_y
full_space 0
hide 0

' Création de la scene 3d
scene3d 1
color 1,0,0,0
full_space 1
cam_position taille_map,taille_map,taille_map
light_position taille_map,taille_map,0

' Mesure de la dimension de la fenetre
demi_ecran_x%=width(0)/2
demi_ecran_y%=height(0)/2

' Création de la fenetre de chargement
show 0
form 2
border_hide 2
top 2,2*demi_ecran_y%-60
left 2,demi_ecran_x%-300
height 2,17
width 2,600
progress_bar 4
width 4,600
parent 4,2
min 4,0
max 4,nombre_cube-21
position 4,0


' === Création de l'environnement 3D de déplacement de la caméra ===
' Légende des couleur
' x: Rouge
' y: vert
' z: Bleu

' Ciel
3d_skybox 1
3d_load_texture_front 1,"Skybox coté.bmp"
3d_load_texture_back 1,"Skybox coté.bmp"
3d_load_texture_left 1,"Skybox coté.bmp"
3d_load_texture_right 1,"Skybox coté.bmp"
3d_load_texture_top 1,"Skybox haut.bmp"

' Sol
3d_plane 2
3d_position 2,0,0,0
3d_load_texture 2,"terrain.bmp"
3d_x_rotate 2,90
3d_u_tile 2,taille_map*0.4
3d_v_tile 2,taille_map*0.4
3d_scale 2,taille_map*0.4,taille_map*0.4,taille_map*0.4

' Sphère modélisant l'avant (front) pour les collisions
3d_sphere 3,0.5
3d_collision_as_sphere 3
3d_y_position 3,1
3d_hide 3

' Sphère matérialisant le pointeur en rouge
3d_sphere 4,0.02
3d_color 4,255,0,255
3d_transparent 4,150

' Sphère englobant le joueur pour les collsions
3d_sphere 5,0.6
3d_position 5,0,1,0
3d_hide 5
3d_collision_as_sphere 5

' Création d'un cube central protégeant le départ du joueur
3d_cube 6,10
3d_hide 6
3d_collision_as_cube 6

position 4,6

' Sotckage du nombre du premier cube
num_cube_premier=number_3d_objects+1

' Initialisation du compteur
i=num_cube_premier

' Génération du décor cubique aléatoirement

while i=<num_cube_premier+nombre_cube
  ' Tirage au sort des attribut spatiaux du cube
  taille_cube=rnd(5)+1.2
  cube_x=rnd(taille_map*2)-taille_map
  cube_z=rnd(taille_map*2)-taille_map
  detec_col_cube = 1
  
  ' Création du cube
  3d_cube i,taille_cube
  3d_hide i
  3d_color i,rnd(255),rnd(255),rnd(255)
  3d_position i,cube_x,taille_cube/2,cube_z
  3d_collision_as_cube i

  ' Optimisation de l'espace: aucun cube ne doit se chevaucher
  if i > num_cube_premier
   while detec_col_cube = 1
   detec_col_cube = 0
   j=num_cube_premier-2
    while detec_col_cube = 0 and j=<i-1
     j=j+1
     if o3d_collision(j,i)=0
      detec_col_cube = 0
     else
      cube_x=rnd(taille_map*2)-taille_map
      cube_z=rnd(taille_map*2)-taille_map
      3d_position i,cube_x,taille_cube/2,cube_z
      detec_col_cube = 1
     end_if
     if scancode = 27
      terminate
     end_if
    end_while
   end_while
  end_if
  3d_show i
  ' incrémentation du compteur
  i=i+1
  ' mouvement de la barre de chargement
  position 4,i
  
  ' mouvement de la caméra
  cam_pos_phi = cam_pos_phi + 1
  cam_pos_x = (taille_map/2)*cos(cam_pos_phi*(3.141592654/180))
  cam_pos_y = (taille_map/2)*sin(cam_pos_phi*(3.141592654/180))
  cam_position cam_pos_x,taille_map/4,cam_pos_y
end_while

wait 1000
hide 2

' === FIN de la création de la map ===

' === PROGRAMME PRINCIPAL : On demande a l'utilisateur de confirmer le début du jeu ====

wait 1000
if message_confirmation_ok("Le jeu va commencer!")=1
 ' Activation du brouillard
 fog_on
 fog_color 100,100,100
 fog_distance_min 10
 fog_distance_max 30
  ' Matérialisation des limites
 i=i+1
 3d_line i,0-taille_map,1,0-taille_map
 3d_line i,taille_map,1,0-taille_map
 3d_line i,taille_map,1,taille_map
 3d_line i,0-taille_map,1,taille_map
 3d_line i,0-taille_map,1,0-taille_map
 3d_line_width i,20
 3d_color i,255,0,0
 ' Initialisation position souris
 cursor_hide 1
 init_pos_souris = 1
 position_souris = dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%)
 ' Activation du timer de programme principal
 timer 30
 timer_interval 30,5
 on_timer 30,Programme_principal
else
 ' On quite le jeu si l'utilisateur souhaite utiliser la touche échap
 terminate
end_if

end

' ======= Ecriture des sous-programmes =======


' === Programme principal ===

Programme_principal:

' Détection des mouvements de souris
 if init_pos_souris=1
  init_pos_souris=0
  souris_mouv_x=mouse_x_position(1)
  souris_mouv_y=mouse_y_position(1)
 end_if

' Réinitialisation de la position curseur et calcul de son déplacement
 position_souris= dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%)
 sph_point_phi = sph_point_phi-(mouse_x_position(1)-souris_mouv_x)*sensi
 sph_point_teta=sph_point_teta+(mouse_y_position(1)-souris_mouv_y)*sensi

' Vérrouillage de l'axe vertical
 if sph_point_teta > 85
  sph_point_teta=85
 end_if
 if sph_point_teta < -85
  sph_point_teta=-85
 end_if
 
 ' ====== Etude du déplacement ======
 ' Detection des collisions
 detec_col = 0
 col_point=0
 for i=num_cube_premier to num_cube_premier+nombre_cube
  detec_col = detec_col + o3d_collision(5,i)
  col_point = col_point + o3d_collision(3,i)
 next i

 vit_col_front = 0
 vit_col_back = 0

 ' Calcul de la vitesse a opposer au mouvement dans le cas d'une collision
 if detec_col <> 0
   if col_point <> 0
   vit_col_front = vit_depl
   else
   vit_col_back = vit_depl
   end_if
 end_if
 
 ' Limite de la map
 if cam_pos_x<=(0.9-taille_map)
  if cart_point_x <= 0.9-taille_map
   vit_col_front=vit_depl
  else
   vit_col_back=vit_depl
  end_if
 end_if

 if cam_pos_y<=(0.9-taille_map)
  if cart_point_y <= 0.9-taille_map
   vit_col_front=vit_depl
  else
   vit_col_back=vit_depl
  end_if
 end_if
 
 if cam_pos_x>=(taille_map-0.9)
  if cart_point_x >= taille_map-0.9
   vit_col_front=vit_depl
  else
   vit_col_back=vit_depl
  end_if
 end_if

 if cam_pos_y>=(taille_map-0.9)
  if cart_point_y >= taille_map-0.9
   vit_col_front=vit_depl
  else
   vit_col_back=vit_depl
  end_if
 end_if


 ' Réactions aux ordres lancé par le joueur au clavier
 if scancode=90
     cam_pos_x = cam_pos_x + (vit_depl-vit_col_front)*(cart_point_x-cam_pos_x)
     cam_pos_y = cam_pos_y + (vit_depl-vit_col_front)*(cart_point_y-cam_pos_y)
     cam_osci = cam_osci + cam_freq
 end_if

 if scancode=83
     cam_pos_x = cam_pos_x - (vit_depl-vit_col_back)*(cart_point_x-cam_pos_x)
     cam_pos_y = cam_pos_y - (vit_depl-vit_col_back)*(cart_point_y-cam_pos_y)
     cam_osci = cam_osci + cam_freq
 end_if
 
 if scancode=27
  timer_off_all
  terminate
 end_if
 
 ' Oscillation de la caméra du a la respiration
 cam_osci = cam_osci + 0.75

 ' Calcul des coordonnées du pointeur 3D
 cart_point_x = cam_pos_x + sph_point_R*cos(sph_point_teta*(3.141592654/180))*cos(sph_point_phi*(3.141592654/180))
 cart_point_y = cam_pos_y + sph_point_R*cos(sph_point_teta*(3.141592654/180))*sin(sph_point_phi*(3.141592654/180))
 cart_point_z = 1+sph_point_R*sin(sph_point_teta*(3.141592654/180)) + 0.3*cam_ampli*sin(cam_osci*(3.141592654/180))
 cam_pos_z = 1 +cam_ampli*sin(cam_osci*(3.141592654/180))
 
 ' Actualisation affichage
 3d_position 3,cart_point_x,cart_point_z,cart_point_y
 3d_position 4,cart_point_x,cart_point_z,cart_point_y
 point_position cart_point_x,cart_point_z,cart_point_y
 cam_position cam_pos_x,cam_pos_z,cam_pos_y
 3d_position 5,cam_pos_x,cam_pos_z,cam_pos_y

return

Ne vous y trompez pas ce n'est pas encore un jeu, juste le plaisir de se déplacer dans un monde virtuel Razz

Les commandes sont les mêmes:
echap = quitter (marche aussi pendant le chargement)
z = avancer
s = reculer

Si le déplacement manque en fluidité, réduisez la valeur de la variable taille_map

Prochaine étape (en cours, pour la fin de la sem pro j'espère): chargement dynamique du décors (les cubes disparaitront lorsqu'il seront hors de vue, ca permettra de générer les "map" plus grandes)

Vous pouvez utiliser les textures fournies ici (écorce inutile): textures

EDIT: Il existe un moyen de rentrer dans les cubes, le trouverez vous ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Jicehel

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Lun 27 Avr 2015 - 1:18

Désolé, chez moi, je peux bien bouger la vue mais avancer / reculer ne fonctionnent pas. Suis-je le seul qui ait ce problème ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Lun 27 Avr 2015 - 12:52

cheers C' est très prometteur !

( mais je n' ai pas trouvé comment rentrer dans les cubes... Crying or Very sad )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Lun 27 Avr 2015 - 13:00

Au bureau ça marche nickel (il faudra que je vois pourquoi je ne pouvais pas avancer chez moi).
Je n'ais pas réussi à rentrer dans les cubes.

Bravo, c'est clair que c'est vraiment prometeur.

J'ai hate de voir la suite, c'est très bien parti et pour le moment, ça reste bien fluide
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mindstorm

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Lun 27 Avr 2015 - 19:22

super
j'ai juste un problème pour voir l'herbe qui, chez moi, est grise le plus souvent.
impossible de rentrer dans les cubes!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jimx78

avatar

Nombre de messages : 240
Age : 26
Localisation : Yvelines
Date d'inscription : 24/05/2010

MessageSujet: Re: FPS 3D : La suite !   Lun 27 Avr 2015 - 19:23

Génial ton code !
Il est optimiser pour les collision, bien joué.

J'ai découvert une astuce pour afficher en pleine écran ton jeux (sans la barre du menu démarrer en dessous)

Il suffit de remplacer :

full_space 0

Par

width 0,screen_x
height 0,screen_y


Merci bon courage !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: FPS 3D : La suite !   Lun 27 Avr 2015 - 22:18

Merci pour vos encouragements !! C'est très motivant Very Happy . Si je reste actif un bout de temps sur le forum, vous verrez que mon plus gros défaut est de marcher à la reconnaissance... Je m’efforce de le combler, mais n'hésitez pas à me dire quand je deviens trop "relou" (si les plus vieux membres ont du mal a comprendre : "lourd" Razz , je vous taquine lol! )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
papydall

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Mar 28 Avr 2015 - 1:38

Le vieux membre que je suis te dis que tu n’es pas "relou" : tu es "gélé", c’est-à-dire "léger".
Alors sois comme tu es et n’aie aucune crainte.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 14:22

Je sais pas si il faut créer un nouveau sujet mais je poursuis dans celui ci !

Ma réussite au partiel de thermodynamique étant plus que médiocre, j'ai travaillé très tard sur ce programme hier soir. Le résultat est plus qu'encourageant pour moi !

cheers  cheers  cheers  cheers  cheers  cheers  cheers

Ce type de code permet de gérer un nombre d'objets considérable avec Panoramic. En effet, il ne charge que les objets présents dans l'environnement proche du joueur.

Amélioration par rapport au code précédent:
• Chargement/déchargement des cubes de façon dynamique
• Possibilité d'augmenter taille_map jusqu'a 100 pour avoir une fluidité raisonable
• Génération de la map plus rapide permettant de générer des maps plus grandes

Bug connus:
• Probleme d'acces violation: surement dus aux taille énormes de mes tableaux
==> Je vais essayer de gérer cette quantité de données dans un fichier texte
• Ralentissement de l'éxécution lors de l'actualisation de l'affichage des cubes
==> Plutot que de décharger/recharger tout le décors proche a chaque fois, je vais programmer une gestion un peu plus intelligente

Amélioration a venir:
• Ajout d'un brouillard stable (j'ai des soucis pour l'instant)
• Chargement du décors proche avant l'arrivé du personnage sur le plateau (vous verrez faut attendre 1000 ms quant on arrive)

Code:

Code:
' Développement des cubes en cours.

' Merci Silverman pour ton code sur la position de la souris

' ======= Chargement des librairies ============
dll_on "user32"

' ======= Déclaration des label =======
' Positionnnement de la souris
label Programme_principal, Actualisation_chargement


' ======= Déclaration des variables   =======

' Paramètres de l'affichage
dim demi_ecran_x%
dim demi_ecran_y%

' Comportement de la souris
dim souris_mouv_x
dim souris_mouv_y
dim init_pos_souris
dim position_souris

' Repère sphérique et cartésiens pour le pointage caméra
dim sph_point_teta
dim sph_point_phi
dim sph_point_R

dim cart_point_x
dim cart_point_y
dim cart_point_z

' Repère cartesien pour la position de la caméra
dim cam_pos_x
dim cam_pos_y
dim cam_pos_z
dim cam_ampli
dim cam_osci
dim cam_freq

' Repère sphérique + variables nécéssaire a la rotation de la caméra pendant le chargement
dim cam_pos_phi

' Sensibilité de la souris
dim sensi

' Vitesse de déplacement
dim vit_depl

' Variable de détection de collision
dim detec_col
dim vit_col_front
dim vit_col_back
dim col_point

' Variables pour le tirage au sort permettant de créer la map
dim nombre_cube%
dim taille_map
dim detec_col_cube
dim num_cube_premier
dim tab_cube_taille(1000)
dim tab_cube_x(1000)
dim tab_cube_z(1000)
dim tab_cube_col_R(1000)
dim tab_cube_col_V(1000)
dim tab_cube_col_B(1000)

' Variables utilisées pour l'apparition, disparition des cubes
dim seuil_chargement
dim past_cube_i(36)
dim current_cube_i(36)
dim maillage
dim detec_past_cube

' Compteurs pour boucle utilisés de multiples fois
dim i
dim j
dim k
dim l
dim n%

' ======= Initialisation des variables  =======

' Position/sensibilité du pointeur
sph_point_R = 0.9
sph_point_teta=0
sph_point_phi=0
sensi=-0.5

' Position de la caméra
cam_pos_x = 0
cam_pos_y = 0
cam_pos_phi = 0

' Déplacement
vit_depl = 0.15

' Caractéristiques de la map
taille_map = 100
nombre_cube%=0
init_pos_souris = 1

' Caractéristiques de l'oscillation caméra
cam_osci=0
cam_freq=vit_depl*170-2
cam_ampli=0.03
cam_pos_z = 1

' Chargement des cubes (seuil = nombre de cubes chargés autour du personnage)
seuil_chargement = 36
maillage = 10



' ======= Initialisation de l'affichage  =======


' Création de la fenetre
border_hide 0
' width 0,screen_x
' height 0,screen_y
full_space 0
hide 0

' Création de la scene 3d
scene3d 1
color 1,0,0,0
full_space 1
cam_position taille_map,taille_map,taille_map
light_position taille_map,taille_map,0

' Mesure de la dimension de la fenetre
demi_ecran_x%=width(0)/2
demi_ecran_y%=height(0)/2

' Création de la fenetre de chargement
show 0
form 2
border_hide 2
top 2,2*demi_ecran_y%-60
left 2,demi_ecran_x%-300
height 2,17
width 2,600

' Barre de chargement
progress_bar 4
width 4,600
parent 4,2
min 4,0
max 4,power(taille_map*2,2)/100
position 4,0


' === Création de l'environnement 3D de déplacement de la caméra ===
' Légende des couleur
' x: Rouge
' y: vert
' z: Bleu

' Ciel
3d_skybox 1
3d_load_texture_front 1,"Skybox coté.bmp"
3d_load_texture_back 1,"Skybox coté.bmp"
3d_load_texture_left 1,"Skybox coté.bmp"
3d_load_texture_right 1,"Skybox coté.bmp"
3d_load_texture_top 1,"Skybox haut.bmp"

' Sol
3d_plane 2
3d_position 2,0,0,0
3d_load_texture 2,"terrain.bmp"
3d_x_rotate 2,90
3d_u_tile 2,taille_map*0.4
3d_v_tile 2,taille_map*0.4
3d_scale 2,taille_map*0.4,taille_map*0.4,taille_map*0.4

' Sphère modélisant l'avant (front) pour les collisions
3d_sphere 3,0.5
3d_collision_as_sphere 3
3d_y_position 3,1
3d_hide 3

' Sphère matérialisant le pointeur en rouge
3d_sphere 4,0.02
3d_color 4,255,0,255
3d_transparent 4,150

' Sphère englobant le joueur pour les collsions
3d_sphere 5,0.6
3d_position 5,0,1,0
3d_hide 5
3d_collision_as_sphere 5

' Création d'un cube central protégeant le départ du joueur
3d_cube 6,10
3d_hide 6
3d_collision_as_cube 6

position 4,6

' Sotckage du nombre du premier cube
num_cube_premier=number_3d_objects+1

' Initialisation du compteur
i=num_cube_premier
k=0-taille_map-2*maillage
j=0

' Génération du décor cubique aléatoirement
while k=<taille_map+2*maillage
 for j=0-taille_map-2*maillage to taille_map+12 step maillage

 ' positonnement du cube + enregistrement de sa position dans un tableau
 tab_cube_taille(i) = 2+rnd(3)
 tab_cube_z(i) = j + rnd(10)
 tab_cube_x(i) = k + rnd(10)
 tab_cube_col_R(i) = rnd(255)
 tab_cube_col_V(i) = rnd(255)
 tab_cube_col_B(i) = rnd(255)

 ' création de l'objet pour le chargement visuel
 3d_cube i,tab_cube_taille(i)
 3d_position i,tab_cube_x(i),tab_cube_taille(i)/2,tab_cube_z(i)
 3d_color i,tab_cube_col_R(i),tab_cube_col_V(i),tab_cube_col_B(i)
 
 ' mouvement de la barre de chargement
 position 4,i
 
 ' mouvement de la caméra
 cam_pos_phi = cam_pos_phi + 1
 cam_pos_x = (taille_map/2)*cos(cam_pos_phi*(3.141592654/180))
 cam_pos_y = (taille_map/2)*sin(cam_pos_phi*(3.141592654/180))
 cam_position cam_pos_x,taille_map/4,cam_pos_y
 
 ' Sauvegarde du nombre de cube et incrémentation du compteur
 nombre_cube% = nombre_cube% + 1
 i=i+1
 
 ' Arrêt pour l'esthetique de l'affichage
 wait 5
 
next j
k=k+maillage
end_while

' Matérialisation des limites
i=i+1
3d_line i,0-taille_map,1,0-taille_map
3d_line i,taille_map,1,0-taille_map
3d_line i,taille_map,1,taille_map
3d_line i,0-taille_map,1,taille_map
3d_line i,0-taille_map,1,0-taille_map
3d_line_width i,20
3d_color i,255,0,0

' Pause avant initialisation du jeu
delete 2

' === FIN de la création de la map ===

' === PROGRAMME PRINCIPAL : On demande a l'utilisateur de confirmer le début du jeu ====

if message_confirmation_ok("Le jeu va commencer!")=1

' Initialisation position souris
cursor_hide 1
init_pos_souris = 1
position_souris = dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%)

' Destruction des cubes pour la mise en place du chargement dynamique
for i=num_cube_premier to num_cube_premier + nombre_cube%-2
 3d_delete i
next i

' Initialisation de la position caméra
cam_pos_x = 0
cam_pos_y = 0

' Activation du timer de programme principal
timer 30
timer_interval 30,15
on_timer 30,Programme_principal
timer 31
timer_interval 31,1000
on_timer 31, Actualisation_chargement
timer_on 30
timer_on 31

else
' On quite le jeu si l'utilisateur souhaite utiliser la touche échap
terminate
end_if

end

' ======= Ecriture des sous-programmes =======

Programme_principal:

' === Mouvement caméra ======

' Détection des mouvements de souris
if init_pos_souris=1
 init_pos_souris=0
 souris_mouv_x=mouse_x_position(1)
 souris_mouv_y=mouse_y_position(1)
end_if

' Réinitialisation de la position curseur et calcul de son déplacement
position_souris= dll_call2("SetCursorPos",demi_ecran_x%,demi_ecran_y%)
sph_point_phi = sph_point_phi-(mouse_x_position(1)-souris_mouv_x)*sensi
sph_point_teta=sph_point_teta+(mouse_y_position(1)-souris_mouv_y)*sensi

' Vérrouillage de l'axe vertical
if sph_point_teta > 85
 sph_point_teta=85
end_if
if sph_point_teta < -85
 sph_point_teta=-85
end_if

 ' Réactions aux ordres lancé par le joueur au clavier
if scancode=90
    cam_pos_x = cam_pos_x + (vit_depl-vit_col_front)*(cart_point_x-cam_pos_x)
    cam_pos_y = cam_pos_y + (vit_depl-vit_col_front)*(cart_point_y-cam_pos_y)
    cam_osci = cam_osci + cam_freq
end_if

if scancode=83
    cam_pos_x = cam_pos_x - (vit_depl-vit_col_back)*(cart_point_x-cam_pos_x)
    cam_pos_y = cam_pos_y - (vit_depl-vit_col_back)*(cart_point_y-cam_pos_y)
    cam_osci = cam_osci + cam_freq
end_if

if scancode=27
 terminate
end_if

' ====== Lois et comportements physiques ======

 ' Detection des collisions avec le décor
detec_col = 0
col_point = 0
for i=1 to seuil_chargement
 j=current_cube_i(i)
 detec_col = detec_col + o3d_collision(5,j)
 col_point = col_point + o3d_collision(3,j)
next i

vit_col_front = 0
vit_col_back = 0

' Calcul de la vitesse a opposer au mouvement dans le cas d'une collision
if detec_col <> 0
  if col_point <> 0
  vit_col_front = vit_depl
  else
  vit_col_back = vit_depl
  end_if
end_if

' Limite de la map
if cam_pos_x<=(0.9-taille_map)
 if cart_point_x <= 0.9-taille_map
  vit_col_front=vit_depl
 else
  vit_col_back=vit_depl
 end_if
end_if

if cam_pos_y<=(0.9-taille_map)
 if cart_point_y <= 0.9-taille_map
  vit_col_front=vit_depl
 else
  vit_col_back=vit_depl
 end_if
end_if

if cam_pos_x>=(taille_map-0.9)
 if cart_point_x >= taille_map-0.9
  vit_col_front=vit_depl
 else
  vit_col_back=vit_depl
 end_if
end_if

if cam_pos_y>=(taille_map-0.9)
 if cart_point_y >= taille_map-0.9
  vit_col_front=vit_depl
 else
  vit_col_back=vit_depl
 end_if
end_if


' Oscillation de la caméra du a la respiration
cam_osci = cam_osci + 0.75

' ======== Actualisation de la position et de l'affichage ========
' Calcul des coordonnées du pointeur 3D
cart_point_x = cam_pos_x + sph_point_R*cos(sph_point_teta*(3.141592654/180))*cos(sph_point_phi*(3.141592654/180))
cart_point_y = cam_pos_y + sph_point_R*cos(sph_point_teta*(3.141592654/180))*sin(sph_point_phi*(3.141592654/180))
cart_point_z = 1+sph_point_R*sin(sph_point_teta*(3.141592654/180)) + 0.3*cam_ampli*sin(cam_osci*(3.141592654/180))
cam_pos_z = 1 +cam_ampli*sin(cam_osci*(3.141592654/180))

' Actualisation affichage
3d_position 3,cart_point_x,cart_point_z,cart_point_y
3d_position 4,cart_point_x,cart_point_z,cart_point_y
point_position cart_point_x,cart_point_z,cart_point_y
cam_position cam_pos_x,cam_pos_z,cam_pos_y
3d_position 5,cam_pos_x,cam_pos_z,cam_pos_y

' Suivi pour le débug
print_locate 0,0
print cam_pos_x
print cam_pos_y

return

Actualisation_chargement:
' ======== Chargement dynamique du décors =========

' Calcul des numéro des cubes entourant le personnage
' Cube central
n% = num_cube_premier + ((cam_pos_y+taille_map+2*maillage-mod(cam_pos_y+taille_map+2*maillage,maillage))/maillage)+((cam_pos_x+taille_map+2*maillage-mod(cam_pos_x+taille_map+2*maillage,maillage))/maillage)*(2*(taille_map+2*maillage-mod(taille_map+2*maillage,maillage))/maillage)

' Calcul des cubes entourant le cube central.
k=1
for i = 0 to sqr(seuil_chargement)-1
 for j = 0 to sqr(seuil_chargement)-1
    current_cube_i(k) = n% + (i-int(sqr(seuil_chargement)/2))*2*(taille_map+2*maillage-mod(taille_map+2*maillage,maillage))/maillage + (j-int(sqr(seuil_chargement)/2))
    k=k+1
 next j
next i

' Vérification des cubes présents dans l'environnement du personnage
for i=1 to seuil_chargement
3d_delete past_cube_i(i)
next i

for i=1 to seuil_chargement
   j = current_cube_i(i)
   if o3d_object_exists(current_cube_i(i)) = 0
   3d_cube j,tab_cube_taille(j)
   3d_position j,tab_cube_x(j),tab_cube_taille(j)/2,tab_cube_z(j)
   3d_color j,tab_cube_col_R(j),tab_cube_col_V(j),tab_cube_col_B(j)
   3d_collision_as_cube j
   end_if
next i

for i=1 to seuil_chargement
past_cube_i(i)=current_cube_i(i)
next i
return

Les textures sont ici:textures
(seul terrain et les fichiers skybox sont utiles)

Si vous rencontrez un probleme lors de l'éxécution: alt+ctrl+suppr ==> Gestionnaire des taches ==> Processus ==> Arretter le processus PANORAMIC.exe
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Jicehel

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 16:14

Bravo, c'est vraiment impressionnant et en effet ça reste fluide.
Très interessant résultat. J'espère que ça va un peu reveiller notre Bignono car il avait bien avancé sur ces programmes et il pourra peut être t'aider dans l'optimisation ou les idées ou / et profiter de ton expérience avec ce moteur prometteur.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 18:31

Félicitation pour ta réussite au partiel de thermodynamique et bravo pour ton code.
Tu parles de problème d'access violation et tu croix que c'est du aux tailles énormes de tes tableaux.

Je pense que le problème provient d'un TIMER_INTERVAL 30,15  trop court en ligne 282

Modifie cette ligne
Code:
timer_interval 30,150

Je croix qu'avec un TIMER_INTERVAL de 150, on ne violera plus l'accès : c'est à tester.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 19:09

Tu peux aussi éviter le problème de sortie en gérant le On_close => Dans le traitement tu arrètes tous les timers, tu attends 200ms et tu faits un terminate

Sinon pour le timer, avec 150, je trouve que Papydall est un peu trop généreux et ça fait "saccader" les déplacement mais ça passe très bien avec un timer à 40.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 19:12

papydall , par "plus que médiocre" j'entends "plutot raté" :/ mais j'avais bien réussi l'exam précédent donc je verrais.

Baisser le timer à 150ms génère une image pas du tout fluide. J'ai l'impression que 25ms est plus stable et assez fluide.

J'ai aussi constaté un bug dans le chargement des objets en bordure de map. Mais je vais essayer d'arranger ca.

EDIT: Si vous baissez les fréquences des timer, il faut augmenter vit_depl pour garder un déplacement à vitesse acceptable.
Merci Jicehel, pour ton conseil pour la fermeture. Je m'empresse d'ajouter ca !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
Jicehel

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 19:33

Sino, tu peux passer le timer à 40 sans changer la vitesse. Tu verras, ça reste très fluide. Après c'est vrai que si tu montes le timer à plus, ça dégrade l'animation de manière peu plaisante.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 19:36

Je pense que ca dépend du processeur de chacun parce que moi a 40 ca ralentit vraiment l'action... J'ai un intel i3 2.6GHz environ (ordi portable) et une carte graphique qui vaut pas grand chose...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
silverman

avatar

Nombre de messages : 466
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 20:01

salut The Gamer,

ça se présente bien, c'est très fluide. J'ai qq suggestions:
-cache le scene 3d pendant la création de la map, je pense que tu devrais gagner un peu en rapidité(mais c'est pas sur) de création.
-ajoute un déplacement latéral.
-hide/show tes objets plutôt que les recréer en permanence(c'est plus rapide que de les créer/supprimer), car si c'est des objets stocké sur le hdd, ça va ralentir ton prog.

Pour le timer, tu peux calculer le nb d'image /seconde comme ça: FPS=1000/timer. Pour un timer réglé à 20 ms, ça fait 50 images/sec, ça reste très correct comme valeur. Ne dépasse pas les 30ms sinon ça va trop saccader et ça ne va pas être agréable.
Ou bien tu laisse le choix à l'utilisateur comme ceci:
FPS%=50
timer_interval 30,(1000/fps%)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 20:43

J'ai testé le hide/show. Le pb c'est qu'avec plus de 50 objets chargés en memoire ca commence a ralentir serieusement chez moi.

Pour le reste merci pour tes suggestions (le deplacement lateral est en prevision). Le chargement de la map est plus sympa en visuel mais tu as raison c'est surement plus rapide sans le mouvement. Je peux meme charger la map en memoire sans creer les objets mais ce ser moins sympa...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
jimx78

avatar

Nombre de messages : 240
Age : 26
Localisation : Yvelines
Date d'inscription : 24/05/2010

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 21:16

Je viens de faire un test, c'est d'afficher un maximum de cube sur ma scene3D.

J'ai réussi a afficher jusqu'a 10 000 cubes (sans test de collision, tous afficher a l’écran) mais au dessus j'ai rapidement Out of memory

Avec autant de bloc, j'ai 5 fois moins de fps.

Si je place 5000 cubes, il n'y a pas de baisse de fps.

Conclusion : C'est peut être le code de l'anti-collision qui te fait perdre tout les fps je pense qu'il n'y a pas besoin de tester la collision de tout ce qui a dans la map, mais uniquement ce qui est très proche de toi ?

(peut t’être que je fail complètement, si tu y a penser, et que tu l'a déjà intégrer)

Dit moi tout, je suis ton code avec passion, et me remotive pas mal !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 21:39

Pour les cubes, mon ordi baisse de fps au dessus de 200cubes avec gestion de collision (si je teste tout les cubes).

Dans la dernière version (bas de page 1), je ne charge que 40cubes (avec collisions) autour de moi sur une quantité énorme (coordonnées stockées dans un tableau). Donc ça reste fluide quelque soit la taille de la map (ou nombre de cube total). Le code ne teste les collisions que sur 40 cubes ce qui marche plutôt bien.

C'est sur qu'une optimisation voudrait que seuls les 9 cubes directement autour de la camera devraient etre testé. Je vais réfléchir pour savoir si c'est possible.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
mindstorm

avatar

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

MessageSujet: Re: FPS 3D : La suite !   Mer 29 Avr 2015 - 21:56

étrange la camera baisse sans cesse
pour le reste super
a suivre
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: FPS 3D : La suite !   

Revenir en haut Aller en bas
 
FPS 3D : La suite !
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» RESOLU works suite 2004 (word) non installé ??
» Bug suite à la mise à jour 10.0.45.2 du player flash résolu
» Outpost Security Suite FREE
» [Résolu] comment mettre plusieurs animationa la suite
» Nouvelle voiture pour Kit dans la suite de K2000

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