Conseils pour bosser avec CATransform3D

Bonjour !


 


Je cherche à  faire quelque chose qui a l'air délicat avec CATransform3D et avant de me lancer dans la doc et dans les calculs :


 


Connaissez-vous des librairies utiles pour travailler avec CATransform3D ?


A priori, si ce que je cherche n'existe pas, je vais avoir besoin de composer des CATransform3D. Ce n'est pas compliquer à  coder, mais si c'est déjà  fait...


 


 


*************************


 


Mon problème est le suivant :


Je veux appliquer à  ma vue une transfo T dont je connais l'expression si le anchorPoint est (a,b). Mais, je n'ai pas la possibilité de changer le anchorPoint de ma vue ! (cf. la question du SO)


 


En effet, la transfo va être appliquée par le framework UICollectionView, elle va être stockée dans des UICollectionViewLayoutAttributes et il n'y a pas de @property anchorPoint...


 


La piste que je vois pour l'instant est d'exprimer T dans le anchorPoint (1/2, 1/2). J'ai un peu googleisé mais pas de trace d'une fonction qui ferait ça. À mon avis, il suffit d'appliquer un changement de repère. 


 


Une autre piste serait de sous-classer UICollectionViewLayoutAttributes ...


 


 


**************


 


Merci si vous avez des remarques ou conseils !


Réponses

  • AliGatorAliGator Membre, Modérateur
    Bah tu n'as juste qu'à  composer tes matrices de transformation. C'est là  toute la puissance des matrices de transformation d'ailleurs.

    Tu appliques une CATransform3D de translation d'abord, qui va faire une translation de ton point (0.5, 0.5) vers ton point [tt](a, B)[/tt], puis ta transformation T, puis une CATransformation de translation dans l'autre sens pour ramener ton point [tt](a, B)[/tt] en (0.5, 0.5).

    Bon faut juste pas se gourrer dans l'ordre d'application des transformations (en général c'est souvent l'ordre inverse de celui qui nous vient de prime abord :D).

    Il doit trainer tout plein d'explications et de schemas dans les Programming Guide Apple sur le sujet je pense.
  • colas_colas_ Membre
    février 2015 modifié #3
    Merci de ta reponse.


    Oui tu as raison, je cherchais une fonction qui compose deux transformations quelconques, mais ici il suffit de composer par des translations. (YAGNI......)


    Pour le sens, c'est généralement PTP^-1 qui est la bonne écriture. Ici avec P qui translate 0.5,0.5 vers a,b on voit que ca marche en constatant que a,b est bien invariant si T est une rotation ;-)
  • colas_colas_ Membre
    février 2015 modifié #4

    ça y est ! je pense que j'ai réussi !


     


    En fait, il existe une commande pour faire le produit de transformations, c'est CATransform3DConcat ! Dans un premier temps, ça ne marchait pas. Attention piège : si on veut appliquer la transfo T.T' il faut faire CATransform3DConcat( T',T) !!!!


  • AliGatorAliGator Membre, Modérateur
    Bah oui c'est de ça que je te parlais en fait. Et pour ça que je te disais que l'ordre est en général inversé par rapport à  l'intuition ;)
  • Oui une fois que je m'en suis rendu compte, j'ai mieux compris ton message.


Connectez-vous ou Inscrivez-vous pour répondre.