1
給定視錐體(由x,y,z相機位置,旋轉[0-360]和音高[0-180)以及視角(例如45)定義)用於確定一個盒子(由兩個相對的角點定義)是部分還是完全在該平截頭體內的Java代碼是什麼(優選最快)?查看截錐體在Java中剔除盒子
更確切地說,我該如何完成以下工作?
static boolean isBoxInFrustum(float cx, float cy, float cz, // Vector camera,
float rotation, float pitch, float angle,
float p1x, float p1y, float p1z, // Vector point1,
float p2x, float p2y, float p2z) { // Vector point2
//...
}
A C++實現可以在http://www.lighthouse3d.com/tutorials/view-frustum-culling/
編輯發現:這裏的2D版,也就是隻有4線,在我看來很容易,一看就明白 - 怎麼可以把它修改爲3d檢查?
static boolean isPointInFrustum(
Vector cam, float rot, float pitch, float ang, Vector point) {
Vector diff = cam.minus(point);
float deg = Maths.arctan(diff.y, diff.x) + rot + 360;
deg %= 360;
return (deg > 180-ang && deg < 180+ang);
}
注:我指的是[本頁]上的代碼(http://www.lighthouse3d.com/tutorials/view-frustum-culling/radar-approach-implementation/),我認爲你也是這樣。 – mgiuca 2011-06-15 07:39:38
另請參見:閱讀燈塔代碼,它看起來像Vec3類使用運算符重載,這在Java中不可用。你需要爲此編寫一些方法。例如,而不是'Vec3 v = p-camPos',您需要編寫'Vec3 v = p.minus(camPos)'。 – mgiuca 2011-06-15 07:41:09
該網站上的代碼使用相機參考,以及近和遠的剪切平面。請參閱上面的內容,瞭解我可用的內容如果您明顯知道如何製作相機參考,或者如何重寫代碼以使用旋轉和俯仰,請解釋一下,因爲無論出於何種原因,我所鏈接的教程都將我置於黑暗中。 (評論/問題應使用「添加評論」發佈。) – 2011-06-15 08:33:48