Где найти реализацию хаотичного движения частиц (OpenGL)?
Работал когда-то с DirectX, и лет 5 вообще не занимался графикой. Возникла потребность написать приложение, от графики там требуется лишь одно: отрисовка точек. Т.е. у меня есть множество точечных объектов, я на каждом кадре просчитываю их координаты, точки хаотично двигаются. Точнее говоря, хотелось бы только начальные условия задать случайно (скорость и направление движения), а потом чтобы точки сталкивались, отскакивали, в общем как молекулы газа. Начал смотреть в сторону OpenGL, появилось множество каких-то библиотек и оберток, посоветуйте, что взять? Нужен минимальный quickstart tutorial, исходник на С/С++ из одного файла, где идет работа с OpenGL и отрисовка точек (чтобы код собирался в Visual Studio). В идеале, чтобы еще была реализация столкновений (это, понятно, уже далеко не один файл, может быть демка какого-нибудь легкого движка).
Случайные направление и скорость при создании точки. А дальше уже перемещай, сталкивай и делай что хочешь.
Для направления можно хранить либо косинусы (вектор), либо прям угол.
class Dot
{
public:
Dot()
: speed(rand())
{
double angle = rand()/65535.0 * 360.0/*перевести в радианы надо тут*/;
x = cos( angle );
y = sin( angle );
}
public:
double x, y, speed;
};
TimeCoder: Столкновение частиц это элементарно, они же всего-лишь материальные точки (может быть с радиусом каким-то). И О-сложность вовсе не квадратичная, т.к. можно динамически разбить пространство на области и уменьшить сложность поиска. Для десятка тысяч точек даже с квадратичной сложностью будет в реальном времени работать на современном компьютере.
maagames.ru: если этот код вызвать в цикле пару миллионов раз будет сильно тормозить. Я думаю, в OGL есть что-то вроде инстансирования, рисования в текстуру, множественной буфферизации и других приемов оптимизации. Чтобы не заморачиваться, хотелось бы взять какую-то обертку на OGL (а какую - не знаю).
TimeCoder: Важно не сколько раз будет вызван код вообще, а сколько раз в секунду он будет вызываться. Более 60 кадров в секунду всё-равно не потребуется (ну пусть 120 для крутых мониторов). Сперва сделай просто, если будет тормозить, тогда уже нужно о чём-то думать. У тебя если тормоза и возникнут, то не из-за визуализации (ты же точки точками рисуешь или прям какие-то геометрические объекты хочешь?), а из-за расчётов столкновений, что к OpenGL вообще отношения не имеет.