effet de lumière
Publié : mar. 14/juin/2011 16:45
J'étais trop fier de moi, j'avais trouvé une technique pour faire des zolies effets de lumières et ça marchait du feu de dieu ...
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 ?
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