2010-10-07 4 views

ответ

18

Вы можете найти более подробную информацию: here. Обратите внимание, что Apple использует обратный порядок умножения для проекции (относительно данной ссылки), поэтому все матричные умножения меняются на противоположные и все матрицы транспонируются.

Краткое описание значения:

  • m34 = 1/г расстояние до плоскости проекции (1/е г термина в ссылке и в)
  • + при ось г в направлении зритель, в результате чего «глядя в зеркало» чувствовать себя при использовании -
  • проекция центра (0,0,0) плюс любые переводы настройки
+0

Что такое '' 1/z''? Я до сих пор не понимаю ваше объяснение. Что означает m34? Что делают изменения? – confile

+1

z - расстояние до вашей проекционной плоскости, m43 = 1/z. Я обновил ответ, чтобы сделать этот пункт более понятным. Изменения меняют расстояние и делают перспективу другой на той же сцене. –

1

Я прочитал несколько статей includin г это одна: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW13

Мои постановления здесь:

Сущности:

  • eye - расстояние от экрана до глаз
  • scale - визуальная шкала преобразованного объекта
  • distance - расстояние до трансформированный объект

Подключение формулы:

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

Пример вычисления Z-расстояния для desized масштаба выбранного расстояния глаз:

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