Java LibGdx:将光线与ModelInstance中的网格相交

Java LibGdx:将光线与ModelInstance中的网格相交,java,libgdx,Java,Libgdx,我想在地板上放置一些对象ModelInstance,这也是我游戏世界的ModelInstance。为了获得这些对象的位置,我让光线与地板相交。然后,交点应为所需位置 我的计划是将光线的原点设置在地板下方,以便光线的方向笔直向上,并从下方照射到地板上。两个模型实例都是Blender中制造的.g3db模型 Vector3 dir=新矢量30,10,0//向量指向上 光线=新光线新矢量3,dir.cpy; Mesh Mesh=scape.model.Mesh.first//楼板模型实例只有一个网格 i

我想在地板上放置一些对象ModelInstance,这也是我游戏世界的ModelInstance。为了获得这些对象的位置,我让光线与地板相交。然后,交点应为所需位置

我的计划是将光线的原点设置在地板下方,以便光线的方向笔直向上,并从下方照射到地板上。两个模型实例都是Blender中制造的.g3db模型

Vector3 dir=新矢量30,10,0//向量指向上 光线=新光线新矢量3,dir.cpy; Mesh Mesh=scape.model.Mesh.first//楼板模型实例只有一个网格 int fac=mesh.getVertexSize; 浮点[]顶点=新浮点[mesh.getNumVertices*fac]; short[]inds=新的short[mesh.getNumIndices]; mesh.getVerticesverts; mesh.getindicatesinds; 对于int j=0;j<10;j++{//在地板上添加10个对象 向量3 out=新向量3-15,-50f,-j*5; ray.origin.setout.cpy;//设置地板下方向量的原点 如果Intersector.IntersectRay三角形光线、顶点、IND、fac、out{ System.out.printlnj+out=+out;//out应该是我的对象的位置 } }
intersectRayTriangles方法的输出正好是楼板下方的初始位置。但这一点离地面并不近。如何获得正确的交点?

我终于找到了一个半最优的解决方案。 景观是一个模型实例,使用Blender创建

ArrayList<Vector3> vertices = new ArrayList<>();

landscape.calculateTransforms();
    Renderable rend = new Renderable();
    Mesh mesh = landscape.getRenderable(rend).meshPart.mesh;

    int vertexSize = mesh.getVertexSize() / 4;
    float[] verts = new float[mesh.getNumVertices() * vertexSize];
    short[] inds = new short[mesh.getNumIndices()];
    mesh.getVertices(verts);
    mesh.getIndices(inds);

    for (int i = 0; i < inds.length; i++) {
        int i1 = inds[i] * vertexSize;
        Vector3 v = new Vector3(verts[i1], verts[i1 + 1], verts[i1 + 2]);

        v.set(v.prj(rend.worldTransform));


        vertices.add(v);
    }

    Vector3 dir = new Vector3(0, 10, 0);
    Vector3 pos = new Vector3(random.nextFloat(),random.nextFloat(),random.nextFloat());
    Ray ray = new Ray(pos, dir.cpy());

        for (int i = 0; i < vertices.size() - 3; i+=3){
            if (Intersector.intersectRayTriangle(ray, vertices.get(i), vertices.get(i + 1), vertices.get(i + 2), pos)) {
                //pos now contains the correct coordinates
                break;
            }
        }

请注意,y轴朝上

找到答案了吗?我正在研究同一个问题。是的,我找到了一个解决方案,刚刚发布了一个答案