Это может быть больше общим вопросом графического программирования, но сейчас это происходит в контексте использования платформы Apple Metal в macOS.
В NSView mouseDown
тривиально получить локальные координаты, где произошло событие нажатия мыши, просто вызвав:
NSPoint localPoint = [self convertPoint:event.locationInWindow fromView:nil];
Учитывая эту локальную точку, какие шаги необходимо предпринять, чтобы определить, где произошло нажатие мыши в контексте визуализированной сцены?
Пока я просто рендеринг 2D-плоскости в MTKView
. 2D-плоскость можно масштабировать, перемещать и поворачивать по оси Z. Я могу несколько грубо заставить решение, потому что сцена очень проста, но мне интересно, что является более правильным подходом.
Такое ощущение, что мне пришлось бы дублировать некоторую логику вершинного шейдера в моем коде Objective-C, чтобы обеспечить правильное применение всех преобразований. Но я не совсем уверен, как этот мир работает, когда применяется вращение.
Очень немногие учебники или справочники по Metal много говорят о вводе мышью и взаимодействии систем координат. Любое понимание будет оценено.
В этом примере, если пользователь щелкнул оранжевую плоскость, как вы определяете нормализованные координаты в этом конкретном объекте? (В этом примере это может быть что-то вроде [0,8, 0,9])