Android OpenGL - Помощь с преобразованием C ++ - PullRequest
0 голосов
/ 14 июля 2011

Я пытаюсь преобразовать этот код C ++ в Android Java.Тем не менее, я использую GL10 и glGetDoublev, по-видимому, не поддерживается в OpenGL-ES.Как еще я могу выполнить эту функцию?

// Get point by reading z buffer and unprojecting to object coords
    void Pick(int x, int y)
    {
       GLint viewport[4];
       GLdouble mvmatrix[16], projmatrix[16];

       glGetIntegerv(GL_VIEWPORT, viewport);
       glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix);
       glGetDoublev(GL_PROJECTION_MATRIX, projmatrix);

       int      winx = x;
       int      winy = winHeight - y;
       GLfloat  winz = 0.0;
       GLdouble objx = 0.0;
       GLdouble objy = 0.0;
       GLdouble objz = 0.0;

       // Get winz for given winx and winy
       glReadPixels(winx, winy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winz);

       // Make sure there was something at the point
       if (winz >= 1.0)
       {
          qDebug("Nothing picked");
       }
       else
       {
          // Get object coords from win coords
          gluUnProject((GLdouble)winx, (GLdouble)winy, (GLdouble)winz,
                       mvmatrix, projmatrix, viewport,
                       &objx, &objy, &objz);

          qDebug("Pick: win=%d,%d,%.3f obj=%.3f,%.3f,%.3f",
                 winx, winy, winz, objx, objy, objz);

          // Place a marker at that position
          Marker marker;
          marker.point.x = objx;
          marker.point.y = objy;
          marker.point.z = objz;
          markerList << marker;

          // limit to two markers
          if (markerList.count() > 2)
             markerList.pop_front();

          Rebuild();
       }
    }

1 Ответ

1 голос
/ 21 октября 2011

Я столкнулся с этой проблемой в своих собственных набегах Android OpenGL ES 1.0.Поскольку OpenGL ES 1.0 не позволяет вам получать матрицы напрямую (насколько я знаю, glGetFloatv не был реализован в 1.0), как вы и хотели, вам нужно создать оболочку, которая отслеживает матрицы.

Есливы используете OpenGL ES 1.1, вы можете использовать glGetFloatv, поскольку он был реализован.

Вот сайт, на котором я изначально нашел решение: http://www.41post.com/1540/programming/android-opengl-get-the-modelview-matrix-on-15-cupcake

Все подробности реализации есть.

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