Глунпроект дешевле альтернативы - PullRequest
1 голос
/ 09 марта 2012

Я создаю игру на openframeworks, где камера движется над неподвижной 2-й плоскостью в 3d-пространстве. Мне нужно выбрать 5 координат для каждого кадра, поскольку камера всегда движется (1 для мыши и 4 для углов области просмотра, чтобы определить, что рисовать). Однако я обнаружил, что функция gluUnproject слишком медленная. Поскольку я выбираю координаты только на стационарной плоскости, в настоящее время на Z = 0, я полагаю, что смогу довольно дешево определить свои координаты, используя матрицы вида и проекции из своего класса камеры, но я просто не могу разобраться как сделать математику.

Подводя итог, у меня есть

Камера - матрицы MODELVIEW и PROJECTION, VIEWPORT Плоскость выровнена по оси z с размерами world_dims.x, world_dims.y

Я хочу преобразовать экранные координаты в непроецированные координаты на плоскости без использования gluUnproject.

В случае, если я туплю с моим gluUnproject, вот код для этого бита

ofVec3f ofxGrabCam::pickCoordinate(ofVec2f t_mouseP) {
//read z value from depth buffer at mouse coords

ofVec3f t_mouseW(t_mouseP.x, t_mouseP.y, 0);

glReadPixels(t_mouseW.x, ofGetScreenHeight()-1-t_mouseP.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &t_mouseW.z);

if (t_mouseW.z == 1.0f){
    return ofVec3f(-99,-99,-99); //represents point not found
}

GLdouble c[3];

gluUnProject(t_mouseW.x, ofGetScreenHeight()-1-t_mouseW.y, t_mouseW.z, matM, matP, viewport, c, c+1, c+2);

ofVec3f mouseW(c[0],c[1],c[2]);

return mouseW;

}

1 Ответ

3 голосов
/ 09 марта 2012

Однако я обнаружил, что функция gluUnproject слишком медленная.

Обратное преобразование только 5 координат не должно быть узким местом производительности.

Я хочу преобразоватькоординаты экрана в непроецированные координаты на плоскости без использования gluUnproject.

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

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