BSP tree или каке-то другие способы разделения пространства. Т.е. для коллизий проверяешь не каждый объект с каждым, а только те, которые потенциально могут столкнуться.
К OpenGL никакого отношения не имеет, так что при гуглёжке можешь на OpenGL не ориентироваться.
Не используйте регулярные выражения.
Парсите не из файла, а загрузив весь файл в память.
У obj линейный, детерминированный формат, можно хоть switch (большой, длинный, некрасивый, но быстрый) написать.
Про "главную неожиданность"
Именно, что делают всё, чтобы пользовались шейдерами, нагружая GPU, вместо CPU. Ради производительности. Чтобы подталкивать прогресс и переход на новые технологии.
Мне функции тоже нравились.
Случайные направление и скорость при создании точки. А дальше уже перемещай, сталкивай и делай что хочешь.
Для направления можно хранить либо косинусы (вектор), либо прям угол.
class Dot
{
public:
Dot()
: speed(rand())
{
double angle = rand()/65535.0 * 360.0/*перевести в радианы надо тут*/;
x = cos( angle );
y = sin( angle );
}
public:
double x, y, speed;
};
С Эклипсом разобраться не проблема. Он хоть и странный, но вполне понятный. Поддержка Андроида в нём прекрасная, даже эмулятор есть.
Нативный код писать не пробовал, потому что не захотелось возиться с поддержкой разных архитектур процессоров, а на Java такой проблемы нет (я не заботился о производительности и проблем с ней не возникло у меня).