您知道,例如當兩個平面位於同一位置時,顏色不同時,它們將開始相互作戰,因此某些部分是另一個紋理,另一部分是其他部分。禁用重疊平面的閃爍
我認爲Scenekit的renderingOrder應該解決這個問題,但我無法讓它工作。我給planeA 0渲染了Order和planeB 1,但什麼也沒發生。所以基本上我想在同一個位置有兩架飛機,但是我希望另一架飛機是「支配的」,這樣主導飛機就會呈現出來,而不是其他的飛機。
您知道,例如當兩個平面位於同一位置時,顏色不同時,它們將開始相互作戰,因此某些部分是另一個紋理,另一部分是其他部分。禁用重疊平面的閃爍
我認爲Scenekit的renderingOrder應該解決這個問題,但我無法讓它工作。我給planeA 0渲染了Order和planeB 1,但什麼也沒發生。所以基本上我想在同一個位置有兩架飛機,但是我希望另一架飛機是「支配的」,這樣主導飛機就會呈現出來,而不是其他的飛機。
這通常被稱爲Z戰鬥,並且只要3D存在就一直是3D中的問題。
有兩個基本的,而不是理想的,辦法對付這一點,我目前瞭解您的情況:
卸下飛機,你不想被看到,直到你需要它,可能是當相機繞過另一邊時,或者其他一些條件發生變化時,你需要添加你需要的飛機,然後去掉另一個飛機。
2.在「Z空間」中將它們稍微分開,或者任何有意義的空間將它們稍微分開。這可能是一個非常小的數量,非常小,觀衆不可能感覺到飛機不在完全相同的空間。
與代表垂直平面的重疊方框有類似的問題。
這裏有可能,如果你不使用透明節點爲你工作(我做的,所以我的問題依然存在,我會更新時,它的解決)的解決方案:包含
使用扁平節點所有平面幾何圖形。您可以使用flattenedClone()
將所有節點的孩子變平。然後在每次添加更多平面節點時將其平坦化,即:
class myClass {
//Accumulate planes into this node
var flattenedNode = SCNNode()
func addPlaneNode(_ newPlane: SCNNode) {
flattenedNode.removeFromParentNode()
flattenedNode.addChildNode(newPlane)
flattenedNode = flattenedNode.flattenedClone()
rootNode.addChildNode(flattenedNode)
}
}