Пересечение точки с треугольником в 3d от координат мыши? - PullRequest
2 голосов
/ 24 мая 2009

Я знаю, как проверить пересечение между точкой и треугольником.

... Но я не понимаю, как я могу точно переместить начальную позицию точки на плоскость экрана, используя мои координаты мыши, поэтому угол точки должен меняться в зависимости от того, где находится курсор мыши на экране, а также это должно прекрасно работать независимо от того, какой угол перспективы я использую в своем приложении OpenGL, поэтому угол точки будет отличаться для разных углов перспективы ... gluPerspective () - это функция, о которой я говорю.

Ответы [ 3 ]

2 голосов
/ 24 мая 2009

Хорошо, попробую и угадаю, что вы имеете в виду. Предполагается, что вы хотели бы выбирать объекты с помощью мыши. Проверить:

glUnProject .

Преобразует экранные координаты обратно в трехмерные мировые координаты.

Google имеет больше информации, если у вас возникнут проблемы.

Ура!

1 голос
/ 24 мая 2009

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

извините за неясность: /

-

Редактировать: ууууу, я понял, как работает с этим уроком! спасибо, я не знал, что это будет так просто!

Это код, который я сейчас использую, и он прекрасно работает:

void GetOGLPos(int x, int y, GLdouble &posX, GLdouble &posY, GLdouble &posZ){
    GLint viewport[4];
    GLdouble modelview[16];
    GLdouble projection[16];
    GLfloat winX, winY, winZ;

    glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
    glGetDoublev(GL_PROJECTION_MATRIX, projection);
    glGetIntegerv(GL_VIEWPORT, viewport);

    winX = (float)x;
    winY = (float)viewport[3]-(float)y;
    glReadPixels(x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);

    gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
}
0 голосов
/ 24 мая 2009

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

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

Выезд Википедия

A Поиск книг в Google содержит немало названий.

Foley & Van Dam, хотя и является окончательной книгой - здесь на Amazon.co.uk или здесь на Amazon.com

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