minecraft
1) я не пытаюсь сделать майнкрафт с элементами крайзиса
2) я вообще не пытаюсь сделать клон майнкрафта 3) я вобще не пытаюсь ничего сделать просто интересно. Итак. Собственно вопросы о некоторых приёмах в майнкрафте. Хотя эти приёмы есть во всех играх... но я раньше както не интересовался ими. Вобщем вопросы: 1) Как происходит столкновения игрока с кубами? Перебираются все кубы в чанке* на котором находится игрок, и проверяется пересечение между игроком и каждым кубом? 2) Как выбирается куб (и его грань), над котором указатель мыши? Опять же, перебираюся все кубы и т.д ? Размеры одного чанка* — 16 блоков шириной, 16 блоков длиной и 128 блоков глубиной [пруфлинк]. Тоесть 32768 кубов. И перебирать все эти кубы каждый(?) кадр помойму слишком долго. *чанк - "кусочек" карты. |
Ответ: minecraft
наверно перебираются только кубы которые рядом,например 20*20*20,а сортированы они по пачкам тежи 20*20*20...
Цитата:
|
Ответ: minecraft
Цитата:
я и спрашиваю, полным перебором? Все вопросы в силе. |
Ответ: minecraft
1. Например физика, хотя в майнкрафте наверняка своя. Я вот тут ставил кубики для коллизий рядом с игроком (3х3 клетки, т.е. максимум 9 кубиков), по ним и прыгал.
2. Наверняка есть простой математический способ определить через какие кубики пространства проходит луч, потом по их координатам в мире проверить наличие кубика начиная от начала луча. Если кубик есть - мы его нашли. А грань можно определить исходя из координат предыдущего кубика, через который прошел луч. |
Ответ: minecraft
Хм, захотелось аж попробывать!:)
А если подключик к клону майнкрафта Bullet Physics |
Ответ: minecraft
Цитата:
да у нас же регулярная сетка, делим каждый компонент вектора положения на размер грани куба нацело. получаем в каком кубе находимся. проверяем 26 соседних, можно даже не 26 а 7, т.к. знаем в какую сторону смещены относительно центра куба. как пикать грани? думаю стоит погуглить алгоритм raycasting из wolfenstein3d. |
Ответ: minecraft
Дык, есть чанк - он держит 3д массив с ссылками на каждый куб (хотя бы, наличие/отсутствие).
Далее, позиция объекта, по ней можно выбрать радиус ближайших элементов из массива чанка. Не нужно перебирать всё, идите с другой стороны, у вас уже есть инфа, какие нада перебирать, лишь те что рядом. Главное иметь к ним доступ из массива, где каждый индекс, имеет связь с координатами в мире, и есть возможность получать по координатам индекс и наоборот. |
Ответ: minecraft
Всё, тему можно закрывать. Спасибо ffinder'у!
|
Ответ: minecraft
Цитата:
коллизию считать вообще проще простого учитывая что всё состоит из неротированных кубов. |
Ответ: minecraft
Уже Эф написал, что я хотел написать.
Почитай исходники моего недокрафта что ли, там как раз коллизия сделана (в более простом случае - в массиве) |
Ответ: minecraft
октри для коллизии тут как собаке пятая нога, ящитаю.
|
Ответ: minecraft
|
Ответ: minecraft
Народ у кого было сто комп вырубался при игре? Как полечить?
|
Ответ: minecraft
С того что упоминал Notch в твиттере и youtube, вся "система столкновений" Minecraft'а - банальный AABB (axis aligned bounding box).
То есть столкновения игрока с 3д массивом реализуются как три цикла for, проверяющие на наличие твердого блока в клетке. Диапазон задается как (x - sizeX) div blockSize .. (x + sizeX) div blockSize. Поскольку мир весьма и весьма кубический, raycast можно так же упростить, делая проверку подобно рисованию линии в графических редакторах - смещение "указателя" делается постоянно, но проверки блока осуществляются лишь когда изменилась целая часть одной из составляющих. К примеру, для угла ~44 градуса в двухмерном пространстве проверки будут делатся так: Код:
____X Так же, если это вас интересует, для оптимизации рисования стороны блоков рисуются только для "граничных" блоков, а между блоками "внутри" рельефа не рисуются вовсе. Это неплохо видно на блоке-стекле. JACUK: скорее всего просто заканчивается память изза постоянных утечек (см. порой нелинейные руки разработчика). Если играть в браузере, то в таком случае будет просто крах браузера (или контейнера плагинов) вместо всего компьютера. Надеюсь, это помогает. |
Ответ: minecraft
Цитата:
|
Часовой пояс GMT +4, время: 07:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot