Просмотр полной версии : Учебник по элементарной механике.
ZackMercury
05.02.2015, 04:01
Всем привет привет :3
Решил научиться писать физику для игр, но не могу найти годный ресурс для того, чтобы изучить всё, так сказать, от меньшего к большему. Падение тел в школе проходил, но этого ж мало :D К тому же уже и забыл всё.
Уверен, учить то там особо нечего, но всё ж - может кто встречал учебник, чтобы было интересно читать, а не как справочник? =) Ибо такой материал запоминается надолго и прочно, нежели справочный.
P.S. С красивыми картинками, чтобы даже такое дитятко, как я, вдолбил себе в бошку.
P.P.S. Школьную программу вообще повторяю почти что с нуля, ибо пропустил я много, довольно много =)
alexcon314
05.02.2015, 11:00
поищи в блогах (http://www.flasher.ru/forum/blog.php) на форуме. было вроде что-то...
ну, а книжка... найди советский школьный учебник по физике :).
nubideus
05.02.2015, 11:28
ZackMercury, физику вроде box2d?
ZackMercury
05.02.2015, 14:20
ZackMercury, физику вроде box2d?
примерно да, +- свои фишки.
С векторами-нормалями то я знаком, но вот именно формулы с гравитацией и всякие воздействия сил там не могу сам додумать.
Отскок предмета от поверхности(хотя его примерно представляю как реализовать в случае с битмапой, получать альфу двух пикселей в точке столкновения, учитывать откуда летел объект и обращать вектор).
Zebestov
05.02.2015, 14:25
Волгоградец на блогах небольшую серию сделал, тоже можешь глянуть (http://www.flasher.ru/forum/blog.php?b=164).
Отскок предмета от поверхности(хотя его примерно представляю как реализовать в случае с битмапойКакие ещё битмапы? Физика должна быть абстрагирована от визуального представления.
Zebestov
05.02.2015, 17:16
Вычисление угла наклона поверхности на основании соседних пикселей в самом общем случае может получиться очень неточным. Обычно все же графику переводят в полигоны заранее с помощью трейсинга.
И все же, это точно так необходимо или какого-то Nape (http://napephys.com/) таки хватит, чтобы сэкономить на этом довольно большом периоде разработки (жизни) и приступить к реализации самой идеи? Вопрос не для ответа, это так, чтобы просто еще раз подумать =)
ZackMercury
05.02.2015, 18:10
И все же, это точно так необходимо или какого-то Nape таки хватит, чтобы сэкономить на этом довольно большом периоде разработки (жизни) и приступить к реализации самой идеи? Вопрос не для ответа, это так, чтобы просто еще раз подумать =)
Я стремлюсь к свободе действий и полному контролю над программой.
Возможно, когда я изучу механику, я смогу с чистой совестью использовать Nape и даже лезть внутрь, посмотреть на его устройство и править под себя.
Zebestov
05.02.2015, 18:22
Стремление подтянуть физику — это хорошо. Тут я только поддержу.
А вот примерчик того, как Nape (или тот же Box2D) ограничивает свободу, хотелось бы попросить. Обычно же как оно происходит: ты ставишь (получаешь) задачу, обращаешься к уже существующим инструментам, призванным помочь тебе в ее реализации, но они оказываются непригодными по тем или иным причинам; и ты вынужден либо отказаться от задачи, либо реализовать "закат солнца вручную".
ZackMercury
05.02.2015, 18:25
У меня немного другая философия - если я не понимаю, как это работает и не чувствую контроля над кодом, я этого не использую. Ненавижу чувствовать, что кто-то умнее меня =)
Zebestov
05.02.2015, 18:40
Ясно =) почти все через эту "философию" проходили. Это проходит. Удачи!
ZackMercury
05.02.2015, 18:42
Пройдёт, когда я изучу всё, что мне нужно знать!
А теперь к теме. Есть ли какой-либо крупный учебник по механике падения/движения тел?
Есть ли какой-либо крупный учебник по механике падения/движения тел?
Наверно какой-нить раздел в патологоанатомии :о))
На счет учебника не подскажу, но вот тут (https://www.youtube.com/watch?v=C2UP6G6j2ss) что-то по телам, вроде, есть.
Zebestov
05.02.2015, 19:41
Пройдёт, когда я изучу всё, что мне нужно знать!Ты либо недостаточно любознателен, либо планируешь прожить вечно :)
А теперь к теме. Есть ли какой-либо крупный учебник по механике падения/движения тел?Если никто не подскажет какой-то общий сборник (было бы здорово, на самом деле) по созданию физ. движка с нуля, тебе просто нужно поочередно освоить векторную алгебру (без этого вообще никуда), аналитическую геометрию (ну а как ты будешь коллизии определять, да и матрицы опять же) и, наконец, механику (самая малость, простые формулы подскажут, что делать, когда уже ясно кто с кем столкнулся или кто кого куда тянет). После этого пойдут всевозможные оптимизации во имя повышения производительности и/или повышения точности (вычисления-то будут производиться дискретно, будешь частить — движок задохнется, будешь скакать семимильными шагами — можно какую-то коллизию профукать).
Bon voyage! :quiet:
ZackMercury
05.02.2015, 19:47
Мне приходила идея в голову проверять столкновение не точки, а линии) Ну знаешь, проводить линию из одного положения в следующее и проверять эту линию на столкновение с объектом. Поэтому с точностью изначально я планирую разобраться в первую очередь. Если вдруг объект пройдёт через другой объект - вернуть его на то расстояние, за которое он ушёл за объект от объекта.
Zebestov
05.02.2015, 19:59
Но точка — не тело.
В самом общем случае тело описывается набором точек.
Сталкиваются не точки, а тела.
И вот тут с линиями (с прямыми) происходит еще один облом. Если тело, скажем, равномерно движется и одновременно с этим равномерно же вращается (ну для простоты), его точки между двумя положениями не движутся по прямолинейным траекториям (пример (https://www.google.com.ua/search?q=%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D1%82%D0%BE%D1%87%D0%BA%D0%B8+%D0%BD%D0%B0+%D0%BE%D0%B1%D0%BE%D0%B4%D0%B5+%D0%BA%D0%BE%D0%B B%D0%B5%D1%81%D0%B0&es_sm=93&source=lnms&tbm=isch&sa=X&ei=DJPTVNOAGIHMygOq4oKQDA&ved=0CAgQ_AUoAQ&biw=1366&bih=667)) — как будешь решать эту задачу предложенным тобой выше путем?
ZackMercury
05.02.2015, 20:49
https://pp.vk.me/c622531/v622531630/178bd/0fXto7ZiiAc.jpg
где 3 точки - 2 перпендикулярные по краям объекта относительно направления и 1 с краю противоположно направлению.
Как определять эти точки... Надо подумать над этим. Возможно, это будет есть дополнительные ресурсы, НО, это не позволит объекту пройти сквозь другой объект благодаря своему числу-скорости.
Ах, да... Ещё нужно определять и размеры объекта относительно направления, как на рисунке.
http://noregret.org/tutor/n/collision/
Добавлено через 20 секунд
http://noregret.org/tutor/n/grid/
Zebestov
05.02.2015, 21:24
Колесо с точкой — это просто популярная иллюстрация, не стоит так за нее хвататься.
31407
ZackMercury
05.02.2015, 21:38
Колесо с точкой — это просто популярная иллюстрация, не стоит так за нее хвататься.
31407
Получается, этак никак не провернуть без уточнения.
Ну тогда нужно определить в проекте константу - минимальная ширина объекта, и спустить все просчёты до промежутков, приблизительно равных этой константе, чтобы не дай бог объект не смог пролететь сквозь другой. (А спускать с помощью, к примеру, циклов)
При этом учитывать скорость вращения :)
Zebestov
05.02.2015, 22:01
Ну вот об этом и речь, что так движок и захлебнуться может. Нужно постоянно оптимизировать (и на уровне алгоритмов, и на уровне математики), упрощать, а местами и просто халтурить =) как правило просто в зависимости от скоростей в каждой конкретной сцене можно задавать количество промежуточных шагов (вроде бы так в B2D делается) или на объекте выставить флаг, означающий, что он движется очень быстро (как в Nape).
Ну т.е. решения есть, да. И ты их обнаружишь, если займешься этим вопросом вплотную. Вот только это все действительно уже неплохо сделано до тебя (еще и выбор есть), а делать там ой как немало!
И вот я подведу итог, чтобы стало ясно, к чему я все время веду.
Когда-то, когда AIR был достаточно туповат, а Starling едва справлялся с нормальной игровой сценой на слабом смартфоне, я решил замутить свой 2D движок на Stage3D. Пока я факультативно занимался этим делом, я неплохо так разобрался с рядом процессов до самого-самого низкого уровня. Как ты уже понял, движок свой я так и не закончил, бо с течением времени в этом просто отпала какая-либо необходимость — Starling сейчас неплохо гребет на любой платформе и я пока ни разу не уперся в его "предел". НО. Знания и понимание процессов мне пошли очень на пользу. Стало понятно, почему изменить масштаб в разы быстрее, чем задать новую ширину, почему не надо без повода дергать getBounds(), какая порой драматическая разница между добавить/удалить объект или сделать его видимым/невидимым и т.д.
ИТОГО: В начале обсуждения ты сказал, что желаешь сам писать физику. Именно может оказаться излишеством, если тебе кроме этого есть что сотворить. Но знания, которые ты приобретешь даже просто размышляя о том, как оно должно работать, тебе однозначно помогут. Ну и математику/физику подтянешь.
gloomyBrain
05.02.2015, 22:12
Вообще обычно телам просто дается сферический (3D) или эллиптический (2D) коллайдер. Коллайдер - воображаемый объект, привязанный к центру физического тела. Для начала проверяются пересечения коллайдеров, а затем уже, если коллайдеры пересеклись - пересечение тел.
Для эллиптических (в самом простом случае - круглых) коллайдеров расчет пересечения не требует даже вычислять квадратный корень, что делает предварительную проверку достаточно быстрой.
В примере Zebestov'а эллиптический коллайдер показал бы пересечение с обоими окружностями, а вот уже дальнейший расчет показал бы с кем именно мы пересеклись и когда.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.