[résolu] changer la couleur d'un sprite3D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[résolu] changer la couleur d'un sprite3D

Message par blendman »

salut

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 :)
Dernière modification par blendman le jeu. 31/mars/2011 9:25, modifié 1 fois.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: changer la couleur d'un sprite3D

Message par kelebrindae »

Tiens, ce post traite assez simplement du problème: http://www.purebasic.fr/english/viewtop ... 13&t=43626

En résumé, si tu insères ceci dans ton code:

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
Et que tu fait un "SetColor(numsprite3d, [couleur au format BGR]), ça devrait marcher (j'ai testé).

Sauf si tu utilises openGL, bien sûr. Dans ce cas-là, tu es mort. :mrgreen:
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: changer la couleur d'un sprite3D

Message par blendman »

ah yes !! C'est excellent, ça marche à la perfection!!!

un immense merci kelebrindae, vraiment, merci beaucoup, c'est fabuleux ! :D
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: changer la couleur d'un sprite3D

Message par kelebrindae »

De rien (parce que vraiment, je n'ai rien fait à part d'indiquer le post d'un autre...).

Puisqu'on est dans la gestion des sprites 3D, voici aussi un petit bout de code permettant de faire des "miroirs" gauche/droite et haut/bas (tu l'as peut-être déjà):

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
Là encore, le code n'est pas de moi. Mais j'ai oublié de noter le nom de l'auteur dans mes archives, alors si quelqu'un reconnaît son code, qu'il n'hésite pas à venir revendiquer ses lauriers... :wink:
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: changer la couleur d'un sprite3D

Message par djes »

Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: changer la couleur d'un sprite3D

Message par venom »

comment faites-vous pour vous retrouver dans ce MSDN je suis toujours perdu une foi dedans :lol:







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: changer la couleur d'un sprite3D

Message par djes »

Google! :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: changer la couleur d'un sprite3D

Message par Le Soldat Inconnu »

Clair parce que la recherche bing de msdn, ça renvoie toujours n'importe quoi. Alors Google moi aussi
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: changer la couleur d'un sprite3D

Message par djes »

Ca me rappelle l'email envoyé par Bill Gates lorsqu'il avait vainement tenté de trouver la mise à jour de WMP sur le site Microsoft :lol:
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: changer la couleur d'un sprite3D

Message par blendman »

merci pour l'info Djes ;)

EDIT : tiens, au passage, vous savez s'il y amoyen de modifier le hotspot (point chaud ou origine) du sprite ?

car lorsque je fais une rotation d'un sprite, il me fait la rotation en utilisant comme centre le point (0,0) et je voudrais utiliser le hotpsot que j'ai défini pour cette rotation ;).

Merci encore :)
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: [résolu] changer la couleur d'un sprite3D

Message par kelebrindae »

J'ai fait une petite macro pour ça pour mes "blobmonsters" :http://www.purebasic.fr/french/viewtopi ... =6&t=11624
=> ça utilise "TransformSprite3D" pour déplacer les vertex du sprite 3D en fonction d'un point d'origine. Mais comme "zoomSprite3D" et "rotateSprite3D" remettaient à zéro les modifs de "TransformSprite3D", j'ai intégré le redimensionnement et la rotation dans la procédure:

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
Sinon, 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...
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [résolu] changer la couleur d'un sprite3D

Message par blendman »

kelebrindae a écrit :J'ai fait une petite macro pour ça pour mes "blobmonsters" :http://www.purebasic.fr/french/viewtopi ... =6&t=11624
super, je vais regarder ça avec attention :)
Sinon, 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...
oui, j'avais vu mais je ne l'ai pas trouvé ou alors, la version que j'ai ne marche pas avec pb 4.51


Tiens sinon, pour le sprite3D et la couleur, j'ai remarqué que les couleurs n'étaient pas bonnes (avec SetColor(sprite, color)).

Je voulais teinter un sprite en oranger avec RGB(244, 162, 117) et le sprite devient bleu (alors qu'il est blanc à l'origine).

Une idée du problème ? on dirait qu'il teinte avec les couleurs "complémentaires".

EDIT non, ok, format BGR et pas RGB j'avais mal lu :p
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [résolu] changer la couleur d'un sprite3D

Message par djes »

Kelebrindae> J'ai posté ton code là : http://www.purebasic.fr/english/viewtop ... 33#p350033
Pour supersprite3d, je l'avais remis quelque part sur le forum, ça doit se trouver.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: [résolu] changer la couleur d'un sprite3D

Message par kelebrindae »

Merci Djes. :)

@Blendman:
Tiens, si ça t'intéresse, j'ai rassemblé en un seul include toutes les fonctions nécessaires pour colorer, flipper, animer, ou placer des "hotspots" sur les sprites 3D. Et comme c'est un include, tu pourras modifier le code pour l'adapter à tes besoins.

C'est ici que ça se passe:
http://www.purebasic.fr/french/viewtopi ... =6&t=11703
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [résolu] changer la couleur d'un sprite3D

Message par blendman »

kelebrindae : super, merci beaucoup ! je vais regarder ça avec une grande attention ;)
Répondre