Parfait la rotation

L'arrivée de l'image à la fin est un tout petit peu brutale, mais c'est tres bien.
Tu sais ce que c'est les mecs qui savent rien faire, non seulement ils ne pondent rien, mais en plus ils sont jamais contents

Merci de ta modif

et bien je ne pense pas savoir faire beaucoup la j'ai juste repris l'exemple qu'on a dans l'aide et je l'est un peut retravailler mais si non je ne serais pas faire sa du debu a la fin de teteTu sais ce que c'est les mecs qui savent rien faire
que veut tu dire ?L'arrivée de l'image à la fin est un tout petit peu brutale
Code : Tout sélectionner
Procedure appuie()
#Desk = #True
If #Desk = #True
keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
EndIf
EndProcedure
Delay(100)
appuie()
If ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
ProfondeurCouleur = DesktopDepth(0)
Else
End
EndIf
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(0))
BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000) ; <----on copie l'image qui est dans le dossier temporaire
StopDrawing()
ReleaseDC_(0, DC)
SaveImage(0, "c:/Screenshoot.bmp", #PB_ImagePlugin_BMP) ; <---on la colle ou on veut :)
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
End
EndIf
If InitSprite3D() = 0
MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
End
EndIf
If OpenScreen(Ecran_Largeur, Ecran_Hauteur, ProfondeurCouleur, "Sprite")
; Load our 16 bit sprite (which is a 24 bit picture in fact, as BMP doesn't support 16 bit format)
;
LoadSprite(0, "c:/Screenshoot.bmp", #PB_Sprite_Texture)
CreateSprite3D(1, 0)
Sprite3DQuality(0)
TransparentSpriteColor(0, RGB(255, 0, 255)) ; Our pink is transparent :)
Repeat
; Inverse the buffers (the back become the front (visible)... And we can do the rendering on the back)
FlipBuffers()
ClearScreen(RGB(0,0,0))
; Draw our sprite
;
If Start3D()
ZoomSprite3D(1, x, x)
RotateSprite3D(1, 2, 1)
DisplaySprite3D (1, 0, 0, 255)
Stop3D()
EndIf
ExamineKeyboard()
x+1
Until x > 900 Or KeyboardPushed(#PB_Key_Escape)
Delay(500)
ClearScreen(RGB(0,0,50))
Else
MessageRequester("Error", "Can't open a 800*600 - 16 bit screen !", 0)
EndIf
End
Code : Tout sélectionner
; Matrice de Sprite 3D
; ***
; Ce n'est pas de moi, je l'ai récupéré dans l'un des codes du Dr. Dri
Structure D3DTLVERTEX
sx.f
sy.f
sz.f
rhw.f
color.l
specular.l
tu.f
tv.f
EndStructure
Structure PB_Sprite3D
*Texture.IDirectDrawSurface7
Vertice.D3DTLVERTEX[4]
Width.w
Height.w
EndStructure
; ***
Structure Surface
SPR.l
*SPR3D.PB_Sprite3D
EndStructure
; Paramètres
#MAX_Steps = 32 ; soit #MAX_Steps * #MAX_Steps sprites, perso ça comment à ramer à partier de 96
#Dist_Strength = 6.5 ; Force du decalage
#Ang_Strength = 4.5 ; Force des angles
Global Dim Surfaces.Surface(#MAX_Steps, #MAX_Steps)
Dim Vertices.D3DTLVERTEX(#MAX_Steps, #MAX_Steps)
Procedure.f SetVerticePos(vx.l, vy.l, x.f, y.f)
Surfaces(vx, vy)\SPR3D = IsSprite3D(Surfaces(vx, vy)\SPR)
Surfaces(vx, vy)\SPR3D\Vertice[0]\sx = x
Surfaces(vx, vy)\SPR3D\Vertice[0]\sy = y
If vx > 0
Surfaces(vx-1, vy)\SPR3D = IsSprite3D(Surfaces(vx-1, vy)\SPR)
Surfaces(vx-1, vy)\SPR3D\Vertice[1]\sx = x
Surfaces(vx-1, vy)\SPR3D\Vertice[1]\sy = y
EndIf
If vx > 0 And vy > 0
Surfaces(vx-1, vy-1)\SPR3D = IsSprite3D(Surfaces(vx-1, vy-1)\SPR)
Surfaces(vx-1, vy-1)\SPR3D\Vertice[3]\sx = x
Surfaces(vx-1, vy-1)\SPR3D\Vertice[3]\sy = y
EndIf
If vy > 0
Surfaces(vx, vy-1)\SPR3D = IsSprite3D(Surfaces(vx, vy-1)\SPR)
Surfaces(vx, vy-1)\SPR3D\Vertice[2]\sx = x
Surfaces(vx, vy-1)\SPR3D\Vertice[2]\sy = y
EndIf
EndProcedure
InitSprite()
InitSprite3D()
InitKeyboard()
ScreenWidth = GetSystemMetrics_(#SM_CXSCREEN)
ScreenHeight = GetSystemMetrics_(#SM_CYSCREEN)
OpenWindow(0, 0, 0, ScreenWidth, ScreenHeight, "Test", #PB_Window_Invisible | #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(0), 0, 0, ScreenWidth, ScreenHeight, 1, 0, 0)
CreateSprite(0, ScreenWidth, ScreenHeight)
hDC = GetDC_(#Null)
hSurface = StartDrawing(SpriteOutput(0))
BitBlt_(hSurface, 0, 0, ScreenWidth, ScreenHeight, hDC, 0, 0, #SRCCOPY)
StopDrawing()
ReleaseDC_(#Null, hDC)
UseBuffer(0)
nSPR = 1
StepX.f = ScreenWidth / #MAX_Steps
StepY.f = ScreenHeight / #MAX_Steps
For y = 0 To #MAX_Steps ;- 1
For x = 0 To #MAX_Steps ;- 1
Surfaces(x, y)\SPR = nSPR
If GrabSprite(nSPR, x * StepX, y * StepY, StepX, StepY, #PB_Sprite_Texture) = 0
CreateSprite(nSPR, StepX, StepY, #PB_Sprite_Texture)
EndIf
Surfaces(x, y)\SPR3D = CreateSprite3D(nSPR, nSPR)
nSPR + 1
Next
Next
ax.f = 0
ay.f = 0
HideWindow(0, 0)
Repeat
ExamineKeyboard()
ClearScreen(0)
ax = WindowMouseX(0) / ScreenWidth * #PI
Start3D()
For y = 0 To #MAX_Steps
For x = 0 To #MAX_Steps
SetVerticePos(x, y, x * StepX + (x - #MAX_Steps /2 ) * #Ang_Strength * Cos(ax) - (x - #MAX_Steps /2) * #Dist_Strength, y * StepY + (y - #MAX_Steps /2 ) * #Ang_Strength * Sin(ay) - (y - #MAX_Steps /2) * #Dist_Strength)
DisplaySprite3D(Surfaces(x, y)\SPR, 0, 0, 255)
ay + (#PI / #MAX_Steps)
Next
ax + (#PI / #MAX_Steps)
ay = WindowMouseY(0) / ScreenHeight * #PI
Next
Stop3D()
FlipBuffers()
Until WindowEvent() = #WM_CLOSE Or KeyboardPushed(#PB_Key_Escape)
oui j'ai vu sa mais je voie pas comment regler ce problemeCe serait parfait de chez parfait si la fenetre avait sa taille réelle quand elle arrive à la fin, hors de ce que j'ai vu, elle est carré et il reste une bande noire à droite
Code : Tout sélectionner
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
End
EndIf
If InitSprite3D() = 0
MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
End
EndIf
Procedure appuie()
#Desk = #True
If #Desk = #True
keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
EndIf
EndProcedure
Delay(100)
appuie()
If ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
ProfondeurCouleur = DesktopDepth(0)
Else
End
EndIf
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(0))
BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000)
StopDrawing()
ReleaseDC_(0, DC)
ResizeImage(0, 800, 600, #PB_Image_Smooth)
SaveImage(0, "c:/Screenshoot.bmp", #PB_ImagePlugin_BMP)
If OpenScreen(800, 600, 16, "Sprite")
LoadSprite(0, "c:/screenshoot.bmp", #PB_Sprite_Texture)
CreateSprite3D(0, 0)
CreateSprite3D(1, 0)
Sprite3DQuality(1)
TransparentSpriteColor(0, RGB(255, 0, 255))
Repeat
FlipBuffers()
ClearScreen(RGB(0,0,0))
If Start3D()
DisplaySprite3D(0, 0, 0, 255)
For a = 1 To 1000
DisplaySprite3D(0, x*a, a, 255)
Next
Stop3D()
EndIf
ExamineKeyboard()
x+1
Until x > 850 Or KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf
End
Bon, je vais retourner chercher mon pc dans la poubelle de l'immeuble avant demain matin 6h@Kwai : oui je les ai aussi, je sait pas d'ou ça vient...
Te casse pas trop la tete, c'est deja super cool, peut etre que quelqu'un passera par la ....oui j'ai vu sa mais je voie pas comment regler ce probleme .
fin si j'ai le temps je regarderais .
Mais ou allez vous cherchez toutes ces idéessi non j'ai cette effet la qui ressemble beaucoup au 1er de Mytic :
je pense que oui car je n'est pas de fonction qui règle la qualité de l'imageSur le dernier l'image est un peu flou, je pense que ce doit etre normal.
Code : Tout sélectionner
Procedure appuie()
#Desk = #True
If #Desk = #True
keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
EndIf
EndProcedure
Delay(100)
appuie()
If ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
ProfondeurCouleur = DesktopDepth(0)
Else
End
EndIf
DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(0))
BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000) ; <----on copie l'image qui est dans le dossier temporaire
StopDrawing()
ReleaseDC_(0, DC)
SaveImage(0, "c:/Screenshoot.bmp", #PB_ImagePlugin_BMP) ; <---on la colle ou on veut :)
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
End
EndIf
If InitSprite3D() = 0
MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
End
EndIf
If OpenScreen(Ecran_Largeur, Ecran_Hauteur, ProfondeurCouleur, "Sprite")
; Load our 16 bit sprite (which is a 24 bit picture in fact, as BMP doesn't support 16 bit format)
;
LoadSprite(0, "c:/Screenshoot.bmp", #PB_Sprite_Texture)
CreateSprite3D(1, 0)
Sprite3DQuality(0)
TransparentSpriteColor(0, RGB(255, 0, 255)) ; Our pink is transparent :)
Repeat
; Inverse the buffers (the back become the front (visible)... And we can do the rendering on the back)
FlipBuffers()
ClearScreen(RGB(0,0,0))
; Draw our sprite
;
If Start3D()
ZoomSprite3D(1, x, x)
RotateSprite3D(1, 2, 1)
For a = 1 To 12
DisplaySprite3D (1, a, a, 255)
Next
Stop3D()
EndIf
ExamineKeyboard()
x+1
Until x > 900 Or KeyboardPushed(#PB_Key_Escape)
Delay(500)
ClearScreen(RGB(0,0,50))
Else
MessageRequester("Error", "Can't open a 800*600 - 16 bit screen !", 0)
EndIf
End
oui c'est sur j'ai meme pas eu le temps de metre saPeut etre devrais tu mettre le chemin du screenshot en variable au debut du code, puis mettre un deletefile chemin de la variable, comme ça à la fin du code plus de trace de ton screenshot.bmp
Code : Tout sélectionner
; Petit délire Pychadélique dont Dobro m'a dit qu'il avait un nom !
; "Les taches de Martin", moi je n'en savait rien, Pure hasard, on nous cache tout !
; Grosso modo on fait une moyenne des couleurs autour d'un pixel considéré
; que l'on remet dans ce pixel et on recommence :)
#dobro=1 ; gestion des sprites aimablement expliquée par Dobro
#Police=1
#Sprite=1
spr=1
Dim ecran(640,480)
For x = 0 To 639 ; un écran de couleurs aléatoires
For y = 0 To 479
r=Random(255)
g=Random(255)
b=Random(255)
c=RGB(r,g,b) ;Couleur du pixel
ecran(x,y)= c
Next y
Next x
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = 600 ;=largeur de l'ecran
EcranY = 480;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, 640, 480, #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "Move the mouse slowly in any direction :)")
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, 640, 480, 1, 0,0)
CreateSprite(1, 640, 480) ; cree 1 sprites qui sert d'ecran 1
CreateSprite(2, 640, 480) ; cree 1 sprites qui sert d'ecran 2
Repeat ;Boucle principale
Event=WindowEvent()
GetCursorPos_(CursorPos.POINT) ; position de la souris
MouseX = CursorPos\x
MouseY = CursorPos\y
If xt <> MouseX ; test pour influer la variable m (la moyenne)
If xt> MouseX
m = m-1
Else
m = m+1
EndIf
EndIf
If yt <> MouseY ; test pour influer la variable s (le seuil)
If yt> MouseY
s = s-1
Else
s = s+1
EndIf
EndIf
xt=MouseX ; on met en la position de la souris en tampon
yt= MouseY ;
StartDrawing(SpriteOutput(spr) ) ; on dessine dedans
; trace à l'ecran et test pour avoir une image "torique"
For x = 1 To 638 ; lignes intérieures
For y = 1 To 478 ;genre de moyenne de couleur autour du pixel considéré
c=ecran(x-1,y) + ecran(x+1,y) + ecran(x,y-1) + ecran(x,y+1)
Gosub t_race
Next y
Next x
For x = 1 To 638 ;ligne x 0
c=ecran(x-1,0) + ecran(x+1,0) + ecran(x,1) + ecran(x,479)
y=0
Gosub t_race
Next x
For x = 1 To 638 ;ligne x 479
c=ecran(x-1,479) + ecran(x+1,479) + ecran(x,1) + ecran(x,478)
y=479
Gosub t_race
Next x
For y = 1 To 478 ;colonne 0 y
c=ecran(639,y) + ecran(1,y) + ecran(0,y-1) + ecran(0,y+1)
x= 0
Gosub t_race
Next y
For y = 1 To 478 ;colonne 639 y
c=ecran(638,y) + ecran(0,y) + ecran(639,y-1) + ecran(639,y+1)
x= 639
Gosub t_race
Next y
;Les 4 coins
c=ecran(639,0) + ecran(1,0) + ecran(0,479) + ecran(0,1)
x=0
y=0
Gosub t_race
c=ecran(639,479) + ecran(1,479) + ecran(0,478) + ecran(0,0)
x=0
y=479
Gosub t_race
c=ecran(638,0) + ecran(0,0) + ecran(639,479) + ecran(639,1)
x=639
y=0
Gosub t_race
c=ecran(638,479) + ecran(0,479) + ecran(639,478) + ecran(639,0)
x=639
y=479
Gosub t_race
StopDrawing()
spr=spr+1
If spr>2
spr=1
EndIf
DisplaySprite(spr, 0, 0)
FlipBuffers():; affiche l'ecran
ClearScreen(0, 0, 0) :;efface l'ecran
Until Event=#PB_Event_CloseWindow
End
t_race :
If m <4 ; test d'un genre de moyenne de couleur autour du pixel considéré
m = 4
EndIf
If m>40 ; moyenne haute fixée arbitrairement
m=20
EndIf
If s <0 ; seuil de valeur de couleurs défini arbitrairement
s = 1
EndIf
If s>10000
s=10000
EndIf
; c est la couleur finale du pixel
c=c/m ;Genre de moyenne de couleurs des 4 voisins du pixel considéré
; s est le seuil
;C'est la moyenne et le seuil qui déterminent ces genres d'images totalement différentes!
If c<s
c=RGB(125,125,125) ;Si la moyenne de couleurs dépasse un seuil on la normalise
EndIf
ecran(x,y)=c ; nouvelle couleur dans un tableau de l'image
Plot(x,y,c) ; on affiche le pixel avec la nouvelle couleur
Return
Code : Tout sélectionner
; Petit délire Pychadélique dont Dobro m'a dit qu'il avait un nom !
; "Les taches de Martin", moi je n'en savait rien, Pure hasard, on nous cache tout !
; Grosso modo on fait une moyenne des couleurs autour d'un pixel considéré
; que l'on remet dans ce pixel et on recommence :)
#dobro=1 ; gestion des sprites aimablement expliquée par Dobro
#Police=1
#Sprite=1
spr=1
Dim ecran(640,480)
For x = 0 To 639 ; un écran de couleurs aléatoires
For y = 0 To 479
r=Random(255)
g=Random(255)
b=Random(255)
c=RGB(r,g,b) ;Couleur du pixel
ecran(x,y)= c
Next y
Next x
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = 600 ;=largeur de l'ecran
EcranY = 480;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, 640, 480, "Move the mouse slowly in any direction :)", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, 640, 480, 1, 0,0)
CreateSprite(1, 640, 480) ; cree 1 sprites qui sert d'ecran 1
CreateSprite(2, 640, 480) ; cree 1 sprites qui sert d'ecran 2
Repeat ;Boucle principale
Event=WindowEvent()
GetCursorPos_(CursorPos.POINT) ; position de la souris
MouseX = CursorPos\x
MouseY = CursorPos\y
If xt <> MouseX ; test pour influer la variable m (la moyenne)
If xt> MouseX
m = m-1
Else
m = m+1
EndIf
EndIf
If yt <> MouseY ; test pour influer la variable s (le seuil)
If yt> MouseY
s = s-1
Else
s = s+1
EndIf
EndIf
xt=MouseX ; on met en la position de la souris en tampon
yt= MouseY ;
StartDrawing(SpriteOutput(spr) ) ; on dessine dedans
; trace à l'ecran et test pour avoir une image "torique"
For x = 1 To 638 ; lignes intérieures
For y = 1 To 478 ;genre de moyenne de couleur autour du pixel considéré
c=ecran(x-1,y) + ecran(x+1,y) + ecran(x,y-1) + ecran(x,y+1)
Gosub t_race
Next y
Next x
For x = 1 To 638 ;ligne x 0
c=ecran(x-1,0) + ecran(x+1,0) + ecran(x,1) + ecran(x,479)
y=0
Gosub t_race
Next x
For x = 1 To 638 ;ligne x 479
c=ecran(x-1,479) + ecran(x+1,479) + ecran(x,1) + ecran(x,478)
y=479
Gosub t_race
Next x
For y = 1 To 478 ;colonne 0 y
c=ecran(639,y) + ecran(1,y) + ecran(0,y-1) + ecran(0,y+1)
x= 0
Gosub t_race
Next y
For y = 1 To 478 ;colonne 639 y
c=ecran(638,y) + ecran(0,y) + ecran(639,y-1) + ecran(639,y+1)
x= 639
Gosub t_race
Next y
;Les 4 coins
c=ecran(639,0) + ecran(1,0) + ecran(0,479) + ecran(0,1)
x=0
y=0
Gosub t_race
c=ecran(639,479) + ecran(1,479) + ecran(0,478) + ecran(0,0)
x=0
y=479
Gosub t_race
c=ecran(638,0) + ecran(0,0) + ecran(639,479) + ecran(639,1)
x=639
y=0
Gosub t_race
c=ecran(638,479) + ecran(0,479) + ecran(639,478) + ecran(639,0)
x=639
y=479
Gosub t_race
StopDrawing()
spr=spr+1
If spr>2
spr=1
EndIf
DisplaySprite(spr, 0, 0)
FlipBuffers():; affiche l'ecran
ClearScreen(RGB(0, 0, 0)) :;efface l'ecran
Until Event=#PB_Event_CloseWindow
End
t_race :
If m <4 ; test d'un genre de moyenne de couleur autour du pixel considéré
m = 4
EndIf
If m>40 ; moyenne haute fixée arbitrairement
m=20
EndIf
If s <0 ; seuil de valeur de couleurs défini arbitrairement
s = 1
EndIf
If s>10000
s=10000
EndIf
; c est la couleur finale du pixel
c=c/m ;Genre de moyenne de couleurs des 4 voisins du pixel considéré
; s est le seuil
;C'est la moyenne et le seuil qui déterminent ces genres d'images totalement différentes!
If c<s
c=RGB(125,125,125) ;Si la moyenne de couleurs dépasse un seuil on la normalise
EndIf
ecran(x,y)=c ; nouvelle couleur dans un tableau de l'image
Plot(x,y,c) ; on affiche le pixel avec la nouvelle couleur
Return