сбор объекта не работает? - PullRequest
       11

сбор объекта не работает?

7 голосов
/ 02 августа 2010

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

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

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

edit:

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

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

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

Другие методы, к которым я обращаюсь для трассировки лучей:находится в другом проекте. http://code.google.com/p/libgdx/source/browse/#svn/trunk/gdx/src/com/badlogic/gdx/math (папка Graphics содержит перспективную камеру, которая содержит getPickRay();, а Intersector содержит другой).

edit2: похоже, он выбирает правильное место, гдеобъекты МОГУТ быть, но в настоящее время они не могут быть связаны с вращающимся миром, поэтому, похоже, у него просто проблемы с вращающимся миром. Вот как я вращаюld ...

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

Как мне настроить свой код так, чтобы он распознавал, когда на экране фактически находятся объекты?

1 Ответ

1 голос
/ 11 августа 2010

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

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

-> Вам нужен лучший класс камеры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...