rotation des sprites sans sprite3D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

rotation des sprites sans sprite3D

Message par graph100 »

Mon pc ne peut executer des routines avec les sprites 3d
il plante gravement lorsque j'utilise start3D() ( erreur dues au processeur)
Donc si vous avez des codes pour les rotations de sprites sans sprite3d
j'ai des idées mais ca donne un truc trés lent ! et en plus je dois en utilise plein a la fois !!
je n'y connais rien en assembleur mais si sa peut augmenter la vitesse c'est tres Bien ^^

tiens c normal que le forum soit en anglais :D
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: rotation des sprites sans sprite3D

Message par flaith »

graph100 a écrit :...tiens c normal que le forum soit en anglais :D
Modifie le paramètre langue dans ton profil :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: rotation des sprites sans sprite3D

Message par Backup »

graph100 a écrit :Mon pc ne peut exécuter des routines avec les sprites 3d
il plante gravement lorsque j'utilise start3D() ( erreur dues au processeur)
verifie que la Dll "Engine3D.dll" est présente dans le dossier
"x:\PureBasic4\Compilers" ou bien dans le dossier de ton application !

a moins bien sur que ta carte graphique ne supporte pas du tout la 3D ...
mais en principe le processeur n'as pas grand chose a voir la dedans , il me semble :)

tu utilise un ordinateur a base de Cyrix ? :lol: avec windows 3.11 ? :lol:

c'est quoi ta config ?? 8O
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: rotation des sprites sans sprite3D

Message par graph100 »

Dobro a écrit : tu utilise un ordinateur a base de Cyrix ? :lol: avec windows 3.11 ? :lol:

c'est quoi ta config ?? 8O
:lol:
Vraiment ??
350 MHz 98 SDRAM
Carte graphique intégrée de 4 Mo
Dique dur de 20 Go + des petits
Window XP PRO service pack 1 (sans aucune mise a jour)

Les jeu comme Counter HalfLife tournent tres bien en petite configuration

La 3D de Pure marche bien
le probleme c start3D()
ca ne sert a rien d'installer et de reinstaller et de reinstaller .....
je l'ai fait 3 fois deja il y avait le meme probleme avec 3.94, 3.80
et aussi sous Window 98
De meme inpossible de faire tourner Tailbite !

alors que j l'ai installer sans pb sur une autre machine lol

de toute façon les routines m'interressent.
Anonyme

Message par Anonyme »

Met à jour DirectX si ce n'est pas fait, ou fait un crédit pour un pc plus récent :D
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

ET Directx 9.0 b

et pas de nouveau pc prévus avant 2 ans
j'attent les pentiums millo :lol:
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

