Pull to refresh

Comments 64

спасибо за рассказ.
красивая игра, поставил бы с удовольствием.
Хм… В чём польза от вращения и перемещения мира вокруг камеры, а не самой камеры по миру? Понятно, что вычислительно будет примерно одно и то же (при условии, что трансформации применяются ни к каждому объекту по отдельности), а вот концептуальный смысл не понимаю.
Я когда в детстве делал свой 3D движок (а в те времена была реально проблема с литературой и всё, что я делал, брал из головы, начиная с самых основ), то у меня тоже весь мир вращался/двигался, а идея камеры мне даже в голову не приходила. Дело в том, что камера предполагает относительно сложные вычисления с матрицами, а я тогда про матрицы и не знал ничего. Максимум, мог повернуть точку вокруг другой точки на заданный угол. В общем, камера — относительно математически сложный объект, поэтому, скорее всего, автор обошёлся без неё.
Не совсем. Потому что камеры нет. Камера — это мы — витруальный наблюдатель, и мы статичны, потому приходится «вращать мир».
Остальные фичи «камеры» — это всякие искажения перспективы и постпроцессинг.
Не обошелся :)
У меня есть класс камера который держит всю математику в себе, а снаружи выглядит как камера.переместить(10, 20, 0).
И да с матрицами там есть немно гемора, но методом проб и ошибок таки можно заставить их работать :)
Думаю так считать проще. Чтоб «наложить» объект на экран, его вершины перемножаются на 3 матрицы по очереди:
1 Матрица модели, которая держит информацию о положении объекта относительно начала координат.
2 Матрица мира, все объекты перемножаются на эту матрицу. Таким образом мы двигаем мир относительно камеры (это то о чем вы спрашивали).
3 Матрица проекции — что-то типо пареметров линзы камеры, угол обзора и тд.
Вот здесь лучше объясняют, с картинками: opengl-tutorial.blogspot.com/p/3.html (Матрицы Модели, Вида и Проекции)
Думаю так считать проще

Как я уже писал выше — нет. По-другому считать невозможно. Ведь экран же статичен? Вы же не сможете повернуть экран? Потому вращаете «мир».
Ну да, ваше объяснение лучше.
Просто автор футураму пересмотрел. Там корабль стоит на месте и двигатель вращает вселенную вокруг :)
Ясненько, для аутентичности.)
Вы ведь понимаете, что эта фраза на самом деле не имеет смысла? Если корабль и остальная вселенная вращаются относительно друг друга, то не важно что из них считать точкой отсчета, невозможно сказать, что именно корабль «стоит на месте» или наоборот вселенная.
Я так понимаю, сериал вы не смотрели. :-) Это просто шутка.
Если я еще не все забыл, то «не важно» только в условиях отсутствия ускорения. А вот если одно из тел движется с ускорением, то его можно отличить. В случае же вращения ускорение есть. Так что фраза имеет смысл.
Не важно и с ускорением, потому что оно то же, что гравитация
Рискну опозориться, но все же спрошу. А в чем тут принципиальное отличие от решения парадокса близнецов? Там ведь видна разница если смотреть со стороны третьей ИСО.
Я нифига не умею обьяснять (а ещё и слоупок), но суть в том, что в классических примерах теории относительности (например с поездом) на все объекты действует сила тяжести, которая на самом деле не отличима от ускорения 9.8м/с^2 направленного вверх. Таким образом раз "не важно" что считать точкой отсчёта в ситуации, когда на объекты действует сила тяжести, то неважно и когда они движутся с ускорением. Ускоряющийся относительно остальной вселенной, наблюдатель в космическом корабле по прежнему может считать себя неподвижным, как на поверхности Земли, а наоборот, вселенную вокруг считать двигающейся вокруг него с ускорением.

Более понятно (но в то же время без матана) это объясняется, например, у Брайана Грина во всем известных книгах "Элегантная вселенная" и "Ткани космоса...".
Вблизи нуля координат операции с плавающей точкой точнее. Это может быть одной из причин.
очевидно, что раздел «Я пиарюсь» себя не оправдывает.
С другой стороны, почитать подобные личные истории всегда интересно.
Boomburum, может сделать отдельный хаб на Мегамозге для этого?
Или вообще «Я пиарюсь» сделать симлинком в Мегамозг. Пишешь в него,
а статья автоматом там публикуется.
Я новенький на хабре, чтоб попасть в «Я пиарюсь» нужен рейтинг вроде.
Ну и плюс я не указывал линку на игру, не хочу быть слишком навязчивым.
Это даже к лучшему. Меня он забанили за пиар в хабе «Я пиарюсь» =).
Ни в коей мере! Вы молодец, что сделали красивую игру и вдвойне, что написали об этом.
Мой комментарий как раз и был призван привлечь внимание к таким людям как вы,
выделив отдельный хабр, в который можно было бы писать, не имея таких жёстких требований как в хабе «Я пиарюсь».

Так как очевидно, что ваш пост носит некоммерческий характер и на него такие жёсткие требования распространяться не должны.

