Какво е значението на m34 от структурата CATransform3D, знам само, че може да промени перспективата, но какво е значението, когато стойността е -0,001 и 0,001?
значение на m34 на CATransform3D
comment
m34 означава запис на позиция 3,4 в матрицата. developer.apple.com/documentation/quartzcore/catransform3d/
- person Koen.   schedule 21.09.2020
Отговори (2)
Можете да намерите пълните подробности тук. Имайте предвид, че Apple използва обратния ред на умножение за проекция (спрямо дадената връзка), така че всички умножения на матрици са обърнати и всички матрици са транспонирани.
Кратко описание на значението:
- m34 = 1/z разстояние до проекционната равнина (терминът 1/ez в референтната връзка)
- + за оста z е към зрителя, което води до усещане за "гледане в огледалото" при използване -
- прожекционният център е (0,0,0) плюс всички преводи, които сте задали
person
Mihai Timar
schedule
29.09.2011
Какво е
1/z
? Все още не разбирам обяснението ти. Какво означава m34? Какво правят промените?
- person confile; 04.06.2015
z е разстоянието до равнината на вашата проекция, m43 = 1/z. Актуализирах отговора, за да направя тази точка малко по-ясна. Промените променят разстоянието и правят перспективата да изглежда различна на една и съща сцена.
- person Mihai Timar; 05.06.2015
Прочетох някои статии, включително тази: 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-разстояние за мащаб с намален размер на избраното разстояние между очите:
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);
}
person
k06a
schedule
19.01.2017