savez-vous s'il est possible de changer la couleur d'un sprite3D ?
J'ai essayé en changeant la couleur des vertex, mais je ne sais pas pourquoi, ça ne marche pas hélas.
Une autre idée ?
Merci

Code : Tout sélectionner
; DirectX9
Structure D3DTLVERTEX
x.f
y.f
z.f
rhw.f
Color.l
tu.f
tv.f
EndStructure
Structure PB_DX9Sprite3D
TexRes.I ; TexRes
Vertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
TmpVertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
Width.l ; width set with ZoomSprite3D()
Height.l ; height set with ZoomSprite3D()
RealWidth.l
RealHeight.l
Angle.f
Transformed.l
EndStructure
Procedure SetColor(sprite3d, Color.l)
Protected *Sprite3D.PB_DX9Sprite3D = IsSprite3D(sprite3d)
With *Sprite3D
\Vertice[0]\Color = Color.l
\Vertice[1]\Color = Color.l
\Vertice[2]\Color = Color.l
\Vertice[3]\Color = Color.l
EndWith
EndProcedure
Code : Tout sélectionner
;Disable Backface Culling - must be done AFTER "OpenScreen"
Define pd3d.IDirect3DDevice9
Start3D()
EnableASM
!extrn _PB_Screen_Direct3DDevice
!MOV dword EAX, [_PB_Screen_Direct3DDevice]
!MOV dword [v_pd3d],EAX
DisableASM
pd3d\SetRenderState(22,1)
pd3d\SetRenderState(7,0)
Stop3D()
;0=No Flip, 1=Horiz, 2=Vert, 3=Both
Procedure TformSprite3D(SpriteID.l,sizeX.i,sizeY.i,flipmode.i=0)
Select flipmode
Case 0
TransformSprite3D(SpriteID,0,0,sizeX,0,sizeX,sizeY,0,sizeY)
Case 1
TransformSprite3D(SpriteID,sizeX,0,0,0,0,sizeY,sizeX,sizeY)
Case 2
TransformSprite3D(SpriteID,0,sizeY,sizeX,sizeY,sizeX,0,0,0)
Case 3
TransformSprite3D(SpriteID,sizeX,sizeY,0,sizeY,0,0,sizeX,0)
EndSelect
EndProcedure
Code : Tout sélectionner
; These variables are used in the myTransformSprite3D macro (they're defined here because it can't be done in the macro)
Global TRF3D_angCos.f,TRF3D_angSin.f,TRF3D_x1.f,TRF3D_y1.f,TRF3D_x2.f,TRF3D_y2.f,TRF3D_x3.f,TRF3D_y3.f,TRF3D_x4.f,TRF3D_y4.f
; Define the size for a sprite3D, its origin (in pixels), and its rotation angle (absolute)
; Replace the following BlitzMax commands: "SetScale", "SetImageHandle", and "SetRotation"
Macro myTransformSprite3D(numSprite,sizeX,sizeY,pivotX = 0,pivotY = 0,angle = 0)
; In PureBasic, a Sprite3D is used to display 2D sprite with 3D hardware ; it's just a textured plane, actually.
; Thus, it's possible to zoom, rotate or deform a 3D sprite simply by moving its 4 vertex.
; This is done through the "TransformSprite3D" command.
If angle = 0
TransformSprite3D(numSprite,-(pivotX),-(pivotY),(sizeX) - (pivotX),-(pivotY),(sizeX) - (pivotX),(sizeY) - (pivotY),-(pivotX),(sizeY) - (pivotY))
Else
TRF3D_angCos = Cos(angle)
TRF3D_angSin = Sin(angle)
TRF3D_x1 = -(pivotX) * TRF3D_angCos - (-(pivotY) * TRF3D_angSin)
TRF3D_y1 = -(pivotY) * TRF3D_angCos + (-(pivotX) * TRF3D_angSin)
TRF3D_x2 = ((sizeX) - (pivotX)) * TRF3D_angCos - (-(pivotY) * TRF3D_angSin)
TRF3D_y2 = -(pivotY) * TRF3D_angCos + ((sizeX) - (pivotX)) * TRF3D_angSin
TRF3D_x3 = ((sizeX) - (pivotX)) * TRF3D_angCos - ((sizeY) - (pivotY)) * TRF3D_angSin
TRF3D_y3 = ((sizeY) - (pivotY)) * TRF3D_angCos + ((sizeX) - (pivotX)) * TRF3D_angSin
TRF3D_x4 = -(pivotX) * TRF3D_angCos - ((sizeY) - (pivotY)) * TRF3D_angSin
TRF3D_y4 = ((sizeY) - (pivotY)) * TRF3D_angCos + (-(pivotX) * TRF3D_angSin)
TransformSprite3D(numSprite,TRF3D_x1,TRF3D_y1,TRF3D_x2,TRF3D_y2,TRF3D_x3,TRF3D_y3,TRF3D_x4,TRF3D_y4)
EndIf
EndMacro
super, je vais regarder ça avec attentionkelebrindae a écrit :J'ai fait une petite macro pour ça pour mes "blobmonsters" :http://www.purebasic.fr/french/viewtopi ... =6&t=11624
oui, j'avais vu mais je ne l'ai pas trouvé ou alors, la version que j'ai ne marche pas avec pb 4.51Sinon, il me semble que G-rom avait fait une UserLib pour toutes les manipulations de sprites 3D; "SuperSprite3D", je crois (mais je ne suis absolument pas sûr, là); tu peux peut-être jeter un oeil...