Я рендерил карту тайлов в fbo, а затем перемещал полученный буфер в текстуру и рендерил ее в FSQ.Затем из событий щелчка мыши я получил координаты экрана и переместил их в область обрезки [-1,1]:
glm::vec2 posMouseClipSpace((2.0f * myCursorPos.x) / myDeviceWidth -
1.0f, 1.0f - (2.0f * myCursorPos.y) / myDeviceHeight);
У меня есть логика в моей программе, которая на основе этих координат выбирает конкретныйплитка на текстуре.
![enter image description here](https://i.stack.imgur.com/JYtk6.png)
Теперь, переходя к 3D, я текстурирую полуцилиндр с помощью FBO, который я использовал на предыдущем шаге:
![enter image description here](https://i.stack.imgur.com/rpVf8.png)
В этом случае я использую точку пересечения луч-треугольник, которая попадает в цилиндр с радиусом r и высотой h.Идея состоит в том, чтобы переместить эту точку пересечения в пространство [-1,1], чтобы я мог сохранить логику в моей программе для выбора плиток
Я использую алгоритм Мёллера – Трумборе для проверки точек на цилиндре, пораженном лучом,Допустим, точка пересечения (x, y) (не уверена, находится ли точка в треугольнике, объекте или мировом пространстве. Очевидно, это мировое пространство).Я хочу перевести эту точку в пространство x: [- 1,1], y [-1,1].
Я знаю высоту своего цилиндра, равную четверти длины дуги цилиндра:
cylillHeight = myRadius * (PI / 2);
, поэтому точку на оси Y можно задать в пространстве [-1,1]:
vec2.y = (2.f * (intersectedPoint.y - myCylinder->position().y) ) /
(myCylinder->height()) - 1.f
иЭто прекрасно работает.
Однако, Как вычислить горизонтальную ось, которая зависит от 2 переменных x и z?
В настоящее время радиус моего цилиндра равен 1, поэтому по совпадению набор полуцилиндров вПроисхождение пошло бы от (-1, 1) по оси X, что заставило меня думать, что это было [-1,1] пространство, но оказалось, что нет.Мой следующий подход состоял в том, чтобы использовать длину дуги полукруга s = r * PI , а затем вставить это значение в уравнение:
vec2.x = (2.f * (intersectedPoint.x - myCylinder->position().x) ) /
(myCylinder->arcLength()) - 1.f
, но очевидно, что оно уходит на 1 единицу приотрицательное направление.
Я ценю помощь.