Je n'arrive pas a afficher un sprite 3D sur un sprite en utilisant Usebuffer(No du sprite)
c'est normal ? les sprite 3D ne fonctionne que sur le screen ?

ça serait genial ...Dr. Dri a écrit :alors en fait nan c'est pas possible... j'avais réussi à le faire en passant par direct x (faut juste que je retrouve comment) mais l'explication est simple...
si j'ai le temps je pourrais poster une fonction UseBuffer3D...
Dri
Désolé je ne voulais pas paraitre pressé, c'était juste pour savoir si tu pensais pouvoir le faire ou pas. Dans tout les cas c'est sympa, mais bon si tu n'as pas le temps je comprendrais !Dr. Dri a écrit :bah laisse moi le temps... peut etre dans quelques jours
(suis beaucoup moins dispo en ce moment)
Dri
Oui plus ça vas plus je passe aux Sprite3D moi aussi... C'est bien moi qui ai demandé aussi cette fonction. Je sais je demande beaucoup de choseDr. Dri a écrit :je pense commencer par ressortir une fonction pour ne dessiner ses Sprite3D que sur une zone précise de l'écran (c'est aussi toi qu'a demandé ?)
enfin bon je vais peut etre poster mes fonctions Sprite3D parce que je suis passé à 100% aux Sprite3D... Il suffit de changer légerrement sa facon de coder mais les performances chez moi sont plus optimales...
Dri
Code : Tout sélectionner
Structure D3DVIEWPORT7
dwX.l
dwY.l
dwWidth.l
dwHeight.l
dvMinZ.f
dvMaxZ.f
EndStructure
ProcedureDLL.l ScreenWidth()
!extrn _PB_Screen_Width
!MOV eax, [_PB_Screen_Width]
ProcedureReturn
EndProcedure
ProcedureDLL.l ScreenHeight()
!extrn _PB_Screen_Height
!MOV eax, [_PB_Screen_Height]
ProcedureReturn
EndProcedure
ProcedureDLL.l ScreenDepth()
!extrn _PB_Screen_Depth
!MOV eax, [_PB_Screen_Depth]
ProcedureReturn
EndProcedure
ProcedureDLL.l ClipScreen3D()
Protected Clip.l, *ViewPort.D3DVIEWPORT7
Protected Sprite3DDevice.IDirect3DDevice7
!extrn _PB_Direct3D_Device
!MOV eax, dword [_PB_Direct3D_Device]
!MOV dword [p.v_Sprite3DDevice], eax
!extrn _PB_3DViewPort
!MOV dword [p.p_ViewPort], _PB_3DViewPort
*ViewPort\dwX = 0
*ViewPort\dwY = 0
*ViewPort\dwWidth = ScreenWidth()
*ViewPort\dwHeight = ScreenHeight()
*ViewPort\dvMinZ = 0.0
*ViewPort\dvMaxZ = 1.0
If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
Clip = #True
EndIf
ProcedureReturn Clip
EndProcedure
ProcedureDLL.l ClipScreen3D2(x.l, y.l, Width.l, Height.l)
Protected Clip.l, *ViewPort.D3DVIEWPORT7
Protected Sprite3DDevice.IDirect3DDevice7
!MOV eax, dword [_PB_Direct3D_Device]
!MOV dword [p.v_Sprite3DDevice], eax
!MOV dword [p.p_ViewPort], _PB_3DViewPort
*ViewPort\dwX = x
*ViewPort\dwY = y
*ViewPort\dwWidth = Width
*ViewPort\dwHeight = Height
*ViewPort\dvMinZ = 0.0
*ViewPort\dvMaxZ = 1.0
If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
Clip = #True
EndIf
ProcedureReturn Clip
EndProcedure
ProcedureDLL.l ClipScreen3D3(x.l, y.l, Width.l, Height.l, MinZ.f, MaxZ.f)
Protected Clip.l, *ViewPort.D3DVIEWPORT7
Protected Sprite3DDevice.IDirect3DDevice7
!MOV eax, dword [_PB_Direct3D_Device]
!MOV dword [p.v_Sprite3DDevice], eax
!MOV dword [p.p_ViewPort], _PB_3DViewPort
*ViewPort\dwX = x
*ViewPort\dwY = y
*ViewPort\dwWidth = Width
*ViewPort\dwHeight = Height
*ViewPort\dvMinZ = MinZ
*ViewPort\dvMaxZ = MaxZ
If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
Clip = #True
EndIf
ProcedureReturn Clip
EndProcedure
InitSprite()
InitSprite3D()
OpenWindow(0, 0, 0, 640, 480, "ClipScreen3D")
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)
CreateSprite(0, 128, 128, #PB_Sprite_Texture)
If StartDrawing( SpriteOutput(0) )
Box(0, 0, 128, 128, #Green)
Circle(64, 64, 64, #Red)
StopDrawing()
EndIf
CreateSprite3D(0, 0)
If Start3D()
;ClipScreen3D2(0, 0, 100, 100)
DisplaySprite3D(0, 50, 50)
Stop3D()
EndIf
FlipBuffers()
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Mais si tu voix que c'est une trop grosse galère laisse tombé ! Je voudrais pas être celui qui a bouffé tout ton temps libre...Dr. Dri a écrit :une bonne et une mauvaise nouvelle ^^
je me rappelle comment faire ma fonction UseBuffer3D
je n'ai plus les constantes et la doc nécessaires
c'est devenu un parcours du combatant dx7... donc je télécharge tout le sdk (125 Mo) et je vais fouiller dedans.
Dri
J'ai quitté plus tôt aujourd'hui, et de toute facon je vais en avoir besoin aussi pour un effet assez sympa ^^Thyphoon a écrit :Mais si tu voix que c'est une trop grosse galère laisse tombé ! Je voudrais pas être celui qui a bouffé tout ton temps libre...
Maintenant si tu y arrive ça sera génial
Merci en tout cas !