SetSpriteUV()

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

SetSpriteUV()

Message par blendman »

Salut

savez-vous s'il est possible de modifier les UV sur un sprite ?
Par exemple, pour faire comme une rivière dont l'eau se déplace ou créer un sprite de sol dont la texture se répète ?

Merci.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: SetSpriteUV()

Message par Mesa »

Je pensais que les coordonnées UV n'étaient utilisées qu'en 3D donc avec un moteur 3D ?

M.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: SetSpriteUV()

Message par G-Rom »

Salut Blendman , avec les sprites, c'est pas possible de jouer directement avec les UV's. j'ai créer il y a qq année la lib "supersprite3D" , je n'ai plus les sources , mais de mémoire elles sont dispo sur le forum, il y a une structure qui intègre les uv des sprite, a voir si c'est compatible avec la version actuelle de pb.
une autre solution , utilisé ogre3D , sans la composante Z pour faire de la 2D. il y a aussi la fct° clipsprite(), mais c'est les coordonnée de texture qui sont utilisé pas les UVs


@Mesa. non , cela n'a rien à voir , les uv sont surtout utilisé pour les coordonnées de textures sur un vertex, que ce soit en 2D ou 3D ne change rien. la différence fondamentale entre la 2D et la 3D est la matrice de vue, l'une est "plate", l'autre avec une perspective.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SetSpriteUV()

Message par blendman »

il y a aussi la fct° clipsprite()
j'avais pensé à ça, mais on ne peut pas répéter une image sur une sprite, si ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: SetSpriteUV()

Message par G-Rom »

non ^^
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SetSpriteUV()

Message par blendman »

Dommage qu'on ne puisse pas répéter une image sur une sprite (comme en 3D), encore une fonction qu'il faudrait ajouter à la lib sprite ^^.

En attendant, j'ai fait ça, mais ce n'est pas vraiment optimisé (ça prend vite 1 ou 2 seconde, si on a un level genre 3000*4000 ^^)

Code : Tout sélectionner

Procedure SetSpriteRepeated(sprite,w,h)
  
  key$ = Str(sprite)
  
  
  If FindMapElement(GameLib_Sprite(),key$)
    
    image = GameLib_Sprite()\Image
    
    FreeSprite(sprite)
    Sp = CreateSprite(sprite,w,h,#PB_Sprite_AlphaBlending)
  
    
    If Sp = 0
      MessageRequester("Error","Unable to create the sprite "+Str(Sprite) +" with image "+Str(image))
    Else
      
      GameLib_Sprite(key$)\sprite = sprite
      GameLib_Sprite(key$)\w = w
      GameLib_Sprite(key$)\h = h
      w1 = ImageWidth(image)
      h1 = ImageHeight(image)
      repeatX = w/w1
      repeaty = h/h1
     
      If StartDrawing(SpriteOutput(GameLib_Sprite(key$)\sprite))
        
        DrawingMode(#PB_2DDrawing_AlphaBlend)
        For i=0 To repeatX
          For j = 0 To repeatY            
            DrawAlphaImage(ImageID(image),i*w1,j*h1)
          Next j
        Next i      
        StopDrawing()
      EndIf
      
    EndIf    
    
  EndIf
    
EndProcedure
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: SetSpriteUV()

Message par G-Rom »

Utilise ogre3D , sans la composante Z que tu laisse à zéro. j'ai fait un jeu de plateforme ( pour le punch ) utilisant Ogre3D, ca marche bien, très bien même.
je serais sur le tchat de falsam surement se soir entre 18 heures & ?? heures, si tu veut voir , viens faire un tour.
key$ = Str(sprite)
If FindMapElement(GameLib_Sprite(),key$)
on pourra parlé de cela aussi ^^ das ist not goude
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SetSpriteUV()

Message par blendman »

G-Rom a écrit :Utilise ogre3D , sans la composante Z que tu laisse à zéro. j'ai fait un jeu de plateforme ( pour le punch ) utilisant Ogre3D, ca marche bien, très bien même.
je serais sur le tchat de falsam surement se soir entre 18 heures & ?? heures, si tu veut voir , viens faire un tour.
j'avais pensé à utiliser ogre, mais ça veut dire refaire beaucoup de procédures pour les sprites, à voir si vraiment ça vaut le coup ^^.
key$ = Str(sprite)
If FindMapElement(GameLib_Sprite(),key$)
on pourra parlé de cela aussi ^^ das ist not goude[/quote] inde waille ? ^^
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SetSpriteUV()

Message par blendman »

G-Rom a écrit :Utilise ogre3D , sans la composante Z que tu laisse à zéro. j'ai fait un jeu de plateforme ( pour le punch ) utilisant Ogre3D, ca marche bien, très bien même.
Tu aurais un bout de code pour que je vois ce que ça donne ?
car j'ai testé ogre pour les sprites, et c'est vite la galère quand même (même s'il y a plusieurs fonctions très pratiques, comme la lumière ambiantes, les lights, les uv-textures, ^^).

Peut-on changer le centre (pivot) du mesh/entity créé ?
J'ai l'impression que tous les pivots sont situés au centre.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: SetSpriteUV()

Message par comtois »

blendman a écrit :Peut-on changer le centre (pivot) du mesh/entity créé ?
J'ai l'impression que tous les pivots sont situés au centre.
Oui avec TransformMesh() ou GetMeshData() et SetMeshData()
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SetSpriteUV()

Message par blendman »

comtois a écrit :
blendman a écrit :Peut-on changer le centre (pivot) du mesh/entity créé ?
J'ai l'impression que tous les pivots sont situés au centre.
Oui avec TransformMesh() ou GetMeshData() et SetMeshData()
ok, super, merci, je vais tester ça ;)

Autre question :
lorsqu'on utilise la projection orthogonale, pour la camera (CameraProjectionMode(#Camera, #PB_Camera_Orthographic))
, peut-on changer la focale ou autre chose, pour que les objets soient plus ou moins grands ?
J'ai essayé de changer la focale ou le Z, mais les sprites (des plans) sont toujours de la même taille.
Répondre