Я физик по образованию. С удовольствием поучаствую в разработке физического движка. Сам уже давно хотел этим заняться, но все никак не решался. Так что, krt17, давай скооперируемся! У меня была идея сделать "Physics demo", в котором бы демонстрировались разные физические явления. Кроме механики твердого тела, например, волновые явления.
Есть мнение, что наш мозг знает физику на подсознательном уровне, причем независимо от успеваемости в школе по этому предмету. Это знание возникло в ходе эволюции и используется для ориентирования в окружающем мире, для различения живых объектов от неживых. Скажем, если некий объект не нарушает законов механики - значит он мертвый, т.к. движется по относительно простым траекториям, предсказываемых этой моделью. Если же он явно нарушает законы механики, например, резко меняет скорость и направление движения, особенно в воздухе - значит он живой, т.е. сложно устроен и имеет особые средства (крылья, ноги, хвост) для "нарушения" законов механики.
Именно поэтому, когда мы видим на экране движение, подчиненное законам механики, мы испытываем чувство такого глубокого удовлетворения. Потому что при этом наш мозг не должен в очередной раз сталкиваться с неестественностью движения на экране, столь непривычного ему за длительный эволюционный период.
Тут есть еще один момент. Живые объекты также могут быть категоризованы по характеру их движения. Например, хаотическое движение может означать каких-нибудь жуков, а резкие выпады - хищника. Но компьютерная анимация до появления физических движков предлагала нам много такого, что не вписывается ни в какие модели, существующие в нашем подсознании. В окружающем мире просто нет таких движений. Поэтому просмотр такой анимации и проигрывает по ощущениям от "настоящей" физики.
Теперь перейдем к конкретике. Я думаю, надо начать с того, чтобы реализовать какой-нибудь простенький движок и посмотреть, как он чувствует себя на Speccy в плане скорости, точности, красоты и т.д. Тогда станет ясно, можно ли (и нужно ли) вводить в него дополнительные возможности. Ну и вообще приобретется опыт.
Можно начать с механики тел какой-нибудь простой формы, например, окружностей в гравитационном поле. Окружность тем хороша, что она инвариантна относительно вращения; ее можно рисовать в виде спрайтов, легко делать проверку на столкновения. Пространство можно ограничить стенами, тоже простой формы, для начала. Даже в этих рамках получаются очень красивые траектории, например, если высыпать несколько "шариков" на стол с наклонной поверхностью.
План реализации такого движка мог бы быть таким:
1) Реализация движка на ЯВУ на PC. Например, я бы это сделал на Матлабе, там и с графикой легко работать, тормозно правда.
2) Оптимизация алгоритмов на PC, избавление от максимально возможного количества умножений и вычисления других сложных функций
3) Кодирование на Z80-ASM базовых графических процедур: отображение спрайтов фиксированного размера, отображение стен. Оптимизация графики насколько это возможно.
4) Портирование алгоритмов физики с PC на Z80-ASM
5) Сбор и отладка полученной системы.




Ответить с цитированием