Моя задача — создать симулятор фонтана с столкновением частиц воды и поверхности воды. К этому моменту я создал водную поверхность, используя один шейдер и другой шейдер для создания фонтанных частиц (шейдер частиц фонтана также использует механизм обратной связи преобразования).
Мой вопрос: как я могу сделать / обнаружить частицы фонтана и столкновение поверхности воды? — Я хотел бы знать, как я могу получить / соединить информацию из шейдера самолета / буфера GL и буфера частиц / буфера GL для создания столкновения — я знаю уравнение волны воды и методы обнаружения столкновения — я просто не знаю для чего позволяет API OpenGL.
Проблема, которую вы описываете, не соответствует описанию работы OpenGL. OpenGL — это API рисования, его цель — рисовать красивые картинки. Такие вещи, как обнаружение столкновений, полностью выходят за рамки OpenGL.
Однако вы можете использовать OpenGL для реализации алгоритма на основе изображений для выполнения тестов на основе изображений, соответствующих вашей проблеме. В вашем случае я рендерил поверхность воды сверху в ортогональной проекции, а затем рендерил каждую частицу с включенным тестированием глубины. С помощью Окклюзия Я бы проверил, была ли частица еще видимой. Для каждого кадра я бы сравнил, изменилась ли видимость частицы: если она исчезла, она ушла под воду и столкнулась.
Этот метод работает, но, честно говоря, я бы сказал, что он полностью переоснащен. Просто проверьте, не превышает ли высота частиц над землей средний уровень воды; для небольших волн пульсаций это достаточно точно.
Что вам нужно сделать, это изучить возможность взаимодействия OpenCL с OpenGL. Посмотрите Вот для образца nVidia, который показывает моделирование столкновения частиц с использованием OpenCL (рендеринг с использованием OpenGL). OpenGL очень ограничен как вычислительный API, и довольно сложно делать то, что вы хотите, не прыгая через обручи (я думаю, это возможно — просто не очень легко).