SceneKit_入門01_旋轉人物
SceneKit_入門02_如何創建工程
SceneKit_入門03_節點
SceneKit_入門04_燈光
SceneKit_入門05_照相機
SceneKit_入門06_行為動畫
SceneKit_入門07_幾何體
SceneKit_入門08_材質
SceneKit_入門09_物理身體
SceneKit_入門10_物理世界
SceneKit_入門11_粒子系統
SceneKit_入門12_物理行為
SceneKit_入門13_骨骼動畫
SceneKit_中級01_模型之間的過渡動畫
SceneKit_中級02_SCNView 詳細講解
SceneKit_中級03_切換照相機視角
SceneKit_中級04_約束的使用
SceneKit_中級05_力的使用
SceneKit_中級06_場景的切換
SceneKit_中級07_動態修改屬性
SceneKit_中級08_陰影詳解
SceneKit_中級09_碰撞檢測
SceneKit_中級10_濾鏡效果制作
SceneKit_中級11_動畫事件
SceneKit_高級01_GLSL
SceneKit_高級02_粒子系統深入研究
SceneKit_高級03_自定義力
SceneKit_高級04_自定義場景過渡效果
SceneKit_高級05 檢測手勢點擊到節點
SceneKit_高級06_加載頂點、紋理、法線坐標
SceneKit_高級07_SCNProgram用法探究
SceneKit_高級08_天空盒子制作
SceneKit_高級09_霧效果
SceneKit_大神01_掉落的文字
SceneKit_大神02_彈幕來襲
SceneKit_大神03_navigationbar上的3D文字
先認識一個方法,這個方法在SCNView 里面
public func hitTest(_ point: CGPoint, options: [SCNHitTestOption : Any]? = nil) -> [SCNHitTestResult]
當我們手點擊屏幕時,要知道我們都點到了那些節點,我們應該怎么處理呢?
首先我們添加一個手勢到視圖中去
let tap = UITapGestureRecognizer(target: self, action: #selector(tapHandle(gesture:)))
scnView.addGestureRecognizer(tap)
然后,我們獲取點擊到的第一個節點
func tapHandle(gesture:UITapGestureRecognizer){
let results:[SCNHitTestResult] = (self.scnView?.hitTest(gesture.location(ofTouch: 0, in: self.scnView), options: nil))!
guard let firstNode = results.first else{
return
}
// 點擊到的節點
print(firstNode.node)
}
- 認識類SCNHitTestResult
open class SCNHitTestResult : NSObject {
/// 擊中的幾點
open var node: SCNNode { get }
/// 擊中的幾何體索引
open var geometryIndex: Int { get }
/// 擊中的面的索引
open var faceIndex: Int { get }
/// 擊中的本地坐標系統
open var localCoordinates: SCNVector3 { get }
/// 擊中的世界坐標系統
open var worldCoordinates: SCNVector3 { get }
/// 擊中節點的本地法線坐標
open var localNormal: SCNVector3 { get }
/// 擊中的世界坐標系統的法線坐標
open var worldNormal: SCNVector3 { get }
/*! World transform of the node intersected. */
open var modelTransform: SCNMatrix4 { get }
/*! The bone node hit. Only available if the node hit has a SCNSkinner attached. */
@available(iOS 10.0, *)
open var boneNode: SCNNode { get }
/*!
@method textureCoordinatesWithMappingChannel:
@abstract Returns the texture coordinates at the point of intersection, for a given mapping channel.
@param channel The texture coordinates source index of the geometry to use. The channel must exists on the geometry otherwise {0,0} will be returned.
*/
open func textureCoordinates(withMappingChannel channel: Int) -> CGPoint
}
我們看出來,通過這個方法可以獲取的信息還是蠻多的,gei'qu