2014-12-20 24 views
0

目前我有一個光源,一個平面和一個立方體,還有另一個節點,我想檢查它是否沒有被光線擊中。我想檢查整個節點本身是否沒有被光線擊中。該節點是單個元素,不在層次結構中。如何檢查節點是否被光照或不亮?

+0

你想知道表面(特定)點是否在陰影中嗎?或者,你想知道表面上的任何點是否在陰影中?或者,你想知道整個表面是否在陰影中?節點只包含單個元素還是層次結構?就目前來看,很難確切地說出你在問什麼。 –

+0

另外,沒有被光線撞擊和處於另一個物體的陰影之間是有區別的。例如,指向左側的聚光燈不會將光投射到正確的節點上。 –

+0

我編輯了我的問題,使其更清楚,你認爲你現在可以回答嗎? –

回答

3

照明是在GPU上發生的事情。即使您在自己的引擎中直接使用OpenGL或類似工具,找到關於照明效果的東西往往不是非常簡單或高效的事情。

這就是說,取決於你想知道什麼(以及你需要多久知道一次),有一些近似值可能有用。

  • 對於聚光燈,調用視圖的isNodeInsideFrustum:withPointOfView:方法,傳遞你想了解的第一個參數,該光點光作爲第二個節點的節點。這會告訴您節點的邊界框的任何部分是否位於燈光「看到」的區域中(但如果中間還有其他節點遮擋燈光)。

  • 檢查attenuationEndDistance的光線是否與節點的position(或其邊界框的拐角)的距離相反。

  • 使用hitTestWithSegmentFromPoint:toPoint:options:檢查從光線開始到結束於該節點(其position或邊界框邊角)的光線。如果命中測試發現該節點,則光可以達到它(模衰減)。如果命中測試首先發現另一個節點,那麼您關心的節點至少部分處於陰影中。

嘗試變化或這些技巧的組合可能會讓你找到你想要的,或足夠接近的東西。但要小心:測試有一個CPU時間成本,所以你可能不想每幀都要做一個(或幾個)測試。

+0

謝謝,這有助於很多 –

+0

Wooaw ..非常有用,Tks! – TonyMkenu

相關問題