Я бы вообще предложил сделать этот хаб с возможностью публикации постов пользователями Read@Comment.
Не все читают «мегамозг». Кроме того, история действительно интересная и достойна хабра.
Если вы заметили, я предложил сделать хаб в виде симлинка на мегамозг.
UFO just landed and posted this here
Ура! Я победил бота на низкой сложности со второй попытки! Пять звёзд!
Как это здорово, что люди делают то, что им интересно. И оно получается! Это вдохновляет.
Более подробный хаброориентированный рассказ будет?
ЗЫ. С меня чашка кофе (или полчашки)! [купил версию без рекламы]
Спасибо!
Насчет более хаброориентированного рассказа: я продолжаю работу над игрой, и свободного времени совсем мало.
Плюс, я не уверен что внутренности моей игры будет хорошим примером. Я изобретал колесо, когда стоило посмотреть что делают другие.
Там нет шейдерных glow эффектов. О чем конкретно вы спрашиваете?
Не нашел в статье, где скачать-то? Бесплатно без регистрации без смс? Может плохо искал?)
Онлайн режим? А есть желание? С чатом? Моё мнение: не нужен чат. Это скорее станет геморроем.
Вот посмотрите на Хартстоун. Там нет чата, но есть икс условных смайликов (интернациональных). Не более того. Кроме Хартстоуна видел подобный подход ещё в нескольких играх 1:1. Скорее одобряю именно такой подход.
Видел игровые чаты с ушлёпочными диалогами. Я думаю, вы запаритесь с модерацией, если в чате будут буквы.
Для начала будет просто со смайликами.
Может знающие люди поскажут — если у игроков будет возможность свободно отправлять любой текст друг другу, скажем небольшие сообщения по 50 символов, 5 раз в минуту. Без модерации, но у другого игрока есть возможность отключить чат. Есть ли запреты скажем у гугла на такое?
Мне кажется даже вести список стоп-слов — уже очень утомительное занятие.
А чат без стоп-слов (или как они там называются)… Вот напорется игрок на ушёпка, настроение упадёт, он выйдет и больше никогда не зайдёт. И ваш труд будет испорчен каким-то малолетним идиотом.
ЗЫ. (отключить чат один раз — это не решение проблемы, надо банить виновника после икс попыток)
Подобная система с отключениями есть в World Of Tanks от Wargaming. Однако это ухудшает ситуацию в некоторых случаях: например, когда нужно координироваться или спросить что-либо важное, а у некоторых игроков чат отключен из-за негатива, который довольно не редкое являение
Но там также модераторы банят, если на игрока пожалуются. Плюс в игре есть возможность не слушать конкретного игрока.
Стоп слова мне не очень нравятся, к примеру слово «оскорблять» содержит мат, в некоторых играх такое слово полностью или частично закрашивается.
Модераторы там не учавствуют никак — все автоматизированно. «не слушать конкретного игрока» конечно можно, но неадекватов достаточно много и всех не добавишь. При этом система банит субъективно лишь 5-10% таких.
Вы ж поймите, в несоциальных играх чат обычно используется для того, чтобы проделывать однообразные действия с мамкой другого игрока.
Поэтому чат в них не нужен.
Хех. Что если чат будет выключен по умолчанию, а если игрок хочет слышать гадости, то он может включить чат в настройках?
Просто иногда реально хочется похвалить противника за хороший удар, а сказать можешь только смайлом <палец вверх>.
Тогда нужно два смайла — палец вверх и палец вниз. Но уже ими игроки могут злоупотреблять, постоянно спамя.
Размер apk <5mb, круто. Юнити б сразу из коробки около 16-18 был бы.
Онлайн режим добавит еще около 1.5 мегабайта.
Хотелось бы больше услышать про графику. А именно как были сделаны эффекты: полупрозрачная стенка с двигающимся шумом, анимация отскока от стенки, как был реализован ray tracing. Было бы хорошо, если бы автор написал отдельную статью про это. И мне кажется, что это было бы намного лучшим пиаром, чем рассказ про какие-то основы OpenGL.
Поскольку я уже дома, то могу посмотреть как я это сделал (давно это было). На отдельную статью пока что не хватает времени.
Стол это простой куб, 6 граней, на который наложена текстура с прозрачными частями — лузы. На альфа канал текстуры накладывается текстура шум, т.е. в шейдер передаются 2 текстуры. Также в шейдер передается смещение текстуры шума, которое обновляется с каждый кадром. На самом деле текстура шума используется дважды, условно: смещение * 1 — смещение * 2 (движение в разные стороны).
Анимация отскока это квадратик с полупрозрачной текстурой кольца, который с каждым кадром увеличивается и становится более прозрачным.
Ray tracing просит физический движок предсказать где окажется следующее столкновение если задать шару такое направление полета. Дальше рисуется лазер (axis alligned billboard, квадратик всегда направленный перпендикулярно камере, каждый кадр пересчитывается его матрица), и «муравьи» (point billboard).
Мне уже делали замечание по этому поводу, я это писал без плохой мысли.
Я думаю людям, играющим кс, было бы интересно побегать в игре по знакомым им местам. А в школу ходили все.
3 года… снимаю шляпу перед вами. Сколько же труда и времени сюда было влито. Жаль только, что через неделю никто и не вспомнит по вашем приложении. И это конечно печально, но это суровая реальность текущего положения для мобильных игр. Неблагодарный труд и в какой-то мере бессмысленный.

Вот, что меня всегда останавливает, это что тратишь силы, время, вкладываешься в приложение, а в итоге просто не можешь его показать людям. Но приходят толстые дяденьки и вкладывают 40 миллионов в своё творение уровня удержи шарик на линии и набирают 50 миллионов аудитории. Снимают свои 4 миллиона и по новому кругу.

Весь гугл плей забит этой мутью вроде закажи отель, установи показ погоды, установи будильник и прочее в таком духе. Достойные приложения как обычно в самой глубине, откуда их уже никто не вытащит. Идиотская система, одни деньги решают всё.
Да и черт с ним, я не жалею.
Я уже очень рад что люди оставляют позитивные отзывы, сижу довольный :)
Выше уже поднимался вопрос про хабрахабр/«я пиарюсь»/мегамозг, но я все-таки напишу это в отдельном комментарии, а не в ответе на тот.

Посту действительно не место на хабре. Судя по скринам, игра действительно классная и прочитать про движок и _технические_ проблемы, возникшие в процессе разработки было бы очень интересно. И это хотелось бы увидеть именно здесь. Но в текущем виде — однозначно на мегамозг. Уверен, не приведи вы скрины/видео — комментарии были бы куда резче и негативнее.
Поддержал разработчика отключением рекламы! Инди разработка рулит, чо.

Из отзыва:
Сделано красиво и необычно! На OnePlus One полет нормальный, бегает шустро. Музыка также приятная электронная.

Из минусов:
1) При ударе мешает ближняя стенка стола, особенно на гранях (все белое, ничего не видно);
2) Нельзя вертеть камерой во всех плоскостях.
2а) Хочется вертеть камерой не только во время свободного просмотра, но и поставить кий и посмотреть, как там все пойдет.
2б) Если я летаю по комнате, а противник производит удар, камера всегда перемещается на его удар (лучше бы это делалось по горячей клавише).
image
Спасибо за отзыв!
Да я знаю об этой проблеме, много людей пишут.
Я хочу в ближайшем времени убрать ближнюю стенку стола (не знаю еще как). Пока можно воспользоваться кнопочкой с глазом слева чтоб поменять точку обзора.
Я не знаю как у вас всё работает но как вариант: Сделать каждую грань «стола» отдельным объектом. То есть получиться 6 плоскостей. После чего делаем рейтрейсинг (пускаем луч) от камеры в сторону «объекта интереса». И дальше либо меняем прозрачность плоскости в которую попал луч, либо меняем текстуру плоскости.

Ещё, как вариант, можно заморочится с шейдером. Чтобы он отрисовывал текстуру тем насыщенее чем дальше она от камеры. Это наверно предпочтительнее визуально, потому что не будет скачков при смене прозрачности плоскости.

Примерно так и сделал с помощью шейдера.
Прозрачность точки стола = dot(view, normal) — скалярное произведение (косинус угла) нормали и вектора взгляда. Нормали сглаженые (в точках где стыкаются плоскости, нормали этих плоскостей равны), что делает гладкий переход прозрачности.

image
Обзор предметов стал лучше, но теперь контрастность заднего фона всё перебивает. Можно его сделать более тусклым, чтобы игровая область выделялась. Вот просто глядя на этот кадр создаётся впечатление, что задняя стенка бильярдного стола нарисована прям рядом с дверью на стене. То есть нет глубины и позиции в пространстве. Это можно сделать заблюрив фон, но так как это ресурсоёмко — поэкспериментируйте со степенью освещённости заднего фона. И дальние от игрока стенки можно сделать более насыщенными.
Очень талантливо сделано, жалко у меня не андроид
Попробуйте ближнюю стенку стола плавно притушиваться по яркости и повышать прозрачность.
Спасибо, попробую. Многим неудобно целиться изза этой стенки.
Мысль возникла, как раз глядя на иконку приложения
Почему-то кажется, если у вас космический антураж, и текстуры на шарах поменять на текстуры планет — будет интереснее выглядеть.
Возможно сделаю как достижение — выиграл 10 боев, получи шарики, 20? Получи кий дарта вейдера :)
Вместо кия — ракета. Навёл на шары, дал ускорение и полетели планеты по орбитам )
Не очень логичным кажется утверждение «главной целью было получение знаний и опыта в создании 3D игр для Android… поэтому я не использовал готовые движки ». Всё-таки обычно 3D игры для Android делаются на движках, и знание популярного движка может в будущем пригодиться больше, нежели свой велосипед.

Ну а игра классная, поздравляю!
Не соглашусь. Цель же была — освоение инструментария. А освоив принципы, научиться пользоваться сторонним движком — сравнительно лёгкая задача.
Если бы был девайс с Андрюхой — обязательно поставил бы, идея понравилась
Sign up to leave a comment.

Articles