第三個Demo拂盯,專門研究了SCNCamera
。
這個實例就是把SCNCamera
的各個屬性列出來记靡,通過值變化觀察實際作用。
Demo不細講了团驱,主要紀錄一下測試結(jié)果摸吠。
SCNCamera
SCNKit的坐標系如下圖,X軸左負右正嚎花,Y軸下負上正寸痢,Z軸前負后正。
默認情況下紊选,SCNCamera總是沿著節(jié)點的坐標系(0,0,0)像-z軸方向觀看啼止。
所以說默認情況下,我們看不到物件兵罢,因為我們在物件的里面献烦。
我們可以使用postion
、eulerAngles
卖词、scale
巩那、rotation
、transform
等來調(diào)整觀看的角度和形狀此蜈〖春幔可以通過zFar
、zNear
等來調(diào)整觀看的范圍裆赵。
Position
/*!
@property position
@abstract Determines the receiver's position. Animatable.
*/
@property(nonatomic) SCNVector3 position;
決定了接收機的位置东囚。
SCNVector3 是一個三維坐標系,分為x,y,z战授。默認是在原點(0,0,0)页藻。
當x<0時桨嫁,表示相機在水平位置往左移了,看到飛船就會在右邊惕橙。是左側(cè)視角瞧甩。
y<0時苍柏,相機往下移動哺徊,飛船出現(xiàn)在上面策菜。是仰視視角厚掷。
z<0時沪斟,相機向前移動皮胡,飛船出現(xiàn)在后方面叉信。是遠視視角米辐。
所以栓始,如果想讓飛船出現(xiàn)在視野中务冕,只需要設(shè)置z>0即可。具體值需要根據(jù)飛船的大小和需要觀測的距離決定幻赚。z要大于物件禀忆,z軸方向z越大,就離得越遠落恼,觀察到的就越小箩退。
Euler Angles
/*!
@property eulerAngles
@abstract Determines the receiver's euler angles. Animatable.
@dicussion The order of components in this vector matches the axes of rotation:
1. Pitch (the x component) is the rotation about the node's x-axis (in radians)
2. Yaw (the y component) is the rotation about the node's y-axis (in radians)
3. Roll (the z component) is the rotation about the node's z-axis (in radians)
SceneKit applies these rotations in the reverse order of the components:
1. first roll
2. then yaw
3. then pitch
*/
@property(nonatomic) SCNVector3 eulerAngles API_AVAILABLE(macos(10.10));
歐拉角,注釋看得有點暈佳谦〈骼裕看Demo
也是一個三維坐標系,默認(0,0,0)钻蔑。
繞三個軸的旋轉(zhuǎn)值pitch啥刻,yaw,roll咪笑,意思為俯仰角可帽,偏航角,翻滾角窗怒,
當x<0時蘑拯,飛船往上飛了。反之x>0兜粘,飛船往下申窘。
當y<0時,飛船往左孔轴。同理y>0剃法,飛船往右。
當z<0時路鹰,飛船逆時針翻滾贷洲。x>0收厨,飛船順時針翻滾。
需要注意的是优构,這個只是觀察角度诵叁,實際上物件位置并沒有變化。
Scale
/*!
@property scale
@abstract Determines the receiver's scale. Animatable.
*/
@property(nonatomic) SCNVector3 scale;
物件縮放比钦椭。
同樣是三維坐標系拧额,默認(1,1,1)。
當x>0時彪腔,物件在x軸的長度會隨x增加而變小侥锦。當x==1時為原始大小。
當x<0時德挣,物件在x軸的長度會隨x減小而變小恭垦。當x==-1時為原始大小。此時物件顯示為背面格嗅。這個為什么會顯示成背面我暫時沒有理解番挺。所有的點都乘以一個負數(shù),說明在負坐標系的空間屯掖。不過平常使用過程中應(yīng)該也不會出現(xiàn)x<0的情況建芙。
y軸和z軸同理對應(yīng),物件在y軸和z軸的變化懂扼。
Z Far
/*!
@property zFar
@abstract Determines the receiver's far value. Animatable.
@discussion The far value determines the maximal distance between the camera and a visible surface. If a surface is further from the camera than this maximal distance, then the surface is clipped. Defaults to 100.
*/
@property(nonatomic) double zFar;
決定相機和可見表面之間的最大距離。如果一個物體的表面比這個最大的距離更遠右蒲,那么它的表面就會被剪掉阀湿。默認為100。
Z Near
/*!
@property zNear
@abstract Determines the receiver's near value. Animatable.
@discussion The near value determines the minimal distance between the camera and a visible surface. If a surface is closer to the camera than this minimal distance, then the surface is clipped. The near value must be different than zero. Defaults to 1.
*/
@property(nonatomic) double zNear;
決定了相機和可見表面之間的最小距離瑰妄。如果一個表面離攝像機比這個最小距離更近陷嘴,那么表面就會被剪掉。接近的值必須與零不同间坐。默認為1灾挨。
Rotation
/*!
@property rotation
@abstract Determines the receiver's rotation. Animatable.
@discussion The rotation is axis angle rotation. The three first components are the axis, the fourth one is the rotation (in radian).
*/
@property(nonatomic) SCNVector4 rotation;
軸角旋轉(zhuǎn),和以上的幾個不同竹宋,它除了x劳澄、y、z軸的旋轉(zhuǎn)之外蜈七。多了一個弧度旋轉(zhuǎn)秒拔,w。默認值(0,0,0,0)
這個實在觀察不出來有什么用飒硅。以后再補充砂缩。
先記錄常用的幾個屬性作谚。其他的以后用到再回來補充吧。
不再補充了庵芭,其實我們可以在SceneKit Scene File里可視化得更加直觀得觀察各個屬性妹懒。