Проблемы с использованием gluUnProject - PullRequest
0 голосов
/ 04 ноября 2011

В основном у меня есть приложение для Android 1.5 с классом GLSurfaceView, который показывает простой квадратный многоугольник на экране.Я хочу научиться добавлять новую функциональность, функциональность перемещения квадрата, касаясь его пальцем.Я имею в виду, что когда пользователь касается квадрата и перемещает палец, квадрат должен перемещаться пальцем, пока палец не отпустит экран.

Я пытаюсь использовать gluUnProject для получения координат OpenGL, соответствующихточное положение пальца, тогда я сделаю перевод на полигон, и я переместу полигон в эту позицию (я надеюсь, что это так)

Проблема в том, что что-то не так с gluUnProject,это дает мне это исключение: java.lang.IllegalArgumentException: length - offset < n при вызове gluUnProject.

Прежде всего, я передаю 0 как координату выигрыша Z, потому что я не знаю, что мне нужно передать как координату выигрыша z, потому чтоУ win нет координат Z, только X и Y. Я проверил прохождение 1 по координате Z, и я получаю то же исключение.

float [] outputCoords=getOpenGLCoords(event.getX(), event.getY(), 0);
x=outputCoords[0];
y=outputCoords[1];
z=outputCoords[2];

.,.

public float[] getOpenGLCoords(float xWin,float yWin,float zWin)
{
    int screenW=SectionManager.instance.getDisplayWidth();
    int screenH=SectionManager.instance.getDisplayHeight();
    //CODE FOR TRANSLATING FROM SCREEN COORDINATES TO OPENGL COORDINATES
    mg.getCurrentProjection(MyGl);
    mg.getCurrentModelView(MyGl);
    float [] modelMatrix = new float[16];
    float [] projMatrix = new float[16];
    modelMatrix=mg.mModelView;
    projMatrix=mg.mProjection;          
    int [] mView = new int[4];
    mView[0] = 0;
    mView[1] = 0;
    mView[2] = screenW; //width
    mView[3] = screenH; //height
    float [] outputCoords = new float[3];
    GLU.gluUnProject(xWin, yWin, zWin, modelMatrix, 0, projMatrix, 0, mView, 0, outputCoords, 0);
    return outputCoords;
}

1 Ответ

3 голосов
/ 04 ноября 2011

Я ответил на тот же вопрос здесь ; в основном функция gluUnproject ожидает, что ваш массив outputCoords будет иметь размер 4 вместо 3. Обратите внимание, что это однородные координаты, поэтому вам все равно придется делить первые 3 на 4, если вы делаете перспективную проекцию.

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