![]() |
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
Цитата:
|
Ответ: minecraft
В браузере?..а можно поподробней:)
|
Ответ: minecraft
Цитата:
|
Ответ: minecraft
По-моему да, причем это можно увидеть пока игра загружается))
|
Ответ: minecraft
Цитата:
Я не смотрел, как реализованы столкновения в MC, но логично предположить что используются циклы, поскольку далеко не все объекты имеют одинаковый физический размер. То есть, чтобы реализовать столкновения для пауков (у которых bounding box размерами в 1.*х1.*х0.*), придется переписывать функцию заново. Цитата:
Не думаю что можно определить надобность прорисовки нижних секторов карты, не делая массу raytrace'ов. А расходы на проведение оных скорее всего займут времени больше чем прорисовка тех немногочисленных сторон кубов в пещерах. По последним версиям это сложно проверить, но в Classic версии игра не рисовала все блоки которые "явно" находились у игрока за спиной. Это достаточно очевидный способ оптимизации, но для однотипного мира уменьшает затраты ресурсов в ~2 раза. Цитата:
|
Ответ: minecraft
Цитата:
|
Ответ: minecraft
Цитата:
Вот чего я до сих пор понять не могу - почему каждый кадр меняется 1 чанк (настройка производительности - Max FPS), даже если не восход/закат (когда меняется освещение) и ничего не поменялось в структуре карты... Т.е. при 25 ФПС за секунду будет обновлено 25 чанков, не зависимо от окружающей действительности и реальной необходимости. Говнокод... |
Ответ: minecraft
Вероятно есть какие-то "текучие" чанки?
|
Ответ: minecraft
чанки вообще крайне неудачная идея, ящитаю.
это все можно было бы и красивее и главное эффективнее реализовать. |
Ответ: minecraft
Цитата:
|
Ответ: minecraft
Цитата:
|
Ответ: minecraft
Цитата:
Вам не кажется что утечка памяти только на 64 битных системах? Играл по нескольку часов на нетбуке, никаких проблем с памятью не было. |
Ответ: minecraft
У меня 32 битная ось.
Через пару часов начинает юзатся своп. Вывод? |
Ответ: minecraft
Цитата:
|
Ответ: minecraft
Вложений: 1
стал разбираться с памятью и получилась какая-то фигня
1) используется 1272 Мб, ожидание 637 Мб. Все процессы в сумме намного меньше занимают. Кто-нибудь может объяснить, куда делась память? Win 7 home premium 32 2) В кемуляторе тоже что ли утечки памяти? зачем ему 298 мегабайт?! |
Ответ: minecraft
Цитата:
|
Ответ: minecraft
Бить меш на куски всё же необходимо иначе нарываемся на ограничение вершинного буфера. Кроме того единый меш нужно постоянно достраивать что несколько не быстро по сравнению с дискретным достраиванием мира.
Хотя соглашусь что в майнкрафте тот ещё говнокод. Особенно убог сервер. Это надо было додуматься пересылать целые чанки! Изменилась одна клеточка а мы весь чанк шлём! Из-за этого игра требует от сервера высокой пропускной способности ибо трафик генерится не хриновый. |
Ответ: minecraft
Чанки удобны для хранения/загрузки данных на диск/с диска. Зная координаты чанка и его размер можно легко сделать фоновую подгрзку/выгрузку мира.
|
Ответ: minecraft
Можно рисовать чанками и не придётся ничего сортировать.
можно проверять видимость/невидимость для всего чанка, и в противном случае не рисовать. (угол обзора меньше 90, т.е. рисовать в 4 раза меньше как минимум и не надо проверять для каждого кубика) правда, меня очень удивляет их высота - интуитивно хочется чтобы было 16*16*16, с высотой в 128 приходится ещё рисовать подземелья(( |
Ответ: minecraft
все ваши аргументы "ЗА" исходят из предположения, что мир статичен. а он на самом деле меняется: вода и лава текут, деревья растут, освещение меняется. а еще погода, а если еще и времена года сделать - тает снег целыми равнинами, вырастают поля цветов...
и еще вот о чем подумайте: вы мешаете в кучу модель данных и их представление, а ведь их группировка никак между собой не связана. |
Ответ: minecraft
Цитата:
Опять же - в формате чанков весьма и весьма умещаются динамические изменения. Конечно, если уйти от "кубичности" в сторону распределения плотности пород/газов/жидкостей, приправить всё это "шумовыми" генерациями и выразить через Marching cubes - будет в 100500 раз красивее, но опять же - у чанков есть весомый плюс, и имя ему - работа с диском. Стримминг, генерация и сохранение только по необходимости - плюшечки вкусные. Есть что предложить взамен/в дополнение? Далее. Грубо говоря, чанк 16х16х16 - это уже сам по себе объём для Occlusion Culling-а - "привязываем" динамику (мобов, например) к чанкам, или к 1/8 чанка - получаем профиты. |
Ответ: minecraft
Майн лагает на слабых компьютерах, плюс написан на Java
|
Ответ: minecraft
K.O. strikes again!
|
Ответ: minecraft
Цитата:
Цитата:
|
Ответ: minecraft
Цитата:
Цитата:
|
Ответ: minecraft
К слову о алгоритмах генерации ресурсов.Попробовал с разной солью генерировать разные миры.Частота,количество однотипных ресурсов,встречающихся единовременно отличаются.Глубина залегания осталась примерно та же.Так же меняется конфигурация пещер(Были миры,в который практически все пещеры не более -8-ти блоков в высоту.Ну и по мелочи бросались некоторые вещи в глаза).
Все это ИМХО. |
Ответ: minecraft
Цитата:
P.S. Попробуй зерно "Solar system". Меня покорило количество и размеры пещер, а также разнообразие ландшафтов вокруг зоны спавна. ffinder! Нам, я так полагаю, не ждать загадошную альтернативу чанкам за твоим авторством? |
Ответ: minecraft
ололо! а их кто-то еще и ждал???
|
Ответ: minecraft
Выкладывай, а мы послухаем
|
Ответ: minecraft
не, пацаны.
голословно не хочется. а технодему делать довольно муторно. так что считайте, что я слил. ну или зажал идеи. кому как лучше - тот пусть так и считает. |
Ответ: minecraft
Чё за детские отговорки и оправдания ? Мужик сказал мужик сделал!
|
Ответ: minecraft
Мужик сказал.
Мужик забыл. Мужику напомнили. Мужик слил :\ |
Ответ: minecraft
Вложений: 1
Цитата:
P.S.В версии 1.7.3 заметил особенность.Не работает print screen. |
Ответ: minecraft
Цитата:
|
Ответ: minecraft
F2 же
|
Ответ: minecraft
Цитата:
|
Ответ: minecraft
To FFinder
Давай хотябы голословно. Оченьнама интересна суть задумки! :) Ну пожалуйста! Цитата:
|
Ответ: minecraft
Кстати ,то ,что на генерацию влияет только зерно,расстроило.Я изначально предполагал что присутствует рандом.
Цитата:
|
Ответ: minecraft
Блин Это и есть рандом. А "Зерно", это тупо начальное значение генератора случайных чисел.
|
Ответ: minecraft
Вроде как если ничего не вводить майнкрафт возьмет за "зерно" текущее время в миллисекундах (ну или время с запуска системы, неважно). Это если хочется большего рандома.
|
Ответ: minecraft
Если бы с зерном был рандом,не создавало бы идентичных террайнов.
|
Ответ: minecraft
Марш читать про генерацию ландшафтов в МК и хватит тупых догадок.
Рандом там есть. |
Ответ: minecraft
Да тут скорее надо читать про генерацию случайных чисел на ЭВМ.
Lestar Компьютер не может просто вот так вот сгенерировать тебе случайное число (числа, террайны и т.д.). Он генерирует только псевдо-случайные числа. То есть если ты за зерно возьмешь число 3 то последовательность "случайных" чисел будет всегда одинакова. Чтобы добавить побольше рандома можно взять за зерно текущее время в миллисекундах (можно конечно придраться что все неслучайно и блаблаблабла, но как то пофиг). |
Ответ: minecraft
Насчет генерации ландшафтов: http://notch.tumblr.com/page/4 в самом низу страницы. С английским дружу посредственно посему не осилил.
|
Ответ: minecraft
|
Ответ: minecraft
Весьма ламерская статья. Примерно на уровне создания генератора BMP-файлов.
|
Ответ: minecraft
Цитата:
|
Ответ: minecraft
|
Ответ: minecraft
http://habrahabr.ru/blogs/algorithm/111538/
вот тут круче |
Ответ: minecraft
Цитата:
|
Часовой пояс GMT +4, время: 10:03. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot