在SceneKit中,您可以將一個lookAtConstraint約束添加到您的SceneView的視點,以使Camera查看某個節點。在SceneKit中,如何讓相機查看節點幾何體的特定面?
有沒有一種標準的方法來做同樣的事情,但對於幾何的特定面?
因此,如果我觸摸立方體的特定面,攝像機會移動,以便攝像機節點的Z軸與觸摸面的法線一致?所以立方體看起來像一個平面,形成了新的視角。
在SceneKit中,您可以將一個lookAtConstraint約束添加到您的SceneView的視點,以使Camera查看某個節點。在SceneKit中,如何讓相機查看節點幾何體的特定面?
有沒有一種標準的方法來做同樣的事情,但對於幾何的特定面?
因此,如果我觸摸立方體的特定面,攝像機會移動,以便攝像機節點的Z軸與觸摸面的法線一致?所以立方體看起來像一個平面,形成了新的視角。
號
這就要求相機的運動,除了重新瞄準它。
想象一下,我在我家門前。我有一個偉大的前方的看法,可以幾乎看不到我的左側。在我的場景中,我點擊房子的一側。 LookAt約束只會改變相機的角度。這將不符合那個幾乎看不見的一面的正常狀態。
爲了與正常對齊,我必須在房子周圍走動,直到我可以盯着房子,並垂直於我挖掘的一側。在什麼半徑?什麼路徑?你必須自己弄清楚。
根據您要嘗試的效果,您可能需要旋轉模型而不是移動相機。在本地(或作爲不可見父節點的子節點)旋轉抽頭節點,以便其負Z軸指示輕敲的臉部,並在節點上保留lookAtConstraint,而不是相機。不過,這種方法會改變對象的外觀:您將看到它旋轉,並且陰影發生適當變化。
因此,如果我觸摸立方體的特定面,攝像機會移動,以便攝像機節點的Z軸與觸摸面的法線一致?
假設你正在使用命中測試,以確定得到了感動什麼對象,SCNHitTestResult就會給你帶來localCoordinates
和localNormal
從它應該是相當容易推導相機變換。
一個簡單的方法是將相機作爲盒子的子節點,計算一個看起來像localCoordinates + distance * localNormal
的位置,最後使用GLKMatrix4MakeLookAt
和SCNMatrix4FromGLKMatrix4
進行變換。
請注意,您還可以使用worldCoordinates
,worldNormal
,以及轉換工具,如SCNNode.convertTransform(_:from:)。
非常感謝@mnuages,將有一個看看。 –
謝謝哈爾,有道理。 –