Page 1 sur 1

SetSpriteUV()

Publié : ven. 02/oct./2015 13:03
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.

Re: SetSpriteUV()

Publié : ven. 02/oct./2015 15:15
par Mesa
Je pensais que les coordonnées UV n'étaient utilisées qu'en 3D donc avec un moteur 3D ?

M.

Re: SetSpriteUV()

Publié : ven. 02/oct./2015 16:53
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.

Re: SetSpriteUV()

Publié : ven. 02/oct./2015 19:30
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 ?

Re: SetSpriteUV()

Publié : ven. 02/oct./2015 20:35
par G-Rom
non ^^

Re: SetSpriteUV()

Publié : sam. 03/oct./2015 9:09
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

Re: SetSpriteUV()

Publié : sam. 03/oct./2015 10:45
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

Re: SetSpriteUV()

Publié : sam. 03/oct./2015 13:54
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 ? ^^

Re: SetSpriteUV()

Publié : mar. 06/oct./2015 18:19
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.

Re: SetSpriteUV()

Publié : mar. 06/oct./2015 20:53
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()

Re: SetSpriteUV()

Publié : mer. 07/oct./2015 6:53
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.