Проблема с функцией getFloatv в GL11 (Android) - PullRequest
0 голосов
/ 19 августа 2011

Я изучаю Open GL ES и хотел бы получить более интуитивно понятный интерфейс с 3D-объектами, чем тот, который был предложен Google в TouchRotateActivity примере .Чтобы сделать это, я хотел бы умножить свою матрицу Modelview на матрицу ModelView в предыдущем состоянии.

Но я сталкиваюсь со следующей проблемой: функция getFloatv возвращает 0 значений в моем массиве с плавающей точкой, и я неЯ не понимаю, почему (моя матрица ModelView не пуста: если бы это было так, я бы не вывел свой куб на экран).

Может ли кто-нибудь помочь мне выяснить, в чем проблема?Вот изменения в коде.

private float[] previous;

public CubeRenderer() {
    mCube = new Cube();
    previous = new float[16];
}

public void onDrawFrame(GL10 gl) {
    GL11 gl11 = (GL11) gl;

    gl11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);

    gl11.glMatrixMode(GL11.GL_MODELVIEW);
    gl11.glLoadIdentity();
    gl11.glTranslatef(0, 0, -3.0f);
    gl11.glRotatef(mAngleX, 0, 1, 0);
    gl11.glRotatef(mAngleY, 1, 0, 0);

    gl11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    gl11.glEnableClientState(GL11.GL_COLOR_ARRAY);

    /*if(!previous.equals(new float[16]))
        gl11.glMultMatrixf(previous, 0);*/
    gl11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, previous, 0);

    Log.d("taille matrice",Integer.toString(previous.length));
    for(int i=0; i<previous.length;i++)
        Log.d(Integer.toString(i),Float.toString(previous[i]));

    mCube.draw(gl11);
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 21 августа 2011

В зависимости от вашего устройства вы можете использовать программный рендеринг GL PixelFlinger, который, к сожалению, не поддерживает glGetFloat, по крайней мере, начиная с версии 1.2. Проверка вывода logcat должна показать сообщения на этот счет, если это так.

Решение состоит в том, чтобы обрабатывать матрицы самостоятельно, поэтому нет необходимости извлекать их из OpenGL. Вот так .

0 голосов
/ 19 августа 2011

Я не программирую на Java, поэтому, насколько я знаю, ваша проблема может заключаться в том, как память передается в glGetFloatv. В любом случае, я обнаружил эту страницу , которая, возможно, вам поможет.

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