Page 1 sur 1
rotation des sprites sans sprite3D
Publié : mar. 09/janv./2007 21:46
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

Re: rotation des sprites sans sprite3D
Publié : mar. 09/janv./2007 22:08
par flaith
graph100 a écrit :...tiens c normal que le forum soit en anglais

Modifie le paramètre langue dans ton profil

Re: rotation des sprites sans sprite3D
Publié : mar. 09/janv./2007 23:31
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 ?

avec windows 3.11 ?
c'est quoi ta config ??

Re: rotation des sprites sans sprite3D
Publié : mer. 10/janv./2007 13:08
par graph100
Dobro a écrit :
tu utilise un ordinateur a base de Cyrix ?

avec windows 3.11 ?
c'est quoi ta config ??

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.
Publié : mer. 10/janv./2007 13:29
par Anonyme
Met à jour DirectX si ce n'est pas fait, ou fait un crédit pour un pc plus récent

Publié : mer. 10/janv./2007 18:04
par graph100
ET Directx 9.0 b
et pas de nouveau pc prévus avant 2 ans
j'attent les pentiums millo

Publié : ven. 12/janv./2007 19:25
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 ?
Publié : sam. 13/janv./2007 12:16
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
Publié : sam. 13/janv./2007 13:05
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

J'aimerai bien joindre Mischa mais je ne sais pas ou !
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

Publié : sam. 13/janv./2007 14:38
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
Publié : sam. 13/janv./2007 21:11
par graph100
eh bé tu me sauve là
vraiment merci !!
Publié : sam. 13/janv./2007 22:46
par Patrick88
ça vient du forum anglais...
Publié : dim. 14/janv./2007 18:42
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 ^^
Publié : lun. 15/janv./2007 18:04
par Patrick88