挑选对象不工作?

Ski*_*zit 7 java android opengl-es

我有以下方法,当用户点击屏幕上的位置时调用:

        public void setup(int xi, int yi){
    int f = 0;  
    PerspectiveCamera camera = new PerspectiveCamera();
    camera.setViewport(320, 508);
    camera.update();
    Ray touch = camera.getPickRay(xi, yi);

    while(f < GLCamTest.array.length){
        //Vertex 1
        float x1 = GLCamTest.array[f];
        f++;
        float y1 = GLCamTest.array[f];
        f++;
        float z1 = GLCamTest.array[f];
        f++;

        //Vertex 2
        float x2 = GLCamTest.array[f];
        f++;
        float y2 = GLCamTest.array[f];
        f++;
        float z2 = GLCamTest.array[f];
        f++;

        //Vertex 3
        float x4 = GLCamTest.array[f];
        f++;
        float y4 = GLCamTest.array[f];
        f++;
        float z4 = GLCamTest.array[f];
        f++;

        //Vertex 4
        float x5 = GLCamTest.array[f];
        f++;
        float y5 = GLCamTest.array[f];
        f++;
        float z5 = GLCamTest.array[f];
        f++;

        Intersector sect = new Intersector();
        float z3 = 10;
        //Mid-point formula
        float x3 = (x2+x4)/2;
        float y3 = (y2+y4)/2;

        //Triangle one is (x1,y1), (x2,y2), (x3, y3)
        //Triangle two is (x4, y4), (x5, y5), (x3, y3)

        //Now, I have my 2 tri-angles I need for the
        // Polygon test..
        Vector3 t1 = new Vector3(x1,y1,z1);
        Vector3 t2 = new Vector3(x2,y2,z2);
        Vector3 t3 = new Vector3(x3,y3,z3);
        Vector3 t4 = new Vector3(x4,y4,z4);
        Vector3 t5 = new Vector3(x5,y5,z5);

        if(sect.intersectRayTriangle(touch, t1, t2, t3, t4)
            == true){
            System.out.println("TOUCHED AN OBJECT!!");
            if (f <= 12){
                System.out.println("SQUARE 1");
            } else if(f <= 24 && f >=13){
                System.out.println("SQUARE 2");
            } else if(f <= 36 && f >= 25){
                System.out.println("SQUARE 3");
            } 
        }
        if(sect.intersectRayTriangle(touch, t4, t5, t3, t1) 
                == true){
            System.out.println("TOUCHED AN OBJECT!!");
            if (f <= 12){
                System.out.println("SQUARE 1");
            } else if(f <= 24 && f >=13){
                System.out.println("SQUARE 2");
            } else if(f <= 36 && f >= 25){
                System.out.println("SQUARE 3");
            } 
        }else{
            System.out.println("NO TOUCH");
        }
    }
    f = 0;
}
Run Code Online (Sandbox Code Playgroud)

基本上,类接收被单击的屏幕共同点,设置视口以及然后生成Ray的所有矩阵.一旦生成光线,它将获取每个顶点并将其放入自己的顶点,Vector3然后测试光线是否与任何点相交.该方法表明,"SQUARE2"无论是否存在物体,光线都会在屏幕上的某些点相交.为什么?可能是什么导致了这个?我如何解决它?

编辑:

每当它认为它"找到"一个物体时,就会触及if语句"SQUARE2".当我点击屏幕的"中间"时(这是可以绘制物体的地方),它只会找到一个交叉点但是它只显示了一个交叉点.屏幕中间左侧的第一个if语句和屏幕中间右侧的第二个if语句

因此,例如它只认为它在标记为X的点处触及方形2,其中矩形是电话屏幕.

  _________
  |       |
  |       |
  |X     X|
  |       |
  |_______|
Run Code Online (Sandbox Code Playgroud)

我正在调用光线跟踪的其他方法位于另一个项目中.http ://code.google.com/p/libgdx/source/browse/#svn/trunk/gdx/src/com/badlogic/ gdx/math(文件夹Graphics有Perspective Camera,它包含getPickRay();Intersector包含另一个).

edit2:它似乎正在拾取物体可能存在的正确位置,但它们目前可能不是由于世界旋转所以它似乎只是在旋转世界的问题.这就是我如何旋转世界......

    public void onDrawFrame(GL10 gl) {
    onDrawFrameCounter++;
    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    bindCameraTexture(gl);
    float bear = Global.bearing;
    gl.glLoadIdentity();
    gl.glNormal3f(0,0,1);
    gl.glRotatef(bear, 0, 1, 0);

    int e = 0;  
    for(int q=0; q < Global.cubes;q++){
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
    e = e+4;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何调整我的代码,以便它能识别屏幕上的对象何时实际?

use*_*258 1

旋转相机 - 你的相机类不支持 - 然后使用它的 setMatrices 方法而不是

gl.glLoadIdentity();
gl.glNormal3f(0,0,1);
gl.glRotatef(bear, 0, 1, 0);
Run Code Online (Sandbox Code Playgroud)

-> 你需要更好的相机课程