Page 1 sur 1

Terre 3d

Publié : ven. 26/sept./2014 10:55
par raven
bonjour à tous,

petit test en 3d:
code+archive

Code : Tout sélectionner

;***********************************************
;Titre  : terre 3d
;Auteur  : Raven d'aprés le code de cooldj
;Date  :26/09/2014
;Heure  :08:06:47
;Version Purebasic :  PureBasic 5.23 LTS (Windows - x86)
;Version de l'editeur :EPB V2.58
; Libairies necessaire : Aucune 
;***********************************************

InitEngine3D()
InitKeyboard()
InitMouse()
InitSprite()
UsePNGImageDecoder()
UseJPEGImageDecoder()

Declare AffText(Text$,x.i,y.i,light.i)

If OpenScreen(1024,768,32,"Terre3d") = 0
   MessageBox_ (0,"Impossible d'ouvrir un écran 1024x768x32@75hz", "ERREUR", #MB_ICONINFORMATION|#MB_OK)  :End 
EndIf

Enumeration
   #terre
   #vaisseau
   #titre
EndEnumeration

CatchSprite(#vaisseau,?vaisseau,#PB_Sprite_BlendSourceAlpha)
CatchSprite(#titre,?titre,#PB_Sprite_BlendSourceAlpha)
Add3DArchive("media", #PB_3DArchive_FileSystem)
CreateCamera(0,0,0,100,100)
MoveCamera(0,  0, 10,40, #PB_Absolute)
CameraLookAt(0,0,10,20)
CreateMaterial(#terre, LoadTexture(#terre, "terre_map.jpg"))
CreateSphere(#terre,20,50,50)
CreateEntity(#terre,MeshID(0),#PB_Material_None)
CreateEntity(#terre,MeshID(0),MaterialID(0))

LoadImage(100,"media/font.bmp")              ; Charge l'image de toutes les lettres

vaisseau_posx=480
vaisseau_posy=700
;----------------fonte cooldj--------------------------------
For j=0 To 125-33                               ; Fait une boucle de toutes les lettres
   GrabImage(100,j,j*16,0,j*16+16,16)            ; Découpe lettre par lettre
   CreateSprite(j+100,16,16)  ; Crée un sprite pour chaque lettre
   StartDrawing(SpriteOutput(j+100))
      DrawImage(ImageID(j),0,0)                   ; Place la lettre découpée dans le sprite
   StopDrawing()
Next
;-------------------------------------------------------
Repeat

    ExamineKeyboard()
   ClearScreen(RGB(0,0,0))
			
   SpriteQuality(1)
   RotateEntity(0,0.3,0,0,#PB_Relative)    
   RenderWorld()
   
   ;--- fps ----
   If FPST < ElapsedMilliseconds()
      FPST = ElapsedMilliseconds()+1000
      fps = FPSC
      FPSC=0
   EndIf
   FPSC+1

   Transpa+1:If Transpa=255:Transpa=0:EndIf
   AffText("Fps: "+Str(fps),0,30,255)
   AffText("Start Game",420,420,255)
   AffText("Menu ",460,460,255)
   AffText("Credits ",440,500,255)
   DisplayTransparentSprite(#titre,-10,200,transpa) ;affiche le titre en transparence+transpa de 255 à 0
   
   
   If image_vaisseau=3:image_vaisseau=0:EndIf
   TransparentSpriteColor(#vaisseau,RGB(0,0,0))  ;affiche le vaisseau sans le fond noir
   ClipSprite(#vaisseau,image_vaisseau*60,0,60,60) ;clip l'image
   DisplayTransparentSprite(#vaisseau,vaisseau_posx,vaisseau_posy);affiche le vaisseau avec sa position sur l'ecran
  ; pas animation
   tempo_vaisseau + 1  
   If  tempo_vaisseau= 3
      image_vaisseau +1 
      tempo_vaisseau = -1
   EndIf

   FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

;-------Procédure Cooldj-------------------
Procedure AffText(Text$,x.i,y.i,light.i)
   For j=1 To Len(Text$)                              ; Fait une boucle sur le nombre de caractères à afficher
      a$=Mid(Text$,j,1)                                ; Prends un caractère après l'autre
      If (Asc(a$)>=Asc("!")) And (Asc(a$)<=Asc("z"))  ; vérifie que le caractère existe
         i.i=Asc(a$)-33                              ; rappel : le code Ascii de ! est 33
         DisplayTransparentSprite(i+100,x+j*16,y,light)         ; Affiche le sprite du caractere
      EndIf
   Next
EndProcedure
;------------------------------------------
FreeEntity(#terre)
FreeTexture(#terre)
FreeSprite(#vaisseau)
FreeSprite(#titre)
CloseScreen()
End 

DataSection
   vaisseau:
   IncludeBinary "media\fighter.bmp"
   titre:
   IncludeBinary "media\space.png"
EndDataSection
; Epb


Re: Terre 3d

Publié : ven. 26/sept./2014 11:22
par Cool Dji
Mince, peux pas regarder, j'ai pas de décharchiveur .rar au boulot et aucun droit pour en installer un...

Sinon, je pense que tu peux sortir des fonctions comme SpriteQuality(1) de la GameLoop et les mettre avant le repeat...

Content que ma petite fonction AffText serve : dans d'autres codes, j'ai ajouté des paramètres pour faire trembler ou tourner chaque lettre de manière indépendante avec un delta en random() sur les coordonnées x, y => ça fait un petit effet console :D

A+

Re: Terre 3d

Publié : ven. 26/sept./2014 19:28
par raven
je vais continuer mes test l'objectif c'est de faire:

Code : Tout sélectionner

affiche 2d........
affiche 3d........
affiche 2d.......
affiche3d etc...
pour le moment j'ai seulement réussi à faire affiche 3d,affiche 2d
ta fonction est excéllente,j'adore ce genre d'effet pour affiché du texte
sinon voici une image:
Image

Re: Terre 3d

Publié : ven. 26/sept./2014 20:37
par Cool Dji
Yo,

Il me semble que seul 3D puis 2D est possible; RenderWorld() efface tout...

Pour les polices, on faire une variante qui prenne en compte la largeur des caractères et faire en sorte que les lettres soient espacées de la même distance les unes des autres...

Re: Terre 3d

Publié : ven. 26/sept./2014 22:26
par raven
effectivement,c'est pas comme en 2d ou j'efface une scène avec un clearscreen(rgb(0,0,0)) dommage :?
par contre,j'ai crée un exécutable du code, il est bien crée mais au lancement ç'a m'affiche blabla à cessé de fonctionné 8O
lorsque je le compile dans l'editeur avec ou sans debugger tout fonctionne.

renderworld() mal placé qui fout le brin?

Re: Terre 3d

Publié : sam. 27/sept./2014 10:17
par falsam
raven a écrit :j'ai crée un exécutable du code, il est bien crée mais au lancement ç'a m'affiche blabla à cessé de fonctionné
Bonjour Raven.
Ton code utilise le moteur Ogre3D.
Ce moteur est sous la forme d'une DLL se trouvant dans le dossier d'installation de Pure Basic (Regarde le sous dossier Compilers) et se nomme Engine3D.dll
Tant que tu compiles, ton éditeur sait ou se trouve cette dll.
Si tu crées un exécutable, tu dois copier cette dll dans le dossier ou se situe l’exécutable.

Re: Terre 3d

Publié : sam. 27/sept./2014 14:19
par raven
bonjour falsam,
ç'a fonctionne mieux avec en effet :lol:

merci ;)

Re: Terre 3d

Publié : lun. 29/sept./2014 18:55
par Kwai chang caine
CoolDj a écrit :Mince, peux pas regarder, j'ai pas de décharchiveur .rar au boulot et aucun droit pour en installer un...
7Zip portable sur une clef :wink:
Chacun sa croix...moi c'est avec DROPBOX que le proxy du boulot aime pas... :?
Et la...rien à faire :cry:

@Raven
Superbe cette planète, la 3D aussi bien sur 8O
Merci 8)

Re: Terre 3d

Publié : mar. 30/sept./2014 18:08
par MetalOS
Je vient de faire un test sur mac de ton code et ca fonctionne très bien.