2015-07-18 3 views
1

Я пытаюсь перемещать объекты с помощью мыши с использованием метода Gluunproject с openGL 2.1, но я действительно борется здесь; вот код я написал:GlunUnproject движущийся объект с помощью мыши

int viewport[4]; 
double modelview[16], 
     projection[16], 
     X1, Y1, Z1; 
double realY; 
    GLfloat depth[2]; 

    for(_compt=_OjebctScene.begin();_compt!=_OjebctScene.end();_compt++) 
    { 

    if ((*_compt)->IsSelected()) 
    { 
     GLdouble mouseX=event.x; 
     GLdouble mouseY=event.y; 

     glGetIntegerv(GL_VIEWPORT, viewport); 
     glGetDoublev(GL_MODELVIEW_MATRIX, modelview); 
     glGetDoublev(GL_PROJECTION_MATRIX, projection); 
     realY = viewport[3] - (GLint) mouseY - 1; 
     glReadPixels(mouseX, realY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, depth); 
     gluUnProject(mouseX, realY, 0, modelview, projection, viewport, &X1, &Y1, &Z1); 
     (*_compt)->setX(X1); 
     (*_compt)->setY(Y1); 
     (*_compt)->setZ(Z1); 
    } 
} 

Я использую цикл, чтобы проверить все объекты на сцене (я отодвинул их в вектор), а затем, когда я найти выбранный объект, я стараюсь, чтобы переместить его с помощью мышь.

Затем я устанавливаю координаты своего объекта в положение мыши в трехмерном пространстве (X1, Y1, Z1); но это не работает.

+0

Что означает «не работает»? – derhass

+0

объекты не двигаются так, как ожидалось, они «прыгают» справа налево, не выполняя при этом движение мыши. – HdjoWattever

+0

Ну. Много чего непонятно. Какая модельная матрица действительно установлена ​​в то время, когда вы это называете? Как преобразование позиции, заданное с помощью этих методов setX() и т. Д. Во время рендеринга? Почему вы читаете значение буфера глубины в позиции mouese? Почему вы не создаете точку на ближайшем самолете? – derhass

ответ

0

Я думаю, что исправил его, просто передав глубину [0] методу gluunproject. вот что я сделал, это изменить:

gluUnProject(mouseX, realY, 0, modelview, projection, viewport, &X1, &Y1, &Z1); 

на это:

gluUnProject(mouseX, realY,depth[0], modelview, projection, viewport, &X1, &Y1, &Z1); 

Я не понимаю, что это означает, хотя, если кто-то может объяснить мне это было бы неплохо.