выбор объекта не работа?

У меня есть следующий метод, который называют, когда пользователь нажимает позицию по экрану:

        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;
}

В основном класс берет в экранных co-порядках, которые были нажаты, настраивает область просмотра и все матрицы, это затем генерирует Луч. После того как луч сгенерирован, он берет каждую вершину и вставляет его его собственное Vector3 это затем тестирует, делает луч, пересекают любую из точек. В методе говорится, что луч пересекается "SQUARE2" в определенные точки на экране независимо, если существует объект там или нет.. почему? что могло вызывать это? Как я фиксирую его?

править:

Это совершает нападки, если оператор "SQUARE2" каждый раз, когда это думает, что "находит" объект. Это только находит пересечение, когда я поразил "середину" экрана (это - то, где объекты могли быть оттянуты), но Это только показывает пересечение для первого если оператор на левой стороне середины экрана и второго для правой стороны середины экрана

Так, например, это только думает, что затронуло, квадратные 2 в точках отметили X, где Прямоугольник является экраном телефонов.

  _________
  |       |
  |       |
  |X     X|
  |       |
  |_______|

Другие методы, в которые я звоню для трассировки лучей, расположены в другом проекте.. http://code.google.com/p/libgdx/source/browse/#svn/trunk/gdx/src/com/badlogic/gdx/math (Папка Graphics имеет Перспективную Камеру, которая содержит 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;
    }
}

Как я скорректировал бы свой код так, чтобы он распознал, когда объекты будут НА САМОМ ДЕЛЕ на экране?

7
задан Macarse 10 August 2010 в 12:25
поделиться

1 ответ

поверните камеру - то, что ваш класс камеры не поддерживает - а затем используйте его метод setMatrices вместо

gl.glLoadIdentity();
gl.glNormal3f(0,0,1);
gl.glRotatef(bear, 0, 1, 0);

- > Вам нужна камера лучшего класса

1
ответ дан 7 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: