Performance d'un jeu en 2D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@djes

Excepté, les instructions de stabilité (Delay, WindowEvent, etc...), les instructions de périphérique (clavier, joystick, etc...), et l'I.A.,...

Code : Tout sélectionner

ScrollMaterial(#Matiere, OffsetX, OffsetY, #PB_Material_Fixed, NumeroDeCouche)
RenderWorld()
FlipBuffers()
...voilà exactement TOUT ce qu'il faut en 3D pour faire un scrolling multi-directionnel continu dans une boucle principale. On ne redessine rien.

Ce n'est pas une blague ou du snobisme de dire que même les Sprite3D sont alors un peu à la ramasse...

Code : Tout sélectionner

;PB 4.30 le 10/01/09 (Comtois)
;20/03/09 Test défilement 2D (Ollivier)
;23/03/09 Correction de sécurité de dessin (Dr Dri)
;              Chronométrie pour Linux (Cpl.Bator)

MessageRequester("Aide", "Flèche haut pour accélérer" + Chr(13) + Chr(10) + "Flèches gauche et droite pour tourner...")

Global Full.I = 1 ; 1 = FullScreen, c'est comme la boîte
                        ; auto : ça marche tout seul...

InitEngine3D()
InitSprite()
InitKeyboard()

#R2D = 180.0 / #PI

;Pour enregistrer au format PNG
UsePNGImageEncoder()

ExamineDesktops()
EcrL = DesktopWidth(0)
EcrH = DesktopHeight(0)
EcrP = DesktopDepth(0)
If Full
   OpenScreen(EcrL, EcrH, EcrP, "Tutoriel 3D")
Else
   OpenWindow(0, 0, 0, EcrL, EcrH, "DX9ParalX", $80000000)
   OpenWindowedScreen(WindowID(0), 0, 0, EcrL, EcrH, 0, 0, 0)
EndIf
;Pour charger une texture, mesh, entity , etc, indiquer le chemin où se trouvent ces médias
Add3DArchive("/", #PB_3DArchive_FileSystem)

Global ScrollX.F
Global ScrollY.F
Global AngleTeta.F
Global Coef.F
Global AngleV.F

Global Angle.f, Vitesse.f

;-Mesh
#Mesh = 0
CreateMesh(#Mesh, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate
SetMeshData(#Mesh, Options      , ?Sommets, 24)
SetMeshData(#Mesh, #PB_Mesh_Face, ?Triangles, 12)

;-Textures
#Texture = 0
CreateImage(#Texture, 64, 64)

;Remplissage de la texture en blanc
StartDrawing(ImageOutput(#Texture))
Box(0, 0, ImageWidth(#Texture), ImageHeight(#Texture), $FFFFFF)
DrawingMode(#PB_2DDrawing_Outlined) ; Pour tracer le contour
Box(0, 0, ImageWidth(#Texture), ImageHeight(#Texture), 0)
StopDrawing()

;Enregistre l'image dans le même répertoire que le code source
Fichier$="TextureDVP1.PNG"
SaveImage(#Texture, Fichier$, #PB_ImagePlugin_PNG)

;Maintenant on peut charger notre texture
LoadTexture(#Texture, Fichier$)


#TextureSol = 1
CreateImage(#TextureSol, 512, 512)

;Remplissage de la texture en blanc
If StartDrawing(ImageOutput(#TextureSol)) ; On sécurise
   Box(0, 0, ImageWidth(#TextureSol), ImageHeight(#TextureSol), $0)
   For I = 0 To 500
      R = Random(127) + 128
      X = Random(511)
      Y = Random(511)
      Plot(X, Y, RGB(R, R, R) )
      For D = 1 To 5
         C = RGB(R / 1 << D, R / 1 << D, R / 1 << D)
         Line((X - D << 1) & 511, (Y) & 511, -2, 1, C)
         Line((X + D << 1) & 511, (Y) & 511, 2, 1, C)
         Line((X) & 511, (Y - D << 1) & 511, 1, -2, C)
         Line((X) & 511, (Y + D << 1) & 511, 1, 2, C)
         For DX = -1 To 1 Step 2
            For DY = -1 To 1 Step 2
               Plot((X + DX * D) & 511, (Y + DY * D) & 511, C)
            Next DY
         Next DX
      Next D
   Next I
   StopDrawing()
EndIf


;Enregistre l'image dans le même répertoire que le code source
Fichier$="TextureDVP2.PNG"
SaveImage(#TextureSol, Fichier$, #PB_ImagePlugin_PNG)

;Maintenant on peut charger notre texture
LoadTexture(#TextureSol, Fichier$)

;-Matière
#Matiere = 0
CreateMaterial(#Matiere, TextureID(#Texture))

#MatiereSol = 1
CreateMaterial(#MatiereSol, TextureID(#TextureSol))
For I = 1 To 3
   AddMaterialLayer(#MatiereSol, TextureID(#TextureSol), #PB_Material_Replace)
Next I

;-Entity
#Entity = 0
CreateEntity(#Entity, MeshID(#Mesh), MaterialID(#Matiere))
ScaleEntity(#Entity, 10, 10, 10) ; Agrandi l'entity
EntityLocate(#Entity, 500, 100, 500)

#EntitySol = 1
CreateEntity(#EntitySol, MeshID(#Mesh), MaterialID(#MatiereSol))
ScaleEntity(#EntitySol, 1000, 2, 1000) ; Agrandi l'entity
EntityLocate(#EntitySol, 500, -50, 500)

;-Camera
#Camera = 0
CreateCamera(#Camera, 0, 0, 100, 100)

;- Démarrage
CameraLocate(#Camera, 500, 500, 500)
RotateCamera(#Camera, 270, 270, 0)

Angle = #PI / 2.0

;RotateEntity(#Entity, 0.0, 90.0, 0.0, PB_Absolute)
StartTime = ElapsedMilliseconds() + 16
Repeat
   Delay(1) ; On prévient XP qu'on est cool (XP)
   RealTime.I = ElapsedMilliseconds()
   If RealTime => StartTime ; On bride (Linux)
      StartTime + 16
   
   
      If Full

         Delay(1) ; Sous µsoft,
         Delay(1) ; XP annule ou non ces instructions
         Delay(1) ; Cela dépend notamment de ce qui se passe 
         Delay(1) ; en temps réel en arrière-plan
         Delay(1) ; Comme c'est à titre préventif,
         Delay(1) ; il n'y a pas d'impact sur la fluidité.
         Delay(1) ; Sous Linux, ceci est une blague...
      Else
         WindowEvent()
      EndIf
      If ExamineKeyboard()

         If KeyboardPushed(#PB_Key_Up)
            Vitesse + 0.0001
         EndIf
         Vitesse * 0.99
   
         If KeyboardPushed(#PB_Key_Left)
            AngleV + 0.005
         ElseIf KeyboardPushed(#PB_Key_Right)
            AngleV - 0.005
         EndIf

      EndIf
      Angle + AngleV
      AngleV * 0.9
      ScrollX + Cos(Angle) * Vitesse
      ScrollY + Sin(Angle) * Vitesse
     
      RotateEntity(#Entity, 0.0, Angle * #R2D, 0.0, PB_Absolute)
      CameraLocate(#Camera, 500 - Cos(-Angle - #PI / 2) * Vitesse * 16000, 500, 500 - Sin(-Angle - #PI / 2) * Vitesse * 16000)
  
      For I = 0 To 3
         Coef = 1.0 / (1 + I)
         ScrollMaterial(#MatiereSol, ScrollX / Coef, ScrollY / Coef, #PB_Material_Fixed, I)
      Next I
      RenderWorld()

      FlipBuffers()

      If KeyboardPushed(#PB_Key_Escape)
         Break
      EndIf

   EndIf

ForEver

CloseScreen()
Delay(1)

End
;{ Définition du cube
DataSection
  Sommets:
  ;Dessus 0 à 3
  Data.f -0.5,0.5,-0.5
  Data.f 0,1,0
  Data.L 0
  Data.f 0,0

  Data.f 0.5,0.5,-0.5
  Data.f 0,1,0
  Data.L 0
  Data.f 0,1

  Data.f 0.5,0.5,0.5
  Data.f 0,1,0
  Data.L 0
  Data.f 1,1

  Data.f -0.5,0.5,0.5
  Data.f 0,1,0
  Data.L 0
  Data.f 1,0

  ;Dessous 4 à 7
  Data.f -0.5,-0.5,0.5
  Data.f 0,-1,0
  Data.l 0
  Data.f 0,0

  Data.f 0.5,-0.5,0.5
  Data.f 0,-1,0
  Data.L 0
  Data.f 0,1

  Data.f 0.5,-0.5,-0.5
  Data.f 0,-1,0
  Data.L 0
  Data.f 1,1

  Data.f -0.5,-0.5,-0.5
  Data.f 0,-1,0
  Data.L 0
  Data.f 1,0

  ;Devant 8 à 11
  Data.f -0.5,0.5,0.5
  Data.f 0,0,1
  Data.l 0
  Data.f 0,0

  Data.f 0.5,0.5,0.5
  Data.f 0,0,1
  Data.l 0
  Data.f 0,1

  Data.f 0.5,-0.5,0.5
  Data.f 0,0,1
  Data.l 0
  Data.f 1,1

  Data.f -0.5,-0.5,0.5
  Data.f 0,0,1
  Data.l 0
  Data.f 1,0

  ;Derrière 12 à 15
  Data.f 0.5,0.5,-0.5
  Data.f 0,0,-1
  Data.l 0
  Data.f 0,0

  Data.f -0.5,0.5,-0.5
  Data.f 0,0,-1
  Data.l 0
  Data.f 0,1

  Data.f -0.5,-0.5,-0.5
  Data.f 0,0,-1
  Data.l 0
  Data.f 1,1

  Data.f 0.5,-0.5,-0.5
  Data.f 0,0,-1
  Data.l 0
  Data.f 1,0

  ;Cote gauche 16 à 19
  Data.f -0.5,0.5,-0.5
  Data.f -1,0,0
  Data.l 0
  Data.f 0,0

  Data.f -0.5,0.5,0.5
  Data.f -1,0,0
  Data.l 0
  Data.f 0,1

  Data.f -0.5,-0.5,0.5
  Data.f -1,0,0
  Data.l 0
  Data.f 1,1

  Data.f -0.5,-0.5,-0.5
  Data.f -1,0,0
  Data.l 0
  Data.f 1,0

  ;Cote droit 20 à 23
  Data.f 0.5,0.5,0.5
  Data.f 1,0,0
  Data.l 0
  Data.f 0,0

  Data.f 0.5,0.5,-0.5
  Data.f 1,0,0
  Data.l 0
  Data.f 0,1

  Data.f 0.5,-0.5,-0.5
  Data.f 1,0,0
  Data.l 0
  Data.f 1,1

  Data.f 0.5,-0.5,0.5
  Data.f 1,0,0
  Data.l 0
  Data.f 1,0

  Triangles:
  ;Face en Haut
  Data.w 2,1,0
  Data.w 0,3,2
  ;Face en Bas
  Data.w 6,5,4
  Data.w 4,7,6
  ;Face Avant
  Data.w 10,9,8
  Data.w 8,11,10
  ;Face Arrière
  Data.w 14,13,12
  Data.w 12,15,14
  ;Face Gauche
  Data.w 18,17,16
  Data.w 16,19,18
  ;Face Droite
  Data.w 22,21,20
  Data.w 20,23,22
EndDataSection
;}
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ouais! Tu me ponds un code énorme et tu me dis qu'il ne faut qu'une ligne! :lol:
Ce que je voulais dire, c'est qu'il faudrait quelque chose d'un peu plus simple pour les débutants! Et qui ne nécessite pas Ogre, de créer un objet à partir de datas (ou de le charger), de créer un matérial, etc. Bref, un truc qui permettrait de créer un scroll en une ou deux instructions, intégré au langage, comme les sprites3d.

Pour infos j'utilise scrollmaterial dans Purebreaker depuis un moment; c'est avec ça que je fais le feu en background du premier niveau...

Je vais créer un topic pour la synchro, j'ai bidouillé un peu depuis hier et j'ai un truc à te faire tester :P
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

djes a écrit :Et qui ne nécessite pas Ogre
faire de la 2D avec la 3D, c'est le mieux( nos PC sont conçu pour cela) , mais gare au temps de développement...
Et en réaction des interventions des uns et des autres, voici le résultat d'un labeur de quelques heures:
vers l'infini 0.6, dénué de ClearScreen:
http://www.purebasic.fr/french/viewtopi ... 5351#95351
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

J'ai structuré au maximum le code pour être le plus compréhensible possible malgré les difficultés d'initialisation. Aucun autre changements dans le résultat.

[Edit]Création d'un petit rapport en cas de bugs.

Code : Tout sélectionner

;PB 4.30
;10/01/09 Substitution de l'instruction TextureOutput (Comtois) 
;20/03/09 Test défilement 2D (Ollivier)
;23/03/09 Sécurité de dessin (Dr Dri)
;23/03/09 Chronométrie pour Linux (Cpl.Bator)
;25/03/09 Architecture propre pour débutants (djes)
;___________________________________________________________
;{ Informations initiales
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
;___________________________________________________________
;{ Constantes
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
#R2D = 180.0 / #PI ; R2D = Conversion Radians/Degrés
Enumeration
#Texture
#TextureSol
EndEnumeration
Enumeration
#Matiere
#MatiereSol
EndEnumeration
Enumeration
#Entity
#EntitySol
EndEnumeration
;}
;___________________________________________________________
;{ Déclaration des procédures
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Declare.S TempPng(n.I)
Declare.S InitSmoothScrolling()
;}
;___________________________________________________________
;{ Structures
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Structure V3D ; Vecteur 3D
   X.F
   Y.F
   Z.F
EndStructure

Structure V2D ; Vecteur 2D
   U.F
   V.F
EndStructure

Structure Sommet
   P.V3D ; Position
   N.V3D ; Normale
   C.L   ; Couleur
   T.V2D ; Texture
EndStructure

Structure Triangle
   A.W
   B.W
   C.W
EndStructure
;}
;___________________________________________________________
;{ Variables globales
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Global PleinEcran.I = 1 ; 1 = FullScreen, 0 = Fenêtré
Global EcranLargeur.I
Global EcranHauteur.I
Global EcranBitsParPixel.I
Global Dim Sommet.Sommet(0)
Global ZI.I
Global XI.I
Global Dim Triangle.Triangle(0)
Global FigCarre.I ; N° de la structure fil de fer carré
Global Camera.I ; N° de la caméra (par défaut : 0)
Global RepertoireCaractere.S = "\"
Global Rapport.S = InitSmoothScrolling()

Global ScrollX.F
Global ScrollY.F
Global AngleTeta.F
Global Coef.F
Global AngleV.F
Global Angle.f, Vitesse.f

If Rapport <> "!Init"
   MessageRequester("Erreur", "Impossible d'initialiser le programme !")
   End
EndIf
;}
;}
;___________________________________________________________
;{ Crée les 2 éléments (Images,textures,matières et entités)
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

; Semblant de vaisseau 
If CreateImage(#Texture, 64, 64)
   If StartDrawing(ImageOutput(#Texture))
      Box(0, 0, ImageWidth(#Texture), ImageHeight(#Texture), $FFFFFF)
      DrawingMode(#PB_2DDrawing_Outlined) ; Pour tracer le contour
      Box(0, 0, ImageWidth(#Texture), ImageHeight(#Texture), 0)
      StopDrawing()
      If SaveImage(#Texture, TempPng(1), #PB_ImagePlugin_PNG)
         FreeImage(#Texture)
         If LoadTexture(#Texture, TempPng(1) )
            If CreateMaterial(#Matiere, TextureID(#Texture))
               ; Crée le semblant de vaisseau
               If CreateEntity(#Entity, MeshID(FigCarre), MaterialID(#Matiere))
                  ; Agrandit et positionne le semblant de vaisseau
                  ScaleEntity(#Entity, 10, 10, 10) ; Agrandit l'entité
                  EntityLocate(#Entity, 500, 100, 500)
                  Rapport + "!E1" ; /!\
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
EndIf

; Texture du fond étoilé de l'écran
If CreateImage(#TextureSol, 512, 512)
   If StartDrawing(ImageOutput(#TextureSol)) ; On sécurise
      Box(0, 0, ImageWidth(#TextureSol), ImageHeight(#TextureSol), $0)
      For I = 0 To 500
         R = Random(127) + 128
         X = Random(511)
         Y = Random(511)
         Plot(X, Y, RGB(R, R, R) )
         For D = 1 To 5
            C = RGB(R / 1 << D, R / 1 << D, R / 1 << D)
            Line((X - D << 1) & 511, (Y) & 511, -2, 1, C)
            Line((X + D << 1) & 511, (Y) & 511, 2, 1, C)
            Line((X) & 511, (Y - D << 1) & 511, 1, -2, C)
            Line((X) & 511, (Y + D << 1) & 511, 1, 2, C)
            For DX = -1 To 1 Step 2
               For DY = -1 To 1 Step 2
                  Plot((X + DX * D) & 511, (Y + DY * D) & 511, C)
               Next DY
            Next DX
         Next D
      Next I
      StopDrawing()
      If SaveImage(#TextureSol, TempPng(2), #PB_ImagePlugin_PNG)
         If LoadTexture(#TextureSol, TempPng(2) )
            If CreateMaterial(#MatiereSol, TextureID(#TextureSol) )
               ; On rajoute 3 autres couches pour le parallaxe
               For I = 1 To 3
                  AddMaterialLayer(#MatiereSol, TextureID(#TextureSol), #PB_Material_Replace)
               Next I
               ; Crée le fond étoilé
               If CreateEntity(#EntitySol, MeshID(FigCarre), MaterialID(#MatiereSol) )
                  ; Agrandit et positionne le fond étoilé
                  ScaleEntity(#EntitySol, 1000, 2, 1000)
                  EntityLocate(#EntitySol, 500, -50, 500)
                  Rapport + "!E2" ; /!\
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
EndIf

If Rapport <> "!Init!E1!E2"
   CloseScreen()
   Delay(1)
   MessageRequester("Erreur à la création", "Rapport : " + Rapport)
   End
EndIf
;}
;___________________________________________________________
;{ Boucle principale
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Angle = #PI / 2.0
StartTime = ElapsedMilliseconds() + 16
Repeat
   Delay(1) ; On prévient XP qu'on est cool (XP)
   RealTime.I = ElapsedMilliseconds()
   If RealTime => StartTime ; On bride (Linux)
      StartTime + 16
      If PleinEcran
         Delay(1) ; Sous µsoft,
         Delay(1) ; XP annule ou non ces instructions
         Delay(1) ; Cela dépend notamment de ce qui se passe
         Delay(1) ; en temps réel en arrière-plan
         Delay(1) ; Comme c'est à titre préventif,
         Delay(1) ; il n'y a pas d'impact sur la fluidité.
         Delay(1) ; Sous Linux, ceci est une blague...
      Else
         WindowEvent()
      EndIf
      If ExamineKeyboard()
         If KeyboardPushed(#PB_Key_Up)
            Vitesse + 0.0001
         EndIf
         Vitesse * 0.99
         If KeyboardPushed(#PB_Key_Left)
            AngleV + 0.005
         ElseIf KeyboardPushed(#PB_Key_Right)
            AngleV - 0.005
         EndIf
         If KeyboardPushed(#PB_Key_Escape)
            Break
         EndIf         
      EndIf
      Angle + AngleV
      AngleV * 0.9
      ScrollX + Cos(Angle) * Vitesse
      ScrollY + Sin(Angle) * Vitesse
      RotateEntity(#Entity, 0.0, Angle * #R2D, 0.0, PB_Absolute)
      CameraLocate(Camera, 500 - Cos(-Angle - #PI / 2) * Vitesse * 16000, 500, 500 - Sin(-Angle - #PI / 2) * Vitesse * 16000)
      For I = 0 To 3
         Coef = 1.0 / (1 + I)
         ScrollMaterial(#MatiereSol, ScrollX / Coef, ScrollY / Coef, #PB_Material_Fixed, I)
      Next I
      RenderWorld()
      FlipBuffers()
   EndIf
ForEver
CloseScreen()
Delay(1)
End
;}
;___________________________________________________________

;___________________________________________________________
;{ Procédures
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure.S TempPng(n.I)
   ;________________________________________________________
   ; Retourne un nom de fichier PNG temporaire numéroté
   ;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Protected Result.S
   Result = "Temp" + Str(n) + ".PNG"
   ProcedureReturn Result
EndProcedure

Procedure.S InitSmoothScrolling()
   ;________________________________________________________
   ; Intègre toute la partie initialisation 3D 
   ;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Protected Result.S
;___________________________________________________________
;{ Initialisations générales
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
If InitEngine3D()       ; Initialise Ogre
   If InitSprite()         ; Initialise DirectX
      If InitKeyboard()       ; Initialise le clavier
         UsePNGImageEncoder() ; Prise en charge du format image PNG
         Add3DArchive(RepertoireCaractere, #PB_3DArchive_FileSystem)
;}
;___________________________________________________________
;{ Préparation de la zone de travail graphique
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
         If ExamineDesktops()
            EcranLargeur      = DesktopWidth(0)
            EcranHauteur      = DesktopHeight(0)
            EcranBitsParPixel = DesktopDepth(0)

            If PleinEcran
               OpenScreen(EcranLargeur, EcranHauteur, EcranBitsParPixel, "Smooth scrolling")
            Else
               OpenWindow(0, 0, 0, EcranLargeur, EcranHauteur, "Smooth scrolling", $80000000)
               OpenWindowedScreen(WindowID(0), 0, 0, EcranLargeur, EcranHauteur, 0, 0, 0)
            EndIf
;}
;___________________________________________________________
;{ Création d'une structure fil de fer de base (plan carré)
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
            Global Dim Sommet.Sommet(3) ; 4 sommets
            For ZI = 0 To 1
               For XI = 0 To 1
                  Index = 2 * ZI + XI
                  With Sommet(Index)
                     \P\X = XI - 0.5
                     \P\Y = 0.0
                     \P\Z = ZI - 0.5
                     \N\X = 0.0
                     \N\Y = 1.0
                     \N\Z = 0.0
                     \C   = RGB(0, 0, 0)
                     \T\U = ZI
                     \T\V = XI
                  EndWith      
               Next XI
            Next ZI

            Global Dim Triangle.Triangle(1) ; 2 triangles
            With Triangle(0)
               \A = 0
               \B = 2
               \C = 3
            EndWith
            With Triangle(1)
               \A = 3
               \B = 1
               \C = 0
            EndWith
            FigCarre = CreateMesh(#PB_Any, 2)
            If FigCarre
               Index = #PB_Mesh_Vertex
               Index | #PB_Mesh_Normal
               Index | #PB_Mesh_Color
               Index | #PB_Mesh_UVCoordinate
               SetMeshData(FigCarre, Index,         @Sommet(0),   4)
               SetMeshData(FigCarre, #PB_Mesh_Face, @Triangle(0), 2)
;}
;___________________________________________________________
;{ Initialisation de la caméra
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
               ; Création de la caméra
               If CreateCamera(Camera, 0, 0, 100, 100)
                  ; Préparation de la caméra
                  CameraLocate(Camera, 500, 500, 500)
                  RotateCamera(Camera, 270, 270, 0)
                  Result = "!Init"
               EndIf
;}
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
            EndIf
         EndIf
      EndIf
   EndIf
EndIf
ProcedureReturn Result
EndProcedure
;}
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯


Dernière modification par Ollivier le mer. 25/mars/2009 20:25, modifié 2 fois.
Anonyme

Message par Anonyme »

Marche pas sous linux mon bézo :D

Pourquoi ? j'en sais rien , obligé de rebooté le serveur X ! ( sa prends moins de 10 sec... )
et puis , j'ai pas envie de me prendre le choux avec "les perfs en 2D" , tu sync ton appli , point barre.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

J'ai une erreur Ogre :(

Image
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@Cpl.Bator

Désolé pour le crash de ton OS. Je n'ai pas fait exprès. J'espère que tu n'avais rien en cours. Je crois que c'est à cause du petit caractère générique "\" pour les répertoires. J'ai mis une variable globale pour le modifier facilement. ça doit sûrement être différent sous Linux. Je n'ai jamais testé Linux.

@Djes

Pour l'assertion c'est sûrement à cause de l'archivage.
J'ai remis à jour pour que ça plante, mais en PB, pas en C++!

Je vais la queue entre les jambes sur le forum officiel: j'aurai sûrement plus de précisions.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@Djes

J'ai deux questions.

- Quelle configuration as-tu? (CPU, carte vidéo et OS)

- Est-ce que le code précédent (avec les datas) fonctionne?

Voilà! Merci!

Ollivier
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

10 pages, ah oui quand même !

Message par beauregard »

Ollivier a écrit :J'ai deux questions.
je vois que le débat est loin d'être clos, aussi loin que la page 3... ;)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

C'est bon, ça marche! C'est très beau et très fluide :)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@Djes

Attends là: QUEL code marche ???

Celui avec les Datas ? (le premier de cette page)
Celui sans les Datas ? (le deuxième de cette page)
Les deux ?

Et quelle(s) correction(s) as-tu apporté?

Merci
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Les deux; rien apporté, un petit souci de bécane, c'est tout (c'est ce qui arrive parfois après quelques jours sans redémarrer ;) )
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Et il achevait désormais sereinement de pisser outrageusement dans ses gaudasses en s'écriant d'une voix étouffés : ouwf...

[edit]Et «il», c'est moi... Ouwf! ça marche, logiquement sur toute bécane habitée par XP, ça marche... J'espère trouver la voie à tâtons pour Linux... Ce serait super, au moins ça éviterait de réadapter systématiquement, à chaque pas franchi, chose qui est somme toute évitable vu la portabilité du compilateur.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

A priori, je suis bon pour m'en remettre sur les gaudasses...

Je n'arrive pas à déterminer si AddMaterialLayer() a correctement créé ses "couches". Résultat : crash Visual C++...
Répondre