OPENGL ES MatrixGrabber и GLU.gluUnproject () беспредел - PullRequest
0 голосов
/ 21 июня 2011

[EDIT] Игнорировать этот пост, это была ошибка нуба [/ EDIT]

Я запустил Android на прошлой неделе (= я довольно новичок в этом :)), и я бьюсь головой о проблеме: Я пытаюсь выполнить лучевое вещание, чтобы получить объекты под точкой экрана. Я узнал, что мне нужен метод GLU.gluUnproject, после приличного количества сбоев я нашел решение

Я скопировал классы MatrixGrabber, MatrixStack и MatrixTrackingGL в моем проекте, они кажутся нормальными.

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

static public Vertex unProject( float x, float y, World world )
{

world.mg = new MatrixGrabber();  
world.mg.getCurrentState(world.gl);

float[] pos = new float[4]; 

GLU.gluUnProject(   x, y, 0f, 
                    world.mg.mModelView, 0, 
                    world.mg.mProjection, 0, 
                    world.view().get_size(), 0, 
                    pos, 0);

return new Vertex(pos[0], pos[1], pos[2]);

}

Vertex - это DataHolder с плавающей запятой x, y, z

Мир расширяет GLSurfaceView, я делаю замену GLWrapper в конструкторе: world.mg - это MatrixGrabber ()

public World( Context context )
{
super(context);
[...]
//allows matrix manipulation
setGLWrapper( new GLWrapper()  
{  
    public GL wrap(GL gl)  
    {  
        return new MatrixTrackingGL(gl);  
    }  
});
}

и я проверяю, что все переменные создаются при выполнении моего вызова

но все равно я не могу заставить это работать: приложение сильно падает на

world.mg.getCurrentState(world.gl);

вызов. он также вылетает на getCurrentModelView (gl); и getCurrentProjection (gl);

Я использую Android 1.5, но пробовал с другими версиями до 3. То же самое. Я действительно не знаю, какую версию OpenGLI я использую; GL10 используется везде, я не знаю, важно ли это, все, что я прочитал, касалось GL10 «Тип».

если у кого-то есть подсказка, совет, обходной путь или решение, я был бы счастлив счастлив счастлив

и в любом случае, спасибо за чтение:)

Ответы [ 2 ]

1 голос
/ 26 января 2012
private void getMatrix(GL10 gl, int mode, float[] mat) {
        MatrixTrackingGL gl2 = new MatrixTrackingGL(gl);
        gl2.glMatrixMode(mode);
        gl2.getMatrix(mat, 0);
    }

заменить приведение в первой строке MatrixGrabber.java

0 голосов
/ 23 июня 2011

Мой класс World расширил GLSurfaceView и использовал MatrixTrackingGL в качестве оболочки.

проблема была в том, что Viewport также расширял GLSurfaceView и НЕ использовал MatrixTrackingGL ... глупо.

теперь мир ничего не расширяет, и Viewport (расширяющий GLSurfaceView) реализует изменение Wrapper, и все в порядке.

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