Mais en rentrant chez moi,je suis vachement surprit ! ce code fonctionne sur tout les vieux pcs ...et sur le plus récent il saccade a mort (i7 860 et ATI HD5700 avec PBx64)
pour tester changer la ligne avec le LoadSprite(0,"sol.jpg",#PB_Sprite_Texture) pour la faire pointer sur une image en jpg sur votre disque dur !
dite moi ce que ça donne chez vous, et si vous avez une idée d'où peut venir cette saccade ?
Code : Tout sélectionner
;-http://www.alpha-arts.net/blog/articles/view/18/moteur-de-lumieres
Structure game
width.l
height.l
backgroundColor.l
EndStructure
Global game.game
game\width=800
game\height=600
game\backgroundColor=#White
If InitSprite() And InitSprite3D()
If InitKeyboard() And InitMouse()
winMain = OpenWindow(#PB_Any,0,0,game\width,game\height,"Press [Esc] to close",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(winMain), 0, 0, game\width, game\height, 1, 0, 0)
UsePNGImageDecoder()
UseJPEGImageDecoder()
SetFrameRate(60)
EndIf
Else
MessageRequester("","Unable to initsprite") :
EndIf
UseJPEGImageDecoder()
Enumeration
#Background
#ClearScreen
#Light1
#Light2
#Light3
#CompositeLight
EndEnumeration
LoadSprite(#Background,"sol.jpg",#PB_Sprite_Texture)
CreateSprite3D(#Background,#Background)
CreateSprite(#ClearScreen,16,16,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(#ClearScreen))
Box(0,0,16,16,RGB(1,1,1))
StopDrawing()
CreateSprite3D(#ClearScreen,#ClearScreen)
CreateSprite(#Light1,256,256,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(#Light1))
Box(0,0,256,256,#Black)
For z=0 To 128
col=RGB(z*2,0,0)
Circle(128,128,128-z,col)
Next
StopDrawing()
CreateSprite3D(#Light1,#Light1)
CreateSprite(#Light2,256,256,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(#Light2))
Box(0,0,256,256,#Black)
For z=0 To 128
col=RGB(0,z*2,0)
Circle(128,128,128-z,col)
Next
StopDrawing()
CreateSprite3D(#Light2,#Light2)
CreateSprite(#Light3,256,256,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(#Light3))
Box(0,0,256,256,#Black)
For z=0 To 128
col=RGB(z*2,z*2,z*2)
Circle(128,128,128-z,col)
Next
StopDrawing()
CreateSprite3D(#Light3,#Light3)
Macro myClearScreen()
Sprite3DBlendingMode(5, 6):ZoomSprite3D(#ClearScreen,game\width,game\height):DisplaySprite3D(#ClearScreen,0,0)
EndMacro
Repeat
Delay(1)
EventID = WindowEvent()
ExamineKeyboard()
ExamineMouse()
Start3D()
Sprite3DQuality(0)
;On efface l'ecran
myClearScreen()
;On dessine les lumières
Sprite3DBlendingMode(2, 4)
DisplaySprite3D(#Light1,128,0)
DisplaySprite3D(#Light2,128,128)
DisplaySprite3D(#Light3,MouseX(),MouseY())
;On memorise ke sprite
If IsSprite3D(#CompositeLight):FreeSprite3D(#CompositeLight):FreeSprite(#CompositeLight):EndIf
GrabSprite(#CompositeLight,0,0,game\width,game\height,#PB_Sprite_Texture)
CreateSprite3D(#CompositeLight,#CompositeLight)
;On passe en mode normal
myClearScreen()
;j'affiche le fond
DisplaySprite3D(0,0,0)
;On rajoute la lumière
Sprite3DBlendingMode(6, 3)
DisplaySprite3D(#CompositeLight,0,0)
Stop3D()
StartDrawing(ScreenOutput())
DrawText(20,20,Str(x)+" "+Str(y))
StopDrawing()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape) Or EventID = #PB_Event_CloseWindow