查看用Java剔除掉一个框的视锥

问题描述

| 给定一个视锥(由x,y,z相机位置,旋转[0-360]和俯仰[0-180]以及视角(例如45度)定义),什么是(最好最快的)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
    //...
}
可以在http://www.lighthouse3d.com/tutorials/view-frustum-culling/找到C ++实现 编辑:这是2d版本,只有4行,在我看来一目了然,易于理解-如何将其修改为3d检查?
static boolean isPointInFrustum(
        Vector cam,float rot,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);
}
    

解决方法

        除了基本语法外,Java代码与C ++代码有何不同?我注意到该站点上的C ++代码比上面的界面面向对象得多。您不能像Lighthouse代码那样构建
FrustumR
类和
Vec3
类,然后添加一个方法:
int FrustumR.pointInFrustum(Vec3 p)
由于该方法的主体不处理指针(仅用于算术),因此您应该基本上可以将其粘贴,并且可以在Java中工作。 如果出于某种原因无法实现这些类,则应该能够通过将对这些类成员的引用更改为对参数的引用来转换C ++代码。