2010-10-07 14 views

Odpowiedz

18

Pełne informacje można znaleźć pod numerem here. Zwróć uwagę, że Apple używa odwróconego porządku mnożenia do rzutowania (względem danego linku), więc wszystkie multiplikacje macierzy są odwrócone i wszystkie macierze są transponowane.

Krótki opis znaczenie:

  • odległość M34 = 1/Z do płaszczyzny rzutowania (1/e z terminu w związku odniesienia)
  • + dla osi Z w kierunku widz, co skutkuje w „patrząc w lustro” czuć podczas używania -
  • centrum projekcja (0,0,0) plus wszelkie tłumaczenia skonfigurowaniu
+0

Co ' 1/z''? Nadal nie dostaję twojego wyjaśnienia. Co oznacza m34? Co robią zmiany? – confile

+1

z jest odległością do twojej płaszczyzny rzutu, m43 = 1/z. Zaktualizowałem odpowiedź, aby uczynić ten punkt nieco jaśniejszym. Zmiany zmieniają odległość i sprawiają, że perspektywa wygląda inaczej na tej samej scenie. –

1

czytałem kilka artykułów includin g tego: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW13

Moi uchwały jest tutaj:

podmioty:

  • eye - odległość od ekranu do oczu
  • scale - wizualna skala przekształconego obiektu
  • distance - odległość przekształcony obiekt

łączące wzorów:

  • scale = eye/(eye + distance)
  • distance = eye * (1.0/scale - scale)
  • eye = distance/(1.0/scale - scale)

Przykład obliczanie osi Z na odległość dla odklejoną skali wybranej odległości oka:

CATransform3D transformByScaleAndEye(CGFloat scale, CGFloat eye) { 
    CATransform3D t = CATransform3DIdentity; 
    t.m34 = -1.0/eye; 
    CGFloat distance = -eye*(1.0/scale - scale); 
    return CATransform3DTranslate(t, 0, 0, distance); 
}