我試圖找出確定點是否在平截頭體內的最佳方法。我有一些工作,但不知道它是否太麻煩,也許有一種更優雅/有效的方式,我應該這樣做。確定點是否在平截頭體
假設我想找出是否點「X」是平截裏面:
一旦我有截的8點的位置(4附近分,4個遠點) ,我正在根據三個點的三角形計算平截面的每個平面的法線。例如(如上面在圖中),用於右側,我從三個點的使兩個向量:
Vector U = FBR - NBR
Vector V = FTR - NBR
然後我提出這兩個矢量之間的叉積,確保纏繞順序對於正常指向裏面的錐體是正確的,在這種情況下,V x U
會給出正確的正常值。
Right_normal = V x U
一旦我有正常的各平面,我然後檢查點x是否是在該平面的前面或後面通過從x到飛機的點中的一個繪圖的載體:
Vector xNBR = x - NBR
然後我做這個載體,正常和測試,答案是肯定的之間的點積,確認是否點x是截頭的那架飛機的正確的一面:
if (xNBR . Right_normal < 0)
{
return false;
}
else continue testing x against other planes...
如果x對所有平面都是正的,那麼它在平截頭體內。
所以這似乎工作,但我只是想知道我是否以愚蠢的方式做到這一點。我甚至不知道到昨天爲止「交叉產品」是什麼意思,所以對我而言這些都是新鮮事,我可能會做一些相當愚蠢的事情。
「我有一些工作」,那麼你想要做的是張貼在代碼審查論壇。 – UKMonkey
啊,好的!不知道那個論壇。謝謝! – kinkersnick
也許接受這個答案的答案:http://stackoverflow.com/questions/6301085/how-to-check-if-an-object-lies-outside-the-clipping-volume-in-opengl –