donc pour faire les rotations de sprite je passe par une DLL 3.94
a qui j'envoie une image
mais le pb c que je n'arrive pas a faire passer l'image de la DLL au programme ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Les Sprite3D ne font pas parti du moteur 3D de PB (c'est que du directx)
Donc c'est pas le fichier Engine3D.dll qui changera quoi que ce soit

Si jamais les Sprite3Ds plantent chez toi c'est que ton code n'est pas sécurisé
Exemple :

Code : Tout sélectionner

If Start3D()
  
  ;si jamais il n'a pas été possible de passer
  ;en mode "3D" les commandes de Sprite3D ne
  ;seront pas exécutées.
  ;l'opération peut échouer parfois...
  
  Stop3D()
EndIf
Dri
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

mais enfin je vous dis que la commande start3D() ne marche pas chez moi le compilateur ne plante pas sur displaysprite3D() mais sur start3D()
erreur --> invalide memory access

de meme les execuables compiler sur un pc ou ca marche comme l'exemple de cpl.bator avec les tanks et des sprite3D
plantent......

j'ai cherche partout sur le web mais je n'ai pas trouver une methode de rotation optimiser des images
:wink: J'aimerai bien joindre Mischa mais je ne sais pas ou ! :roll:

hier j'ai reinstaller directX 9.0c ca ne marche toujour pas
je pense que cela est du à la carte graphique si on peut dire ca :lol:
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

il faut juste modifier le chemin d'accés aux exemple de purebasic
LoadSprite(1,"PureBasic\Examples\Sources\Data\GeeBee2.bmp",0)

Code : Tout sélectionner

Procedure RotateSprite(source,target,angle.f,scale) 
  s.f=Sin(6.28318531/3600*angle):c.f=Cos(6.28318531/3600*angle)
  bitmap=CreateCompatibleBitmap_(GetDC_(0),SpriteWidth(source),SpriteHeight(source))
  dc=CreateCompatibleDC_(GetDC_(0))
  obj=SelectObject_(dc,bitmap)
  sid=SpriteOutput(source)
  workdc=StartDrawing(sid)
    BitBlt_(dc,0,0,SpriteWidth(source),SpriteHeight(source),workdc,0,0,13369376)
    transcolor=Point(SpriteWidth(source)-1,0);<-----transparent color upper-right pixel in sourcesprite
  StopDrawing()
  mx=SpriteWidth(source)/2:my=SpriteHeight(source)/2
  radius.f=Sqr(mx*mx + my*my)+1
  If scale=0
    If SpriteWidth(target)=0
      CreateSprite(target,SpriteWidth(source),SpriteHeight(source),0)
      TransparentSpriteColor(2,RGB(transcolor,transcolor,transcolor))
      cl=1
    EndIf
    mx2=mx:my2=my
  Else
    If IsSprite(target)=0
      CreateSprite(target,radius*2,radius*2,0)
      TransparentSpriteColor(2,RGB(transcolor,transcolor,transcolor))
      cl=1
    EndIf
    mx2=radius:my2=radius:diffmx=mx2-mx:diffmy=my2-my
  EndIf
  max=SpriteWidth(target):may=SpriteHeight(target)
  sid=SpriteOutput(target)
  workdc=StartDrawing(sid)
    Box(x, y, max, may,transcolor)
    For y=0 To SpriteHeight(source)-1
      For x=0 To SpriteWidth(source)-1
        RotateX.f = ((x - mx) * c - (y - my) * s) + mx + diffmx
        RotateY.f = ((x - mx) * s + (y - my) * c) + my + diffmy
        If RotateX>=0 And RotateX<max And RotateY>=0 And RotateY<may
          color=GetPixel_(dc,x,y)
          If RotateX>1 And RotateX<SpriteWidth(target)-1 And RotateY>1 And RotateY<SpriteHeight(target)-1
             Plot(RotateX,RotateY,color)
          EndIf
          If angle<>0 And angle<>900 And angle<>1800 And angle<>2700 And angle<>3600
            If RotateX>1 And RotateX<SpriteWidth(target)-1 And RotateY>0 And RotateY<SpriteHeight(target)-1
              Plot(RotateX,RotateY,color);<--This is my very complex
            EndIf
          EndIf
        EndIf
      Next x
    Next y
  StopDrawing()
  DeleteObject_(bitmap):DeleteObject_(obj):DeleteDC_(dc)
EndProcedure



If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or OpenScreen(1024,768,32,"Rotate")=0
  MessageRequester("Error", "Can't open DirectX 7 Or later", 0):End
EndIf

LoadSprite(1,"PureBasic\Examples\Sources\Data\GeeBee2.bmp",0);<--You should use this first (You can find it in 'PureBasic\Examples\Sources\Data')
TransparentSpriteColor(1,RGB(255,0,255))

Repeat
    ExamineMouse():ExamineKeyboard()
    ClearScreen(RGB(100,50,50))
    DisplayTransparentSprite(1,100,100)
    If count<3650
      If GetTickCount_()-zeit > 10
     
        RotateSprite(1,2,count,1)
        ;RotateSprite(source,target,angle,scale)
        ;source - Number of existing sprite
        ;target - Number of (new)targetsprite
        ;angle  - 0 - 3600 tenth-degree
        ;scale  - 0 = target dimensions are same as source
        ;         1 = target dimension depends on rotation-radius
   
        count+50
        zeit=GetTickCount_()
      EndIf
    EndIf
    DisplayTransparentSprite(2,300+count/20,100+count/20)
    StartDrawing(ScreenOutput())
      DrawText(10, 500,"Angle= "+Str((count-50)/10)+" Degree")
    StopDrawing()
    FlipBuffers()
    Sleep_(1)
Until KeyboardPushed(#PB_Key_Escape)
End 
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

eh bé tu me sauve là :D
vraiment merci !!
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

ça vient du forum anglais...
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

ca ne change rien !

c vrai que je ne pense jamais a aller voir lol

comme c une methode point par point y a des trou dans mon image ^^
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

Répondre