2010-10-07 14 views

risposta

18

È possibile trovare tutti i dettagli here. Si noti che Apple utilizza l'ordine di moltiplicazione invertito per la proiezione (relativo al collegamento dato) in modo che tutte le moltiplicazioni di matrice siano invertite e tutte le matrici siano trasposte.

Una breve descrizione del significato:

  • m34 = 1/z distanza piano di proiezione (z termine 1/e nel link di riferimento)
  • + per l'asse z è verso lo spettatore, con un conseguente "guardarsi allo specchio" sentire quando si utilizza -
  • centro di proiezione è (0,0,0) più eventuali traduzioni si imposta
+0

Qual è '' 1/z''? Ancora non capisco la tua spiegazione. Cosa significa m34? Cosa fa il cambiamento? – confile

+1

z è la distanza dal piano di proiezione, m43 = 1/z. Ho aggiornato la risposta per rendere questo punto un po 'più chiaro. Le modifiche cambiano la distanza e fanno apparire la prospettiva diversa sulla stessa scena. –

1

ho letto alcuni articoli includin g questo: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW13

mie risoluzioni è qui:

Entità:

  • eye - distanza da schermo a occhio
  • scale - scala visiva di oggetto trasformato
  • distance - distanza oggetto trasformato

formule di collegamento:

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

Esempio di calcolo Z-distance per la scala desized di distanza dell'occhio selezionato:

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); 
}