轉(zhuǎn)載請注明出處:http://m.itdecent.cn/p/dc1ca646c508
-
ARCamera是一個相機(jī),它是連接虛擬場景與現(xiàn)實(shí)場景之間的樞紐。在ARKit中,它是捕捉現(xiàn)實(shí)圖像的相機(jī),在SceneKit中它又是3D虛擬世界中的相機(jī)。(一般第一人稱3D游戲,主角其實(shí)就是一個3D相機(jī),我們電腦屏幕看到的畫面就是這個相機(jī)捕捉的畫面)
- 一般我們無需去創(chuàng)建一個相機(jī),因?yàn)楫?dāng)我們初始化一個AR試圖時,他會為我們默認(rèn)創(chuàng)建一個相機(jī),而且這個相機(jī)就是攝像頭的位置,同時也是3D世界中的原點(diǎn)所在(x=0,y=0,z=0)
- ARCamera的API一般我們無需關(guān)心,因?yàn)锳RKit會默認(rèn)幫助我們配置好
- 一般我們無需去創(chuàng)建一個相機(jī),因?yàn)楫?dāng)我們初始化一個AR試圖時,他會為我們默認(rèn)創(chuàng)建一個相機(jī),而且這個相機(jī)就是攝像頭的位置,同時也是3D世界中的原點(diǎn)所在(x=0,y=0,z=0)
API介紹
@interface ARCamera : NSObject <NSCopying>
/**
4x4矩陣表示相機(jī)位置,同ARAnchor
*/
@property (nonatomic, readonly) matrix_float4x4 transform;
/**
相機(jī)方向(旋轉(zhuǎn))的矢量歐拉角
分別是x/y/z
*/
@property (nonatomic, readonly) vector_float3 eulerAngles;
/**
相機(jī)追蹤狀態(tài)(在下方會有枚舉值介紹)
*/
@property (nonatomic, readonly) ARTrackingState trackingState NS_REFINED_FOR_SWIFT;
/**
追蹤運(yùn)動類型
*/
@property (nonatomic, readonly) ARTrackingStateReason trackingStateReason NS_REFINED_FOR_SWIFT;
/**
相機(jī)曲率(筆者有點(diǎn)費(fèi)解,反復(fù)揣摩應(yīng)該是與焦距相關(guān)參數(shù))
3x3矩陣
fx 0 px
0 fy py
0 0 1
*/
@property (nonatomic, readonly) matrix_float3x3 intrinsics;
/**
攝像頭分辨率
*/
@property (nonatomic, readonly) CGSize imageResolution;
/**
投影矩陣
*/
@property (nonatomic, readonly) matrix_float4x4 projectionMatrix;
/**
創(chuàng)建相機(jī)投影矩陣
*/
- (matrix_float4x4)projectionMatrixWithViewportSize:(CGSize)viewportSize orientation:(UIInterfaceOrientation)orientation zNear:(CGFloat)zNear zFar:(CGFloat)zFar;
@end
//相機(jī)追蹤狀態(tài)枚舉
typedef NS_ENUM(NSInteger, ARTrackingState) {
/** 不被允許 */
ARTrackingStateNotAvailable,
/** 最小 */
ARTrackingStateLimited,
/** 正常. */
ARTrackingStateNormal,
} NS_REFINED_FOR_SWIFT;
/**
追蹤運(yùn)動類型
*/
API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(macos, watchos, tvos)
typedef NS_ENUM(NSInteger, ARTrackingStateReason) {
/** 無. */
ARTrackingStateReasonNone,
/** 運(yùn)動. */
ARTrackingStateReasonExcessiveMotion,
/** 臉部捕捉. */
ARTrackingStateReasonInsufficientFeatures,
} NS_REFINED_FOR_SWIFT;