Главная | Настройки | NSFW
Тема:
Доски


[Ответить в тред] Ответить в тред

[Назад] [Обновить тред] [Вниз] [Каталог] [ Автообновление ] 160 / 78 / 113

GameDev Anonymous No.96153
15734747705230.jpg (12 KB, 474x405)
15734747706201.png (656 KB, 1700x943)
15734747707022.png (70 KB, 1273x712)
15734747707443.jpg (61 KB, 570x297)
Gamedev тред #0 + сон про кубы и чанки тред.
В этом треде обсуждаем gamedev. Тут уже где-то 4 треда про создание видеоигр, пусть будет объединённый. Началось с того, что я, команда PredposledniyRubikon мучился во сне, мне снилось, что я в своей игре на 0,0,0 блоке на адресе 0x5XXXXXXX..., в итоге я выпустил игру под названием Industriworks: https://store.steampowered.com/app/1143340/Industriworks/
Но я также продолжу и новые игры делать, когда закончу Industriworks.
И вы тоже пишите в этот тред про свои игры и наработки, спрашивайте ответы, задавайте вопросы.

FAQ:
0. Не хочу разбираться в движках типа Unity, Godot и GameMaker, хочу сразу делать игру. Как?
Ответ: Учи C или C++, смотри туториалы по SDL2, OpenGL, OpenAL, делай игру. Алсо, если тебе в туториале по OpenGL предлагают glBegin или glEnd, то этот туториал сильно устарел, но можешь попробовать для общего развития, работать будет.
1. Не хочу учить OpenGL, какой выбрать графический движок?
Ответ: Я незнаю, но можешь попробовать Ogre3D
2. Я офигею писать физику, какой движок использовать?
Ответ: Bullet (вероятно, лучший), NewtoneEngine (вероятно, лучший), ODE (вероятно, плохой, но я юзал). Это всё под 3D.
3. Как скомпилировать игру под виндовс/гнулинукс/макось?
Если у тебя GNU/Linux, то для виндовс есть mingw-X, где под X gcc и другие инструменты.
Как под линукс не из-под линукса скомпилить, я незнаю, не пробовал.
Для МакОС придётся либо покупать Apple-компьютер с XCode, либо качать некий Хакинтош. Но учти, что хакинтош это не уровень стим-игр, где-то ошибёшся и потом не будешь понимать, почему у эппл-игроков не работает, а их почти 3% от всего количества.
4. Хочу запилить реалистичную физику жидкостей.
Ответ: Наверное, тебе надо копать в сторону уравнений Навье-Стокса. Векторные поля, диффуры, всё это можешь учить на mathprofi.ru.
Вопрос в том, где ты найдёшь достаточно вычислительной мощи.
5. Как рисовать текстуры?
Овтет: В графическом редакторе, их много. GIMP, Krita. Например, Krita неплохая для графического планшета, а в гимпе тебе будет неудобно даже пиксельную графику рисовать.
6. Как делать музыку?
Ответ: Если не можешь в реале, то тебе понадобится трекер. Я использую milkytracker, но он мне не нравится.
7. В моих звуках слишком много шума, как его убрать?
Ответ: Звуковые эффекты, в т. ч. и избавление от шума можно сделать в программе Audacity.
8. Как делать 3D-модельки?
Ответ: В блендере. В недавнем обновлении ГУИ изменили, так что если ты начинающий, то тебе будет сложно смотреть старые уроки по блендеры, хотя при первом запуске ты можешь выбрать старый ГУИ.
9. Как загружать 3D-модельки?
Ответ: libassimp.
10. Как выложить игру на Steam?
Ответ: Регистрируешься в steamworks, на каждую игру единоразовая комиссия 100 долларов + от покупок около 30% (не считая налогов). Тебе придётся внести свои реальные данные, возможно и пасспорт. Читаешь документацию по стиму и стимапи (там ссылки кругом, разберёшься), создаёшь игру, проверяешь, она запускается хотя бы или нет, отправляешь на проверку в стим и тебе говорят, можно выпускать или какие-либо фатальные ошибки или рекомендации. Потом 2 недели минимум игра висит чисто страничка, потом пользователи могут покупать. Цены и скидки сам накладываешь когда тебе удобно, но с некоторыми ограничениями.
11. Как выложить игру на Google Play?
Ответ: Регистрируешься в гугл плей консоль, на каждого разработчика единоразовая комиссия 25 долларов. мобилочки подходят для рекламы и внутриигровых покупок, но никто тебе не мешает ещё и платной её сделать.
12. Как выложить игру на itch.io?
Ответ: Регистрируешься на itch.io, выкладываешь игру. Можешь даже продавать, получая на пейпал.
13. Как сделать игру?
Ответ: Мотивация + воздействие x время.
14. Как продать игру?
Ответ: Маркетинг.
15. Как делать трейлеры к игре?
Ответ: ffmpeg, OpenShot. Нужна хорошая музыка.
Anonymous No.96156
О, не думаю что ты слышал про концепцию с четвёртой картинки.

>Хочу запилить реалистичную физику жидкостей.
В играх если оно и есть, то там или частицы, или уравнение мелкой воды.
Например, в From Dust и Cities:skylines вроде как мелкая вода, но точно не уверен.

>Нет, ОП-пост совсем не подходит.
На свой бы посмотрел же.
Anonymous No.96161
>>96156
Всё-же, думаю мой ОП-пост гораздо больше подходит, чем твой. Ты говоришь, что время от времени ты будешь делать игры на юнити, а я создал полноценный gamedev тред, даже с [b]FAQ[/b даже если часть вопросов в некоторой степени шуточные или неточные], единственное что — я его окропил своим индустриворксом, сделав некоторую рекламу. Всё-таки, это, наверное, первая видеоигра выпущенная аноном с тучки в стим, масштаб большой. Я ещё не видел готовых игр анонов с тучки.
Anonymous No.96162
15734842024550.jpg (136 KB, 1251x683)
>>96161
Там не мой тред. Я просто к тому, что если уже есть четыре треда - то может быть в них и стоит остаться, чтобы не получилось как на картинке про "у нас есть 18 конкурирующих форматов..."?

Ну и ладно. Если остаток от деления на 7 суммы цифр в номере моей картинки будет равен 0,1,2 или 5 - буду быть в этом треде.
Просто тут очень много текста в шапке который в стену текста сливается, спонтанный тред в две строчки и с одной картинкой лаконичнее и эстетичнее выглядит.
Anonymous No.96164
Очень годная шапка.
Anonymous No.96236
>>96164
Тучую.
Anonymous No.96242
>>96153 (OP)
>0. Не хочу разбираться в движках типа Unity, Godot и GameMaker, хочу сразу делать игру. Как?
>Ответ: Учи C или C++,
А С# не канает?
Пост отредактировал Anonymous
Anonymous No.96243
>0. Не хочу разбираться в движках типа Unity, Godot и GameMaker, хочу сразу делать игру. Как?
>Ответ: Учи C или C++,
Лол, хочешь сразу делать игру, так не разбирайся с движками, а потрать минимум пару лет на то чтобы освоиться с сложным языком, на котором отстрелить себе ногу (а то и яйца) проще простого. Начинать надо с скриптовых языков попроще. Basic, Python, Lua. И писать свой движок на голом OpenGL смысла особого нету - на это уйдёт очередная пара лет. И для начала лучше взять какой-нибудь GameMaker или RPGMaker, где фишка в хорошем визуальном редакторе.

>3. Как скомпилировать игру под виндовс/гнулинукс/макось?
Компилировать надо под Виндовс. Под Линукс аудитория ничтожная, а если им так надо, пусть поставят Wine и его используют. Вот проверить совместимость игры с Wine это можно.

>6. Как делать музыку?
Лучше скачай свободную, её сейчас полно.

>7. В моих звуках слишком много шума, как его убрать?
Найти нормальные звуки без шума или купить нормальный микрофон и звуковую карту.
Anonymous No.96246
>>96243
>купить нормальный микрофон и звуковую карту
Для начинающего игродела бомжа это дорого.
Anonymous No.96247
>>96153 (OP)
Немного знаю Луа. Где мои навыки пригодятся? И куда копать?
Anonymous No.96251
>>96243
>минимум пару лет на то чтобы освоиться с сложным языком
В каком месте он сложный же? Я не уверен что питон проще.
Если пишешь "сложный" код, то питон со своими возможностями метапрограммирования даст фору крестам. А если простой - то там просто разницы нет. Кроме того, что в си 7/3 равняется 2, и несколько настолько же простым вещам, которые за неделю освоишь.
В питоне только готовые модули тащат - то что можно в пять строчек соединится с сервером условным или загрузить картинку. А в си их ещё подключить и скомпилировать надо, и строчек будет побольше во многих случаях. Но если модули раскрывать - едва ли там будет сильно более простой код, чем в аналогичных крестовых модулях.

>писать свой движок на голом OpenGL смысла особого нету - на это уйдёт очередная пара лет
А вот тут соглашусь. Там двинуться можно от разнообразий расширений. Впрочем, если игра двухмерная или если это ванильный графон без теней, отражений и сложной скелетной анимации, то месяца будет достаточно.

>>96247
В создании модов для фактории. Довольно во многих играх луа прикручивают как язык для модов или для логики уровней (чтобы можно было кастомные уровни со своей логикой делать).
Anonymous No.96256
>>96251
>В каком месте он сложный же?
Ручное управление выделением и освобождением памяти. Возможность порчи памяти. Для начала хотя бы это.
Anonymous No.96260
>>96256
Не уверен, что это сложно. Можно выделять память блоками, но потом все выделенные блоки потом нужно освободить - что может быть проще?
>Ручное управление выделением и освобождением памяти.
И зачем оно нужно с новыми стандартами с++? В питоне ты пишешь без ручного управления памятью, а тут оно тебе понадобилось? 99.9% программ можно сделать через стандартную библиотеку, через ту часть, что с контейнерами.
Работа с памятью необходима только если создаёшь новую структуру данных, какое-нибудь октодерево, которой нет в стандартной библиотеке. Или если какую-нибудь сишную библиотеку прикручиваешь, которая вся на указателях, условные winapi функции те же.
То есть я сам постоянно использую указатели - но во всех случаях я мог бы обойтись вовсе без них, во многих случаях без каких-либо существенных изменений, мне кажется. Но очень уж они выразительные - не хочется от них отказываться в угоду чему-то ещё.
Пост отредактировал Anonymous
Anonymous No.96263
>>96242
Я незнаю ничего насчёт C#, но из-за него, наверное, будут проблемы с портированием. Он подойдёт только, если ты портируешь игру на один виндовс.
С C или C++ ты можешь портировать хоть на 3 флагмана для ПК — MS Windows, GNU/Linux, Mac OS X, хоть на мобильные платформы через некоторые промежуточные слои. Хотя, насчёт iOS не уверен
>>96243
>минимум пару лет на то чтобы освоиться с сложным языком
Нет, пока юный геймдевер будет писать игру, сразу и освоится с языком, хотя и будет много спотыков.
Помню, когда ещё не был программистом, пробовал Unity. Это было ужасно, я так и не смог ничего сделать. В гейммейкере уже было получше, но тоже так себе. Чистые ЯП же дают огромную свободу действий и учить их легче, чем движки, которые и не движки, а программы по созданию игр.
>>96256
Мне кажется, что понять концепцию указателей и выделения памяти гораздо легче, чем питон с его объектами в виде текста, скриптового языка программирования. И ведь в питоне тоже есть указатели, только они менее явные.
Anonymous No.96294
15735782774260.webm (12929 KB, 1280x720, 00:00:29)
Anonymous No.96302
Я подумывал над добавлением в Industriworks режим децентрализованной сущности aka режим крепости. Появляется 2 человека (мужчина и женщина) и игрок может управлять ими, размножать, организовывать их труд. Как режим крепости в дварф фортресс, хотя есть некоторые отличия. Например, игрок может управлять ими напрямую, а может задания давать и они сами его выполнят. Ещё они могут перемещаться по миру как если бы это был один игрок. Если все умрут, то игрок проиграет, как если бы он был в хардкоре.
По механике разные режимы это просто игроки за разных мобов играют. Например, _player_ у меня айди состоит из 8 ASCII символов это игрок с выживанием. _buildr_ это игрок в режиме building (aka creative). Потом будет ещё хардкорный форк _player_, какие-нибудь наблюдатели, члены крепости и наблюдатель крепости (который держит камеру вне членов).
Мультиплеер я планировал сделать так, что игрок выбирает мир и запускает его в виде сервера, игроку показывают айпи:порт, по которому подключаться будут его друзья и он может настроить сервер. Например, после выхода с серва игроки будут пропадать по идее они должны просто остаться стоять, но по-дефолту они будут пропадать и через сколько времени после выхода, какие режимы игры для входа доступны (то есть, игрок выбирает стать выживальщиком, хардкорщиком, креативщиком, наблюдателем, децентрализованной сущностью).
Но это сервер с низким порогом вхождения. Для логов и всяких сетевых модов можно будет использовать cli-интерфейс. И если вводить cli-интерфейс для сервера, то можно и для клиента. Например, опции для того, чтобы сразу запустить нужный мир, а не входить в меню.
При этом, если на сервере установлены любые моды, то клиенту не надо иметь их у себя. Файлы ресурсов и локализации сами должны быть загружены сервером на клиент, а машинные библиотеки продвинутых модов должны исполняться на стороне сервера. То есть, есть всякие блоки типа печей и верстаков. Когда игрок интерактирует с ними (E), запускается коллбек GenGUI из структуры данных для именно этого предмета. Эта функция должна исполняться на стороне сервера и передаваться по сети игроку.
Но я никогда не писал сетевых игр и могут быть проблемы. Значительные проблемы.
Anonymous No.96358
Теперь пикрилейтед который я не смог запостить это самый настоящий кликер но не идлер и не должен быть идлером.

Разработка Индустриворкс идёт параллельно и я ускорил обработку света, а точнее не ускорил, а отвязал от мьютекса изменения чанков и привязал к мьютексу генерации чанков, в любом случае, теперь не фризит, хотя свет не быстро обрабатывается. Я ещё сделал так, что у каждого блока есть 2 структуры света — одна небесная, другая искусственная. Во время генерации draw даты используется максимальное значение из них. Но нужно именно 2 структруы, чтобы во время изменения времени суток пройтись по всем структурам для небесного света и расчитать только его, без искусственного света.
Anonymous No.96361
>>96358
Индустриворкс это просто клон Майнкрафта? Или он чем-то отличается?
Anonymous No.96363
>>96361
Он пиздец как отличается. От миникрафта только основные механики типа добычи ресурсов и кубики
Anonymous No.96370
Думаю, я релизну Индустриворкс v0.2 где-то 20 Ноября. Я думаю над тем, чтобы интегрировать настоящий физический движок, например, Bullet, а то мне сложно считать коллизии. Можно подумать, что это оверкилл, но нет. Я плохо совладеваю с коллизиями, в нынешней dev-версии у меня игрок прыгает в ребро блока и проваливается вниз, просто летит. Также можно попасть в ствол дерева, если идти в ребро и застрять в нём. В нынешней публичной версии игрок не прыгает, а летает и если попал в блоки, то может легко выйти.
Ещё я когда-то думал над идеей, чтобы предметы дропа имели lowpoly модельки с пиксельными текстурками и вели себя как обычные 3D-объекты в физическом мире, но из кубиков. Но мне кажется, что это немного не подходит. Кроме того, моддерам будет сложно делать моды с такими предметами.
Тем не менее, такое можно использовать для визуальных эффектов с частицами. Может быть шарики со спрайтом в центре покатятся при смерти какого-нибудь моба. Или при отрубании конечности она красиво полетит.
Ещё можно облагородить анимацию мобов. Например, при хождении ноги поднимаются и корпус опускается, пусть высота, на которую моб опускаются вычисляется с помощью тех же коллизий.
Ещё в bullet есть, вроде бы, физика мягких тел, в частности тканей, а я в Индустриворкс планирую добавить ветер.

>>96361
Во время выхода первой публичной версии v0.0.6 он не сильно отличался (за исключением, что это очень недоразработанный клон), впрочем и сейчас.
Если же рассматривать его как идею или как будущую релизнутую версию Индустриворкс, то очень сильно отличается.
Нынешний курс таков, что игрок появляется в мире, где ему надо будет очень много гриндить. Но гринд должен увеличиваться путём автоматизации с помощью големов. Порог вхождения в големоведение высок, игроку придётся научиться крафтить сталь (тут https://steamcommunity.com/sharedfiles/filedetails/?id=1866265922 показано как), чтобы скрафтить пилу и вырезать блоки горных пород для создания пьедесталов и самих големов. Для создания големов нужны заклинания, игрок может получить их из инвентаря за MP — money point. MP можно получать путём убийства других мобов и торговлей. Также, возможность создания големов-охотников и големов-торговцев для гринда большого количества дропа с мобов, в т. ч. и редкого и продажи товара.
Алсо, я и думал недавно над механикой спавна мобов. Раньше я предположил, что пусть они генерируются вместе с чанками и единственный способ получения новых мобов — их размножение. Всех мобов. Но решил, что это не подходит Индустриворкс. Пусть в зоне из чанков создаётся структура данных о популяции некоторого вида и если таких осталось мало, то они будут просто спауниться, а деспавна не будет никакого. Таким образом, игрок может поймать в клетку интересные экземпляры мобов и наслаждаться их видом. А какой-нибудь Порченный не задеспавнится с ценным предметом. Или можно просто стоять на месте и убивать новоспавнящихся мобов. Убирать спавн или усиливать его можно будет при помощи специальных предметов. Не всем понравится, если на их личной лужайке начнут спавниться кабаны желтоглазые.
Все эти ресурсы нужны, чтобы побеждать боссов и минибоссов. В Майнкрафте боссов 2, а Террарии 14-15, а в Индустриворкс пусть будет 30 и 50 минибоссов.
Если посмотреть на боссов в регулар играх — Майнкрафт, Террария, ТЕС5 Скайрим, многие другие, то они по меркам Индустриворкс минибоссы. Боссом может быть летающий остров с кучей пушек, отряд злых гоблинов или проклятие населённого пункта, заставляющего всех жителей строить особые конструкции. А минибоссом отдельный моб, может быть, имеющий несколько приспешников.
Также одна из фишек, которые надо будет добавить, это обилие заклинаний и их реакций с окружающим миром. Сейчас есть 3 заклинания — Жизнь, Разложение и Реконфигурация. В следующей версии (v0.2) появится картошка и с помощью заклинания Реконфигурация из неё получается помидор. Это пример такой реакции.
Заклинаний разных много можно добавить. Например, Поджиг — дорогой аналог зажигалки, Регенерация — для лечения мобов, Исполнение — игрок ставит макет блоков (как чертежи в Факторио), идёт и блоки сами ставятся некоторое время. Причём, предметы, в частности заклинания, можно применять на предмет и на себя.
Изначально доступны только Жизнь и Разложение. Для открытия, например, Реконфигурации, надо выпить 10 наковален и заплатить 2 ML — money level.
Anonymous No.96374
Ладно, давайте роллю что ли, чего ждать - всё-равно заброшу через пару недель. По остатку (секунды поста) от деления на 5. Раз в два дня обязательно показывать скриншот и отчитываться о проделанном.
0. Клон-ремейк oxygen not included без элементов симса и более физически реалистичный.
1. Клон-ремейк Project Zomboid с меньшим количеством элементов симса.
2. Стелс-стратегия в лесу со временами года, где противника нужно для начало найти по вырубленным деревьям, натоптанным тропинкам, с помощью собак или по помятым кустам травы.
3. Сессионный шутер с аутизмом, для 1-10 человек минут на 40 на карту. С помятой травой и сидением в кустах.
4. Лабиринт (очень понравилась картинка: >>95004), только трёхмерный, чтобы там год можно было плутать. С элементами песочницы, чтобы можно было расставлять освещение в пещере и рисовать на стенах знаки для ориентирования.
Anonymous No.96523
15736745276950.webm (2555 KB, 1280x720, 00:00:48)
Немного освоился с буллетом, но документацию пришлось угадывать. Ещё и прослойку C — C++ писать незнаю, есть ли для си биндинг

>>96374
Круто, попробуй. Мне понравилась идея под номером 2, но тебе выпало 3.
Anonymous No.96580
Вопрос насчёт документаций.
Вот смотрите полный мануал по ODE: http://ode.org/ode-latest-userguide.html
А теперь документацию по bullet (случайная страница): https://pybullet.org/Bullet/BulletFull/classbtRigidBody.html#ad692042edc901425189cf1d067eebac6
Вообще это немного не то, у буллета есть тоже мануал, но он в виде PDF и там почти ничего не объясняется по аргументам.
Почему у C++-библиотек такие странные доки? Такой же стиль видел у LLVM, непонятно что делают те или иные классы, их методы, что их аргументы означают. Ладно, я увидел в одном туториале как узнать положение body в пространстве, теперь я могу угадать как получить его кватернион углового положения, но это потому что я видел как получать кватернион в ODE. Почему нигде не показано, за что отвечают аргументы? Может оно сделано по единому стандарту, который я пропустил в мануале для соответствующей библиотеки? Для создания цилиндра мне предлагают давать функции btVector3, но что делает третье число? Первое, допустим, — радиус, второе — высота, а третье на что? Пустой груз? Я не понимаю. C++ники сверхлюди, чтоли? Они, может быть, понимают друг-друга с полуслова?
Не рекомендую учить C++ первым ЯП программистам, они не поймут, что такое класс, его конструкторы и деструкторы и бросят программирование, как это я сделал когда-то. Надо учить C вместо C++, он элементарный и близок к машинам, позволяет понять как они работают. хотя, чтобы понять указатели, мне пришлось изучать ассемблер, но я думаю, это не обязательно.
Anonymous No.96606
Ввожу физику в Индустриворкс, а через буллет игрок иногда застряёт на пустом месте. На самом деле не на пустом, а при выбросе дропа, который появляется там же, где и игрок. Это не страшно, ведь дроп и мобы не должны быть твёрдыми как и мобы, они должны отталкиваться как это реализовано в Майнкрафте друг для друга. Надо будет посмотреть как это сделать. Кстати, ещё можно сделать физические характеристики для дропа — как они будут себя вести — как цилиндр, который всегда стоит, как шар покатится или как цилиндр-колесо и в зависимости от этого меняется их траектория движения. Или даже мобов/снаряды в виде самых настоящих шаров, а не скелета из кубиков.
Что насчёт ещё дропа, то неплохо бы сделать механику как у листьев для некоторых видов предметов. То есть дроп летит туда-сюда, плавно спускаясь на поверхность. Для бумаги, листьев деревьев и чего ещё.
Я когда-то думал над добавлением косых блоков — в виде рампов обычных и угловых, внутренних и внешних. Но я думал, что не осилю, максимум коллизии для однонаправленных параллелипипедов заделаю. С буллетом всё легче.
Алсо, я порицаю использование исключительно косых блоков в архитектуре (строения, здания) в блочных играх для косых поверхностей. Я думаю, что лучше комбинировать косые с обычными кубами, разнообразя крышу, таким образом.
Так можно будет и легко сделать движущиеся чанки, с помощью которых могут быть сделаны многоблочные корабли, летающие остров и, даже, вагоны! Да, в версию v0.3 я собираюсь ввести железную дорогу и неплохо бы, чтобы на вагоны можно было ставить блоки где-то в 8x4 площадь и несколько в высоту, это сравнительно с габаритами настоящих вагонов, даже меньше. Главное, что на таких вагонах можно будет хоть дом построить плоский, хоть любые пушки вставить для обстрела.
Anonymous No.96620
>>96606
>С буллетом всё легче.
А он не умрёт от геометрии 3х3х3 чанков?

И почему ты игнорируешь физикс? Если буллет без особых проблем с ним может конкурировать, то ode и невтон просто не работают по сравнению с физиксом. У невтона свои преимущества, но ode же просто бесполезный - единственное что в нём любопытно, что он просчитывает столкновения до интегрирования скорости (а не как все остальные движки) - из-за чего объекты отталкиваются ещё до видимого столкновения.
Anonymous No.96641
>>96620
Да я вообще не разбираюсь в физических движках. И в википедию почему-то не додумался посмотреть. Я уже и не помню как узнал об ODE. Про newton от тебя, небось. А про буллет услышал насасаче захожу в ридонли тематику иногда.
>геометрии 3х3х3 чанков
Это будет в среднем около 50 параллелипипедов-семплов на чанк, к тому же, они immovable. Разве сложно пройтись по нескольким десяткам сущностей и просчитать коллизии между ними, учитывая, что большая часть вообще будет вне радиуса, где может случиться коллизия?
Кроме того, там можно распараллелить. Если расчитывать на 4 ядра рядового компа, то 2 ядра расчитывают физику, одно-два мир, тем временем одно иногда генерирует чанки, а GPU пусть опенгл рисует.
Сейчас отрисовка блоков чанка выглядит так:
for (u32 rdp_i = 0; rdp_i < chunk->rdpNum; rdp_i++) {
RenderDataPiece* rdp = &chunk->rdp[rdp_i];

if (rdp->fps != 0.0) {
rdp->frame = FrameNow(rdp->fps,rdp->FrameNum);
}

for (u32 rd_i = 0; rd_i < rdp->rdNum; rd_i++) {
glBindTexture(GL_TEXTURE_2D,rdp->rd[rd_i].frames[rdp->frame]);

glBindBuffer(GL_ARRAY_BUFFER,rdp->rd[rd_i].vbo);

glVertexPointer(3,GL_FLOAT,0,(void*)(u64)0);
glTexCoordPointer(2,GL_FLOAT,0,(void*)(u64)(rdp->rd[rd_i].num*sizeof(GLfloat)*3));
glColorPointer(3,GL_FLOAT,0,(void*)(u64)(rdp->rd[rd_i].num*sizeof(GLfloat)*(3 + 2)));
glDrawArrays(GL_QUADS,0,rdp->rd[rd_i].num);

glBindBuffer(GL_ARRAY_BUFFER,0);
}
}

u32 это uint32_t
Я не знаю как тут оптимизровать, я хотел попробовать использовать gl list, но ведь glvertexpointer и другие pointer это клиентские функции и я не очень всё это понимаю.
Кроме того, для отрисовки сущностей я использую glPushMatrix и glPopMatrix, но, как я понимаю, это прошлое десятилетие и нормальные программисты вручную считают для каждого кадра через синусы хитроумные перемножения матриц вертекс данные, текстурные данные и вообще делают единую текстуру-атлас, а мне всё это сложно, я плохо знаю математику и опенгл слишком низкоуровневый для меня.
Anonymous No.96644
15737578371870.webp (531 KB, 1742x1003)
15737578374931.webp (665 KB, 1793x1059)
>>96641
Нет смысла (в плане быстродействия) использовать glCallList, если у тебя GL_ARRAY_BUFFER.
А что за карточка у тебя? Ну не может тормозить то количество чанков, которое у тебя на экране. Даже через glBegin/glEnd на встроенной карточке от интела за 2004 год.
Вот смотри. Я рисую 50 тысяч квадратов (первая картинка), и перед на каждый из них вызываю glBindTexture и новую пару glBegin, и даже такое говно выдаёт 50 фпс.

>for (u32 rd_i = 0; rd_i < rdp->rdNum; rd_i++)
Вот это проход по текстурам, насколько я могу понять.
То есть у тебя цикл по чанкам, а внутри него по текстурам. Попробуй переставь их, чтобы был цикл по текстурам, а внутри него цикл по чанкам.
Вот, смотри второй скриншот - я увеличил количество квадратов в 10 раз (плотность примерно такую же поставил, умножив размеры поля на 4 по двум осям), но убрал переключения текстур, так что сначала рисуется 250 тысяч одной текстурой, а потом другой. Пары glBegin/glEnd при этом на месте. Фпс увеличился с 50 до 540. Вообще охуеть, 500к квадратов в 500 фпс.

>опенгл слишком низкоуровневый для меня.
Зачем тогда си мучаешь, если есть кресты?
Anonymous No.96646
>>96641
А вообще один GL_TEXTURE_2D_ARRAY решит все твои проблемы. Там не будет переключения текстур (совсем, ни одного переключения) и не требуется группировать отрисовку полигонов по типу текстур. То есть ты на каждый чанк один раз вызываешь glDrawArrays, и всё. Все полигоны с разными текстурами в одной куче. Тип текстуры заключается в третьей компоненте текстурной координаты (придётся поставить glTexCoordPointer(3, ... )).
Пост отредактировал Anonymous
Anonymous No.96682
15737977707390.webm (523 KB, 1800x980, 00:00:07)
15737977708571.webp (159 KB, 2124x780)
>>96374
>Раз в два дня обязательно показывать скриншот и отчитываться о проделанном.
Настроил рендер в текстуру кое-как. Он потребуется для hdr-освещения, и для камер. И тепловизоров. Ещё через него можно сделать честное полноэкранное сглаживание и много других эффектов по типу бликов или выделения границ.

Пока технический план такой:
Разложить рендер и игровую логику в два разных потока (чтобы управляемость не зависила от фпс - как происходит в подавляющем большинстве игр, где нажатия клавиш привязаны к рендеру картинки).
Сделать коррекцию прямоугольной перспективы (эффект, из-за которого в трёхмерных играх объекты по центру экрана меньше, чем если камеру повернуть под углом). Пример на второй картинке, из игры Apex Legends c fov равным 110.

Список геймплейных идей:
Мир замкнутый - можно неограниченно идти в любую из сторон, но через некоторое время вернёшься назад. Много гор, пещер, проходов, сложная организация пространства.
Из окружения камни, кусты (ни разу не прозрачные - но звуки разносятся далеко и сквозь кусты нельзя бежать с адекватной скоростью), трава, следы от игроков. Совершенно точно смена времени дня, и, маловероятнее, погода. Погода сложная всё-таки. Может быть руины какие-нибудь.
Из оружия огнестрел и какие-нибудь копья - потому что разведка существенна и шуметь лишний раз не стоит. Растяжки, капканы, камеры, дистанционные микрофоны, взрывчатка реагирующая на звук, на движение, с дистанционным взрывателем или таймером. Игра должна быть не про аим и реакцию, а про тактику, удачные позиции и предугадывание действий противников. Никаких поединков на револьверах со 150 метров на удачу. При этом нужно как-то решить проблему с высиживанием в одной точке - например, через некоторое время на запах сбегаются собаки, и после достаточного скопления они начинают лаять и выть выдавая позицию. На самом деле это будут не собаки, а абстрактные летающие вдоль земли и жужжащие мобы из соединённых октаэдров - потому что я не умею в моделлинг и не вижу никакой самоцели в стремлении сделать именно человеческие модельки, дома и всё такое привычное - к тому же даже если бы умел - такое количество всего в "человеческом сеттинге" одному сделать почти невозможно даже не считая кода, который нужно будет написать для разнообразных анимаций.
Экипировку игроки выбирают заранее.

В первую очередь минимальный играбельный прототип.
Завтра же пустой плоский мир (пока не замкнутый) без освещения и графики, движение игрока (сферического в виде облака пыли/искр) и камеры, одно оружие и стрельба из него.
Во-вторую очередь вообще любые звуки просто чтобы были и мультиплеер. Потом всё остальное.
Anonymous No.96711
15738106653730.webm (2181 KB, 1606x858, 00:00:20)
Я перерисовал текстурки maho_lif (Life) и maho_rcn (Reconfiguration), сделав их анимированными.
Думаю, добавлю ещё 4 большие фичи и выпущу v0.2:
0. Сделать анимацию хождения гоблину.
1. Добавить физику.
2. Исправить звуки (они у меня появляются немного не в тех местах).
3. Изменить ачивки — вместо моделек (блока, предмета) буду рисовать отдельную иконку, виджет contexmenu ачивки будет содержать имя и квест (добыть дерево, выплавить сталь), но главное то, что при нажатии будет открыто окно с описанием и рецептами крафта, таким образом, игрок может узнавать рецепты крафта прямо из игры по мере её прохождения.
Никаких книг рецептов как в майнкрафте (которая, к тому же, запоминает только уже деланные крафты) или экстернальных форумов.

>>96644
>>96646
Можно попробовать этот GL_TEXTURE_2D_ARRAY, но, как я понял, текстуры должны иметь одинаковый размер, а для этого мне придётся переделывать весь движок отрисовки и генерации дравдаты, так как текстуры у меня разных размеров. Есть с развёрткой куба, есть большие текстуры для горных пород, где блоку придаётся смещение в пикселях, и могут быть текстуры с одной стороной блока.
Насчёт моей видеокарты, то это встроенный интел гпу, причём, возможно, прожжоный. Когда-то иногда возникали шумы на мониторе, а потом прекратились. Тем не менее, те же игры, которые и раньше запускались, не так уж и тормозят.
Anonymous No.96725
Я, кажется, понял философию C и C++. C — для интровертов, а C++ — для экстравертов.
Когда кто-то задает вопрос по C, ему предлагают сделать велосипед, а не использовать уже готовую библиотеку, то есть как раз занятие для одиноких людей, которые лучше сделают самостоятельно, чем найдут готовое универсальное решение. С другой стороны, если прочитать документацию по рядовой C-библиотеке, то всё станет понятно.
А когда читаешь документацию по C++-библиотеке, ты на самом деле не читаешь, а пытаешься её угадать. Люди, живущие активной социальной жизнью должны понимать намёки других людей, иначе им конец. Вот и вместо написания нормальной документации, они говорят "Это же ООП" и заставляют других людей угадывать как работает их библиотека.
Это можно найти и отражением в программах, написанных на этих языках. Возьмём Линус и Виндовс. Линукс написан преимущественно на C и самая популярная ОС на нём — GNU/Linux очень одинока. Около одного процента пользователей Стима используют Линукс, а если вообще десктоп, то ещё меньше. С другой стороны, документация, связанная с ним очень хорошая, как аутисту объясняют. Если же посмотреть на Виндовс, то как решается проблема: Вылазит сообщение, что произошла ошибка, пользователь нажимает OK и пытается угадать, в чём была проблема, как её исправить и нужно ли вообще этим заниматься или стоит потерпеть (как иногда терпят неприятных людей). Если же попроситься на сайт поддержки микрософта, то там вряд ли что-то ответят, то есть тебе всё-равно надо самому угадать как решить проблему.
Мне кажется, что велосипеды, как и угадывание документации — плохая затея для программирования. Другое дело питон...
Anonymous No.96728
15738279795320.png (73 KB, 1414x212)
>>96711
> текстуры должны иметь одинаковый размер
Да нет же. Всё что им нужно - одинаковый тип и фильтрацию (что тоже можно обойти через более сложные шейдеры). Ты создаёшь один GL_TEXTURE_2D_ARRAY, просто потому что он не ограничен размером и в одну такую штуку можно запихнуть все текстуры даже довольно крупного размера. Если текстуры маленькие - то ты запихиваешь несколько на один слой. При этом в шейдере у тебя есть доступ к массиву, где указано, что текстура 57 - это текстура с 13 слоя с текстурными координатами по x от 0.25 до 0.5, и по y от 0.75 до 1.0.
А в самом коде ты просто через третью компоненту текстурных координат указываешь 57 - а к нужным текстурным координатам нужного слоя это приведёт несложный шейдер в три строчки.

Если у тебя все текстуры по 16х16, то можно и один слой GL_TEXTURE_2D оставить. Но, возможно, тогда есть смысл на процессоре заранее просчитать и привести все текстурные координаты, особенно если у тебя интел. Но это будет давать выигрыш только при таком низком разрешении текстур (которые уместятся в одну текстуру) и только потому что у тебя интел, мне кажется.
Кстати, по идее вывод текста у тебя уже должен работать подобным образом, не очень представляю как можно было сделать сделать по другому. Я вроде бы показывал, у меня вот такая текстура генерируется - с самым худшим, написанном на коленке алгоритмом заполнения текстуры прямоугольниками. Для объектов оно точно так же работает, как и для шрифта.
Anonymous No.96866
В другом треде анон попросил другого сделать игру про дождевого червячка на поле боя и я вспомнил одну из своих идей:
Идёт мужчина голый из душа в своей квартире, а его многоэтажка взрывается. Его отлетает, но он в созании и думает "Эх, жаль, конечно, что такое случилось, но повернуть обратно уже нельзя, пора приспосабливаться к новому образу жизни" борьба со стрессом. К началу игры его руки и ноги сломаны и ему передвигаться очень сложно. Есть ряд квестов. Выбраться из-под завала и увидеть серое пасмурное небо, найти мимосевшую божью коровку, выкопать из-под завала трёхлетнего мальчика, который потом побежит по завалу и выберется, найти какие-нибудь ресурсы и вещи, попробовать оказать первую помощь себе. Игра заканчивается тем, что через несколько часов его находят спасатели.

Раз я начал писать этот пост, то напишу новости про Индустриворкс. Я отказался от буллета. Как бы хорош он ни был а я даже это не успел проверить, плохая документация убивает его полностью. Буду сам писать с гитхаба функции для распознавания коллизий между параллелипипедами. У меня есть баг, при котором игрок попадает в ребро и падает, но недавно я понял, что неудобство можно нивелировать, если разрешить игроку прыгать, даже если его скорость ненулевая. Раньше так нельзя было, потому что игрок, теоретически, сможет прыгнуть, достигнув высшей точки параболы траектории (где скорость по y нулевая), а не конца.
Популярность Индустриворкс в последнее время возрасла, мне это нравится.
Кстати, осенью и зимой будут бешеные скидки на него в это время, вероятно, будет самая маленькая цена на Индустриворкс в стиме, за полдоллара можно будет купить, так что если кто-то из вас до сих пор этого не сделал собирался, это шанс для вас сэкономить несколько долларов.

Я также делаю и другую игру. Планировал к второму декабря доделать (итого за месяц), но фичи не вводятся, так что, скорее всего, придётся 2 месяца делать. А 2 x pi/2 = 3.
Anonymous No.96867
>>96866
>Игра заканчивается тем, что через несколько часов его находят спасатели.
Необычный сюжет, однако.
Anonymous No.97010
Я понял, почему у меня в Industriworks FPS проседал. Я забыл после обработки изменённого чанка устанавливать флаг изменения в 0, из-за чего лочился мьютекс, связанный с отрисовкой динамических моделей блоков (голем-инсертер, голем-крафтер). Теперь максФПС доходит до 100.
Anonymous No.97157
>>96153 (OP)
Дебич, вместо того чтобы реально занятся ИГРОЙ делает унылые костыли дристодвижок. И имеет невероятный фурор на стиме. Слабоумный шизик тратит время
Anonymous No.97182
Industriworks v0.2 из вышел
Тут можно посмотреть все новости:
https://steamcommunity.com/app/1143340/allnews/
Теперь буду делать v0.2.1
Anonymous No.97429
Пока ничего не делаю, только немного облагородил страницу в стиме: https://store.steampowered.com/app/1143340/Industriworks/
И трейлер теперь имеет музыку. Она очень элементарная, но я думаю, хоть какая-то, чем вообще без звуков. Но к релизу стоит сделать нормальный трейлер если сам индустриворкс будет нормальным с очень хорошей музыкой, чтобы выглядело как опенинг для аниме. Причём несколько трейлеров, один — опенинг, второй — шуточный, а третий — геймплейный. На такое и потратиться на звукорежисёра + композитора неплохо. Но это в случае большего успеха Индустриворкс.
Я ещё нашёл баг, из-за которого вылетает, если сделать скриншот (F2), предварительно ресайзнув окно. До сих пор не понял, в чём проблема.

До лайси + миллионы библиотек далеко, а игры делоть надо, так что я изучаю вопрос в сторону движков, а именно — годот, потому что это опенсурсное свободное и, вероятно, удобное, там ещё gdscript на питон похож. Пока выглядит не плохо, когда-то при первом знакомстве с ним я отошёл, потому что не прочитал документацию. Главное — воспринимать его как приложение для создания небольших приложений, а не как игровой движок. Для Индустриворкса он не подошёл бы. Для новой игры, которую я тоже поделываю, подошёл бы, но я уже начал делать на си, так что не буду ничего переписывать. Он также мог бы подойти для платформера про паучка, который я отменил. Может быть потом и поделою, мож даже игру про нефтедевочку на нём заделаю. Если только не будет отторжения моим организмом и если я вообще буду делать игры. В них я вижу прежде всего возможность дохода и только потом творчество. Но в игре про нефтедевочку большая составляющая творчества, было бы интересно просто её сделать и выпустить.

>>96682
>пять дней спустя
ммм?
Anonymous No.97433
Сап, аноны, хочу попробовать сделать эдитор для внок, но в гуем и формочками как в вордпрессах этих ваших. Думаю сверстать на пайтоне. Что думаете по этому поводу?
Anonymous No.97444
>>97433
Есть же renpy, какой смысл в гуёвом приложении для создания VN, если там почти ничего, для чего понадобился визуал, нет. Визуал это для видеографики, 3D-моделирования, а совмещение картинок с текстом можно и в воображении представить, стиль подобрать за несколько итераций.
Но я не разбираюсь в VN, так что не уверен насчёт этого.
Anonymous No.97456
>>97429
Это говно ещё и покупать надо?!
Anonymous No.97533
>>97429
Я же говорил это один и тот же шизик, хуево быть тобой
Anonymous No.97552
По Industriworks выпустил ещё видео:
https://www.youtube.com/watch?v=687mQvdBiO4&feature=youtu.be
Anonymous No.97556
>>97429
>ммм?
Муу.
>Пока ничего не делаю
Вот то же самое, на выходных кое-что случилось и никакой возможности желания что-то сделать на них или немного после не было, не писать же об этом. Не заставляй отчитываться то, сам хорош - почти ничего не сделал за три месяца. Иди лучше анона, который хотел делать свою рпг потыкай(>>95837 (OP)), у него даже пульса нет, в отличие от.

Каждые два дня я фигурально имел ввиду кстати. После каждого куска проделанной работы имелось ввиду. Не могу попасть в состояние потока сейчас, чтобы быть в достаточной степени продуктивным и мотивированным.
Пост отредактировал Anonymous
Anonymous No.97560
15744254802750.png (1365 KB, 1584x893)
15744254804151.png (688 KB, 1584x893)
15744254804832.png (676 KB, 1584x893)
Тещу новый ландшафт сгенерированный по шаблону в виде картинки. В данном случае я использую шаблон круглого острова. Только тут на каждый блок свой пиксель отвечает, причём в линейной зависимости. В будущем же надо сделать каждой область в N×N блоков пиксель и зависимость немного нелинейная, ещё и шумом перлина холмов накидать. И океаническую воду добавить.
На последней картинке видно как островной шаблон обрывается обычным шумом.
Думаю, не буду делать процедурно генерируемую историю, но шаблонный остров с некоторыми вариациями, ещё и единственными локациями, разбросанных в разных уголках острова. Приблизительно так в террарии — один дандж, один джунгевый дандж, один пустынный/джунглиевый/снежный биом. Только там один перс может ходить в разные миры, а у меня нет. У меня теоретически могут генерироваться больше экземпляров одной локации, но реже.
Один остров генерируется вокруг игрока, а другие, с другими биомами и более сложные рядом, а когда заканчиваются шаблоны — просто процедрные островки, в которых и могут встретиться новые экземпляры этих самых локаций.
Алсо, я писал когда-то про цветы роз, но их я собираюсь делать, когда введу хитбоксы. Куст роз тоже будет иметь хитбоксы, а в них цветки роз и при срезе их ножницами они будут подсвечиваться.
Anonymous No.97588
15744485099950.png (1949 KB, 1584x893)
15744485100701.png (124 KB, 400x400)
Хотя не, шумом перлина сдабривать не надо — только ухудшит.
Надо будет и пещеры как-нибудь нарисовать и чтобы они такими же шаблончиками генерировались.
По-хорошему мне нужен воксельный 3D-редактор, если я не хочу играть в дварф фортресс в гимпе. Индустриворкс в такое я превращать не хочу, так как зачем ещё оптимизировать и лишний ненужный контент добавлять? Бинарными вокселями буду пещеры делать, а цветными разные блоки обозначать.
А в интернете есть очень много пещерных и гробничных артов для вдохновения. Но мне бы ещё научиться острова рисовать.
Anonymous No.97604
15744523683710.png (153 KB, 799x701)
15744523685611.png (111 KB, 959x740)
Вариант домика для гоблина-бомжа. Грубые трухлявые бетонные стены, несколько стёкол, сундук, кровать и дверь, деревянная крыша.
У более богатых гоблинов будут уже нормальные дома.
Anonymous No.97626
>>96153 (OP)
> GameDev
Как же это сложно. Тут без команды кодеров и дизайнеров ничего не сделаешь.
Anonymous No.97629
>>97604
Кокой милый домик. Не понимаю почему в Майне нет нормальных НПС с поселениями, которые они развивают, а есть только тупые и уродливые жители.
Anonymous No.97649
15745156242000.png (1471 KB, 1584x893)
Раньше, если зайти далеко (сгенерировать много чанков), начинало лагать. Это было, потому что при поиске чанков по коордам у меня просто перебирался весь их массив и сравнивались координаты. Теперь же я храню их в ассоциативном массиве, у которого в индексах координаты. Не уверен как называется такая структура данных, я думал, что "дерево", полез в википедию и оказалось, что мне надо было деревья делать, а не то, что я.
Ну ладно. Производительность так выросла, что я офигел. Бежал до конца карты, пока вся ОЗУ не заполнилась чанками (которые, пока что, не выгружаются на диск) и ничего не лагало.

>>97626
кодер, дизайнер, композитор, сценарист-геймплеер, 3D-моделер/рисовальщик, тестировщик, а самое главное — маркетолог если только ты не делаешь игры чисто для себя/для интереса. Да, это сложно, но в современном мире 3D-моделера/рисовальщика и композитора можно заменить процедурным алгоритмом, а кодера "движоком" типа годота или юнити, так что, будучи лишь маркетологом можно делать успешные игры. Но это грубо сказано и чтобы сделать AAA-проект, придётся установить несколько пакетов хорошего софта и потратить минимум пару лет.

>>97629
имхо, Майнкрафт это классика, причём развивающаяся и быстрый рост только навредит ему. По-моему в последних обновлениях было много лишнего. Например, отряды, нападающие на деревни или арбалетчики, спавнящиеся около башен. Что насчёт первых, то идея неплохая, но не слишком хорошая, а вторая вообще тупо реализовано. Арбалетчики спавнятся без остановки вокруг башни, неизвестно, сколько на том регионе их осталось и как остановить спавн. Ещё Особняк в тёмнодубовом лесу выглядит как-то нелепо, даже незнаю чем описать. Слишком большой, что ли, комнаты непроработаны, слишком мало разнообразий, не уверен. Я думаю, что майнкрафту нужна кастомизабельность, в частности, официальная поддержка модов. Хотя и уже майнкрафт сильно кастомизабелен при попощи команд и командных блоков и других фич. Кстати, Командный блок — первый шаг, чтобы стать линуксоидом для десятков тысяч детей по всему миру!. На многих серверах можно увидеть всякие скульптурки, сделанные из вешалки для брони, блоков и предметов.
Для меня майнкрафт это даже не просто игра, это нечто большее. Как культура какая-то, часть жизни, способ представления данных и выдуманного мира или что-то наподобие этого. Мне не хотелось бы, чтобы он слишком быстро рос, а то плохая фича станет опухолью.
Anonymous No.97910
15746149650300.png (1550 KB, 1584x893)
15746149651021.png (814 KB, 1584x893)
15746149651612.png (659 KB, 1584x893)
15746149652113.png (1676 KB, 1584x893)
Около окенана лагает — вода просачивается в пещеры.
Но какие виды! Благодаря ним хочется и дальше продолжать делать индустриворкс.
Для следующей версии v0.2.1 осталось ввести 2 фичи — смерть и урон от скорости (падения в частности).
Ещё надо будет попробовать с мультиплеером поэкспериментировать, но сначала лучше ввести режим Building и Hardcore.

Я придумал ещё одно заклинание, которые надо будет добавить — ускорение. Если применить его на игрока, то ничего не будет, если на растения — они быстрее вырастут или умрут.
Кроме него, регенерация — для восстановления здоровья, исполнение — для быстрой ставки блоков по чертежу (которые тоже надо будет добавить), поджиг — для создания огня.
Anonymous No.97942
>>97910
>ускорение (времени, как в дед стандинг дэ?)). Если применить его на игрока, то ничего не будет
Почему же, лечение ран должно быть.
Anonymous No.97960
Привѣтъ, я дѣлаю классическую RPG въ духѣ первыхъ Ультимъ или того же Wasteland. Хотѣлось бы услышать, что бы вы пожелали тамъ увидѣть. Кроме коровановъ, разумѣется - они и такъ будутъ.
Пост отредактировал Anonymous
Anonymous No.97991
>>97942
>как в дед стандинг
Я скорее вдохновлялся походкой божества из Принцесса Мононоке.
Насчёт лечения ран, то зачем тогда Регенрация? Возможно, Ускорение будет избавлять от бафов и дебафов, а вообще, игрок схож с големами и он не должен стареть. Возможно, Ускорение будет немного лечить обычных мобов.
Anonymous No.98208
15747800231260.png (863 KB, 1031x815)
15747800232041.png (449 KB, 789x616)
Смотрел свою игру (это хоррор), а там первая локация сделана отвратительным кустарным и ламерским способом. Брал и добавлял одним инструментом новые грани, экструдил из них стены, особым кубиком вырезал дверные проёмы и всё перетаскиванием курсора, потом ещё и в колладу проэкспортировал. Попробовал текстурку наложить и решил, что будет легче сделать заново. джва часа искал как вертексу присвоить глобальное положение.
Anonymous No.98218
>>98208
Забавно, но если бы я делал игру, то в первую очередь вдохновлялся Stanley Parable или The Witness.
Anonymous No.98246
Выпустил обнову v0.2.1.
Тут новости: https://steamcommunity.com/app/1143340/allnews/
А тут видео с океаном: https://www.youtube.com/watch?v=-FjyqxtJX6Q

В следующей версии собираюсь улучшить ачивки.

А вы знаете как пользоваться реддитом? Я слышал, что там можно популяризовать мнение, в т. ч. и Индустриворкс, но я немного не понимаю, что это такое. Похоже одновременно на "сайт со смешными картинками", имиджборду и просто форум.
Anonymous No.98249
15748535365350.png (642 KB, 1104x728)
Мой вердикт: Блендер не предназначен для создания реальных 3D-моделей.
Такое ощущение, что люди модельки делают из полигонов, а не из условной глины. Почти все моделеры в реальном мире использовали камень, глину, металл. Помните как Микеланджело (или не он или не это) говорил? "Я беру глыбу и отсекаю всё лишнее". В блендере же нельзя просто взять и отсечь, тут ад с полигонами.
Хотя, может, блендер полезен только для моделирования персонажей/животных, деревьев и камней, но никак не зданий
В общем, придётся писать очередной велосипед, теперь уже для создания 3D-моделей, из-за чего ещё меньше времени останется на игры. А нынешние игры придётся делать из тех же кубиков и спрайтов с велосипедными скелетами, мож ещё воксельные модели получатся. Велосипеды везде. Даже всем программистам на C предлагают писать велосипеды, но это всё ещё лучше чем угадывать документацию (для большинства библиотек) в случае C++.
Свой 3D-редактор можно даже на Си писать, необязательно ждать выхода Лайси. Но это не решает проблему, что я очень плохо знаю математику, придётся попотеть, что вертексы пересекались и сходились как надо. Жаль, что единственную ГУИ-библиотеку, которую я знаю это Qt, и только на питоне, так как под си не завезли биндингом. Ну ничего, можно фронтенд на питоне, а бекенд на Си, свой ГУИ я писать не хочу.
Надеюсь, хоть годот оправдает своё предназначение как конструктор простеньких игр.
Anonymous No.98253
15748572090650.webm (8101 KB, 1146x652, 00:00:40)
15748572095311.webm (3155 KB, 1208x700, 00:00:15)
15748572095712.webm (6877 KB, 1208x700, 00:00:39)
>>97649
>Теперь же я храню их в ассоциативном массиве, у которого в индексах координаты.
У тебя заранее массив размером в 64х64х64, где нулевые или ненулевые указатели, или у тебя считается своего рода хеш от координат?

>13/08/19
>Зачем ты в несколько потоков это делаешь в первой же версии?
>Удобно и не сложно.
>17/11/19
>Я понял, почему у меня в Industriworks FPS проседал
>лочился мьютекс
Совсем не сложно, лол. Прости, не удержался.

Заголовок спойлера
Продумал в голове и зарисовал на бумагу несколько игровых концепций. Про стилистику мира, про мобов, про снаряжение. Потестила всякое, чтобы понять насколько какие штуки тормозные и на что можно рассчитывать в плане возможностей компьютера.

Ещё есть вот такое (первая вебм - внимательно считайте повороты в туннелях, специально раскрасил; жёлтый сегмент на 20-ой секунде - это один и тот же сегмент). Нужно написать кучу функций: для определения видимости объектов в таком пространстве, для рассчёта расстояния между многоугольником и линией и всё в таком роде. Не слишком понятно какой должен быть интерфейс для редактора уровней с такой организацией пространства. И ещё как рендерить звук. Но если делать такое - то строго до написания какой-либо игровой логики, потому что слишком многое завязано на обычном трёхмерном пространстве. Сначала хотел как костыль сделать, просто чтобы в некоторых точках мира игрока телепортировало создавая иллюзию "короткого хода". Но рука не поднялась и теперь я могу делать подобные туннели (и открытые пространства) какой угодно по сложности формы и всё это будет работать с нормальной скоростью и без артефактов. Можно сделать небольшой с виду дом, внутри которого пространства будет в десятки раз больше, чем должно было быть. В общем - я совсем точно хочу такую механику к себе под бок.

Вторая/третья вебм: коррекция искажений "прямоугольной перспективной проекции" (не знаю как её здоровые люди называют, какая-нибудь центральная проекция на прямоугольник), но там всё просто и её можно будет в любой момент включить с нужным углом обзора и коррекцией. Идея в том, что в игре угол обзора порядка 90 градусов, а экран ирл занимает 20-30 градусов обзора, из-за чего равные по размеру объекты (находящиеся на одинаковом расстоянии от камеры) имеют разные угловые (видимые) размеры и форму.
На второй вебм показана ванильная проекция при 150 градусах (горизонтальных) обзора. Как можно заметить - прямоугольники по углам вытягиваются в невообразимо острые ромбы, прямо как плакаты в Apex Legends (в нём стоит около 120-130 градусов >>96682).
На третьей вебм некоторая более-менее универсальная коррекция. В идеале нужно указать точку экрана наиболее близкую к глазу, расстояние до этой точки и размеры (реальные) экрана, что позволит искажениям стать ещё менее заметными.
Мне мой вариант намного больше нравится. Во-первых квадрат остаётся квадратом (я специально водил камерой по бежевому квадрату). А во-вторых объекты в центре экрана имеют такой же размер, как и по краям. В случае ванильные проекции объекты по углам намного крупнее, чем в центре. Это странно - по идее наоборот центр наиболее важен.
=

Простите, что не оправдываю своих ожиданий. Очень сложно сконцентрироваться на поставленных задачах и доделывать что-то до конца или хотя бы до середины - ведь мне нравится кодить само по себе, а конечный результат почти не интересует.

Вот нужно было считать обратные матрицы - у меня был код для обратных матриц само-собой, но вряд ли он был оптимальным или шибко устойчивым при определённых значениях в матрице. Мне подсказали либу для линейной алгебры - она мне понравилась, я открыл старую программу вообще ни с чем нынешним не связанную и внедрял в некоторых местах эту либу, просто чтобы быстродействие сравнить. Ну и зачем вовсе велосипедировать линейную алгебру и тратить на это время, если много других людей уже давно нашли наиболее вычислительно-устойчивые методы.
Тестирую возможности ssbo - снова залез в старую программу где использовался фреймбуфер и менял его но ssbo.
А сколько вещей потребовалось проверить когда я потрогал буфер трафарета - ведь я им никогда не пользовался.

Каждый маленький кусочек любого действия распространяется как лавина, порождая кучу ненужных действий в других местах, что никак не получается контролировать.
Пост отредактировал Anonymous
Anonymous No.98254
15748574654260.webp (57 KB, 1208x700)
15748574656571.webp (54 KB, 1208x700)
>>98253
Вот отдельно скриншот одного и того же угла для сравнения. Центральная область раза в два больше.
С другой стороны от такой коррекции меня сильно укачивает. В общем, эта штука должна быть настраиваемая и отключаемая. Коррекцию вполне можно включить в половину силы. Или в треть.
Впрочем, при угле обзора в неадекватные 150 градусов в любом случае будет укачивать, наверное.
Anonymous No.98257
>>98249
>В блендере же нельзя просто взять и отсечь, тут ад с полигонами.
Да не поверю, это чуть ли не базовый инструмент же. В 3dsmax-е, по крайне мере.


Тебе кстати нужен zbrush, если ты хочешь глину.
>для моделирования персонажей/животных, деревьев и камней, но никак не зданий
Вот он об этом, правда. В нём очень круто делать животных, головы и лица и другие мягкие формы. Но для роботов и зданий zbrush не подходит.

Вот первый попавшийся видос: https://www.youtube.com/watch?v=_8lY9HaflVQ
Не обещаю что он хороший - я лишь отдельные кадры посмотрел.

Хотя вот соврал, роботов тоже делают: https://www.youtube.com/watch?v=HVZMpVCIb04
Пост отредактировал Anonymous
Anonymous No.98279
15748715903850.png (410 KB, 892x526)
И правда, зачем делать свой велосипед, когда надо вознести в привычку форкать чужие проекты или писать под них плагины, особенно, когда есть хорошая поддержка. Единственная проблема при форке — лицензия, но она не очень страшная.
Я джвадцать минут делал лесенку, сджоинил её со зданием, а оказалось, что не туда. Попробвал вернуть, а истории не хватило. Поставил в 300 шагов буфер, а максимум 256. И почему?
В общем, делаю лесенку заново. Тут можно было бы изучить скрипты и скриптом её построить (хорошо, что у них питон, а не луа), но это, может быть, потом.
Что насчёт глины/металла, то я видел, как люди в кадах делают интересные штучки. Резьбы, шестерёнки за пару кликов, икосаэдр из треугольничков собирают, интрузят отверстия в виде текста и всё это с точности до у.е., мм., например. Вот такое мне нравится. Можно найти написать плагин, который упростит моделинг в этом плане.
Кстати, а могут ли поддерживаться в блендере кривые без форкинга? Ненавижу, когда в вектороной 3D-графике не поддерижваются кривые. Кривые безье, плоскости Безье, шарики всякие там. Это касается и опенгла, из-за этого он мне не нравится хотя, его достаточно выбросить на помойку уже потому что он интерфейс для рудиментарных аппаратных алгоритмов консоли, видеокарты, а не сам алгоритм. Незнаю, может с кривыми есть большие проблемы, я в этом не разбираюсь. Как можно жить без кривых? Я писал простенький рейтрейсер для сфер, на хабре есть алгоритмы, неужели будут сложности с кривыми плоскостями безье?

>>98253
>У тебя заранее массив размером в 64х64х64, где нулевые или ненулевые указатели, или у тебя считается своего рода хеш от координат?
Нет, я храню в одной структуре игреки и указатели на указатели с зетами, а там указатели с иксами. Не помню, почему не додумался до хеш-таблицы, вроде бы неплохая идея и памяти много не займёт.
Anonymous No.98320
>>98279
> в одной структуре игреки и указатели на указатели с зетами, а там указатели с иксами.
Поставь зеты с краю (в начало, скорее всего). Человек плоский, смотрит вбок и двигается в бок в большинстве случаев - z между x и y кощунственна.

>почему не додумался до хеш-таблицы
Может быть потому что в хеш-таблице нельзя найти соседние клетки. А в том же дереве можно довольно неочевидным образом получить все элементы в диапазоне x от 11 до 37, грубо говоря. Оно ещё и балансироваться может, так чтобы в каждой ячейке было не больше 20 элементов - если плотность элементов сильно неоднородна.
Пост отредактировал Anonymous
Anonymous No.98332
>>98320
У меня y это низ-верх, так что сначала происходит поиск по меньшему кол-ву значений.
Никогда не понимал тех, кто координатой Z определяет высоту. Ведь когда мы смотрим на график XOY, мы думаем "ого, как высоко тут функция поднялась", а потом они добавляют координату Z и говорят мол это высота, и мы что, всё это время в пол смотрели?
Anonymous No.98333
>>98332
>всё это время в пол смотрели?
Да. Перед тобой на столе лежит листок бумаги и на нём обозначены оси xy; z получается максимально интуитивным образом, как векторное произведения xy.
Anonymous No.98352
>>98333
А разве не на доску мы смотрим, когда на график? А листок это просто минидоска, которая лежит на столе.
Кроме того, на y часто обозначают высоты. Например, высота траектории летящего мячика. Да и разве обычно не ассоциируется именно z с глубиной, когда y с высотой?
Anonymous No.98361
Интересно, а пропустят ли встиме очень жестокую игру, где присутствует изнасилование, инвалидизм, жесть и всё такое, при условии что от игрока требуется сопротивляться этому? В стиме есть много всяких жесть-игр, где наоборот и их пропустили.
У меня прост появилась идейка для сюжета эдвечур-игры. В 2025-м году какой-нибудь новоБерия или кто там был самым главным насильником в СССР? смотрит на экран с ассистентом, там высвечиваются фотки потенциальных жертв (женщины, девушки и девочки), они выбирают их и в соседнем окошке высвечивается 3D-модель, нынешнее местоположение в городе, другие данные досье и главгад останавливается на понравившейся персоне. Далее идёт сценка, где она идёт на работу/со школы/в магаз, приезжает джип и её увозят. На базе ей отрезают руки и ноги, бинтуют культи, а главгад не дожидаясь заживания насилует её (предварительно подготовленную, помытую, украшенную). Она ему не очень понравилась и её отвозят в склад, где где-то 10 таких же девушек лежат в кластере из коек в стене.
Те уже свыклись и некоторые разговаривают друг с другом о том, о сём, замечают факт, что новенькую подвезли, наша ГГ ревущая в сумасшедствии и агонии после изнасилования, её положили в её новый дом. Но она необычная иначе бы игра была скучная и геймплея не было бы, она выиграла в генетическую лотерею, так что стресс дал ей силы, чтобы сбежать.
Управлять придётся забинтованными культями голой девкой, первый квест — как-нибудь отрезать себе волосы (она длинноволосая) о подкультьные средства, чтобы не мешались. Тем временем старые жертвы отговаривают её, говорят, чтобы вернулась (лол, как она залезет обратно?), ей только хуже будет и она привыкнет. Обычное рабское быдло, которое легко теряет волю. Далее ей надо будет выбраться из базы главгада, попутно убивая или убегая от охранников и кумов, решать логические загадки и не попасться на камеры и роботов с ИИ. Так как её положили голой, она будет ползать голой, причём по мере прохождения, от царапин и ссадин её кожа будет становиться всё хуже и хуже, будет больше и больше ран и грязи. Но пока она не найдёт чей-то бионический протез и не подсоеденит к себе, тогда у неё и ноги, и руки появятся и она даже одеться сможет, но контакт всё-равно небольшой.
В конце будет самое сложное задание — угнать чей-нибудь автомобиль и уехать в лес. После всего этого показывается катсцена, где её семья — старик, родители и маленький брат сидят в однушке, волнуются, а к ним приходит полиция:
— Открывайте, у нас ордер на обыск
открыли
— Мы имеем подозрения, что вы производите или храните наркотики.
— Что? Мы ничего такого не делаем.
— Ага, а это что? полицейский достаёт из кармана зип-пакетик с белым порошком и показывает перед лицом отца семейства Пакуйте всю семью
Родители хватают своего маленького сыночка и перебрасывают через полицейских на нижний полуэтаж и кричат "Беги! Беги!", что он и выполняет (неглупый мальчик), но за ним побежали 2 полицейских.
Следующая сцена это просто показывают город и подозрительно грязное здание немного снизу.
От действий ГГ во время прохождения игры зависит, в этой сцене будет услышано 3 выстрела или 4.
Anonymous No.98376
>>98361
Хороший сюжет.
Anonymous No.98383
15749440579910.png (88 KB, 1114x815)
15749440581821.png (611 KB, 1049x700)
В Индустриворкс делаю новую механику ачивок. Пока сделал иконки, но в некоторых случаях неудачно — ракурс не тот и предмет отображения не виден. Я собираюсь ввести виджет, отображающий рецепт в тексте. Таким образом, если буду добавлять книги, то можно будет и туда записывать рецепты или игрок находить книги с неизвестными ранее рецептами и добавлять в какую-нибудь свою книгу рецептов.
А в своей другой игре мучаюсь. В прошлый раз я неправильно выразился насчёт блендера. Он оперирует вертексами, еджами и полигонами, но почему не телесными телами? Ведь в большинстве случаев модельки объёмны и телесны. Мне кажется, что гораздо легче было бы именно такими мешами оперировать, а не пересекать полигоны вертексами и удалять перекосившиеся эджи. Я просто ножичком вырезал проём для двери и теперь стена имеет кучу ненужных полигонов. Я пытался сделать dissolve над вложенными полигонами в стене, но почему-то не получается. В любом случае, лестницы тоже имеют боковые полигоны и в интерактивном режиме я не могу к ним подлезть. Может есть какой-то инструмент, который сделает всё хорошо с полигонами, но я незнаю его названия. Нашёл limited dissolve, но он не решил проблему. Неужели мне снова придётся делать новую модель?
Некоторые ещё называют других дураками, за то что они не на движке делают игры, а кодя. Парадоксально, конечно, что сложные игры на си с опенглом делать легче, чем простые на годоте/юнити. По крайней мере мне так. Сложно соединяться с разумами иных людей.
Anonymous No.98412
15749972523070.png (6 KB, 243x196)
Компилируется по 60 секунд после изменения любой строчки. Отвратительно.
Это поправимо, но мне очень не нравится идея того, что мне нужно разбивать файлы на более мелкие потому что компилятор сам этого сделать не может по каким-то причинам. Там условных 40 методов в файле, которые никак друг с другом не связанных и это собирается очень долго. Я делаю два файла в каждом из которых по 20 методов и это начинает компилироваться быстрее. Оно не может само понять, что код других методов не изменился и их не нужно заново собирать? Брр. Прикручивать постобработку что ли, которая каждый метод вынесет в отдельный файл.

>>98383
>Сложно соединяться с разумами иных людей.
Да, да и ещё раз да, аноньчик. Как я это понимаю.
С другой стороны если хочешь работать с командой, то есть смысл один раз "соединиться" и потом вы можете вместе работать в одном и том же пространстве какого-то определённого движка или идеи.

Не понял про юнити/си и простые/сложные игры, правда. Там вроде бы наоборот, в случае простой игры сделать на юнити проще, чем на си (потому что все трудности в такой игре заключаются в загрузке моделей, кодинге эффектов и прочего, задачу чего как раз юнити и решает) - а в случае сложной игры сделать на юнити сложнее, чем на си, потому что трудности вызванные ограничениями юнити становятся тяжелее, чем те трудности которые связаны с использованием си, про загрузку моделек и прочее.
Anonymous No.98418
>>98412
>последний абзац
Да, я так и написал

>компиляция
Что у тебя там так долго компилируется и на какой машине?
У меня сборка Индустриворкс занимает 21 секунду с полной перекомпиляцией.
Anonymous No.98431
15750230096370.png (11 KB, 694x300)
>>98418
>Что у тебя там так долго компилируется
Подозреваю, что лямбда-функции. Время компиляции резко увеличилось, когда я добавил их кое-где вместо затычки.
Я использую их не по назначению.
Например, у меня внутри одной функции много разных действий с локальными переменными. Некоторые действия однообразные - я не хочу дублировать код, но и локальные переменные за пределами функции не имеют никакого смысла.
То есть есть четыре очевидных мне варианта:
1 - Сделать локальную лямбда-функцию с захватом по ссылке. Очень хреновый смысл кода, но максимальная выразительность и ёмкость по соотношению количества действий (кода) и строчек кода.
2 - Перенести локальные переменные "наружу" функции, и сделать несколько функций. Минус в том, что все объявления будут очень далеко от того места, где они используются. Ну и то что эта память висит, когда переменные не используются.
3 - Сделать функцию снаружи и передавать ей громадный список аргументов. Это было бы нормально, если функцию заинлайнить - но выразительность посредственная, когда там помимо двух координат будет ещё 5 переменных, которые неявно присутствуют в списке захвата лямбды.
4 - Сделать локальную структуру с методами внутри себя и все локальные переменные перенести в эту структуру, вызывать методы.

Я не представляю по каким причинам нет синтаксиса локальный функций (как закомментированно на скриншоте, например), которые эквивалентны лямбда-функции с захватом по ссылке, но при этом внутри это не лямбда функция - а простой синтаксический сахар, который лишь вместо меня делает ctrl+c/ctrl+v.
А define не во всех случаях справляется - и в нём код не подсвечивает. Вот в примере с картинке я бы в самом деле поставил define, но только потому что там одна строчка.
Anonymous No.98435
15750239255510.png (67 KB, 1037x516)
>>98431
Да, мне тоже не нравится, что в дефайне не подсвечивается синтаксис. Вот если будет готов Лайси, то там дефайнами определяется почти всё и отсутствие подсветки синтаксиса в дефайне было бы кощунством.

Но в своём коде я использую дефайны, хотя там можно было и функции написать, но код старый, а главное — работающий. У меня из-за дефайнов так однажды кланг взбесился и компилировал отлично от gcc. Тот баг я ещё не зарепортил в кланг.
Anonymous No.98546
Кажется я придумал как сделать порталы так, чтобы игроки не мучались и генерация мира не была слишком богатой по ресурсам.
Для начала, скажу, что для создания портала придётся открыть одно из высших заклинаний, заклинание Portal, которое стоит 5000 ML и для открытия возможности открытия придётся поглотить очень много ресурсов, но, может быть, не живых.
Игрок берёт заклинание и пропитывает им некоторую полость, где и будет создан портал. Из полости постепенно улетучивается Портал и игроку надо спешить к следующей полости (таким образом, чем дальше — тем дороже). Для экономии MP придётся построить железную дорогу и на ней гнать, а для экономии ресурсов придётся не строить железную дорогу, а наторговать побольше MP на самом деле экономить что-то не придётся, так как 5000 ML дофига развития, так что, может быть, это будет низкоуровнеове заклинания. Но что же тогда высокоуровневое?. И нельзя, чтобы 2 игрока с двух сторон это делали это тупость, ведь можно же с помощью механизма. Короче. это не подходил в качестве высокоуровневого заклинания. Тем временем, посерединке должен находиться Обратный Выгибатель, потребляющий электричество. После создания, порталы стабильные и даже электричества не требуют. Таким образом, порталы лекго могут быть сгенерированы и существовать при генерации мира. Но это только один тип портала.
Второй тип портала уже не требует Обратного Выгибателя, но и переносить он способен только флюиды, лучи (энергию), и взрывную волну. На этом эффекте может быть основоно величайшее оружие, которое может быть использовано против последних боссов.
Есть ещё вариант телепортера, но я не уверен, а нужен ли он. Можно сделать так, чтобы он тратил электричество, но открытия заклинания Portal не требовал. Таким образом можно сэкономить на ЖД, потратившись на электричество.

Тем временем я делаю лого для индустриворкса, чтобы популяризовать его эффективнее. Надеюсь, меня не забанят, если буква t будет похожа на католический крест?
Anonymous No.98637
15752135557310.png (21 KB, 889x749)
Мда, опенгл это действительно фу.
Мне нужно сделать виджет-бокс, ограниченный в рамку, чтобы его элементы не вылазили за пределы. И через слайдеры будет проходить смещение.
Попробовал через glViewport, но максимум, что у меня получается это пикрилейтед.
Я смотрел туториалы по рендерингу в текстуру, но там тоже всё не понятно, какие-то шейдеры создавать предлагают, в итоге у меня на одной функции просто сегфолт произошёл.
Возвращаюсь обратно к glViewport, ща буду с glOrtho шаманить.
Anonymous No.98638
>>98637
По идее ты просто делаешь "виджет" с размерами от 0 до 1 (всё содержимое должно вручную предварительно масштабироваться и сдвигаться, чтобы влезать в 0..1 - opengl никаким очевидным образом это делать не умеет (только что glClipPlane есть для плоскостей отсечения, который тут не нужен)) и хоть через glScalef+glTranslatef размещаешь его в нужном месте с нужным размером. Никаких подводных камней.

Чем текст выводишь? Неужто glRasterPos? Вот тогда подводный камень появляется.
Anonymous No.98648
15752195508880.png (43 KB, 931x722)
>>98638
Сделал костыль с помощью glScalef (хотя я успел сам додуматься).

>glRasterPos
Я таких функций и незнаю, не учил опенгл. Для вывода текста я просто имею массив с сырыми данными каждого символа и вручную составляю из них данные для строки, которые уже загружаю в OpenGL-текстуру.



ОпенГЛ пора выбрасывать на помойку. Уже давно первенство именно алгоритма над машиной. SDK программное, а не аппаратное, а LLVM компилирует во всё (ещё и SPIR есть в вулкане, о котором ты, вроде бы, говорило)
Надо будет посмотреть vulkan, когда читал туториал по выводу треугольника, сложилось впечатление, что отрисовка выполняется исключительно шейдерами, что меня радует, хоть я в этом ничего и не понимаю.
Что там так себе, так это долгая настройка хардвара. Если есть какой-нибудь utility toolkit для вулкана, то было бы хорошо, если там есть что-то типа функций-конфигураторов, которые сами всё сделает под определённый нужды.
Но потенциальный рейтрейсер/растеризатор на Лайси с нативным алгоритмическим параллелизмом вуглядит лучше
Anonymous No.98649
>>98648
>которые уже загружаю в OpenGL-текстуру.
Всё верно, тогда всё у тебя в руках и никаких подводных с виджетом. Про glRasterPos забудь как страшный сон - у тебя просто текст выглядел напоминающий текст выводимый через растры.

>ОпенГЛ пора выбрасывать на помойку.
В вулкане же всё то же самое вроде бы, только мелочей которые нужно сделать и указать вручную ещё больше.
Не знаю что ты имеешь ввиду под "отрисовка выполняется исключительно шейдерами", но в opengl начиная с честной (без режима совместимости) третьей версии без шейдера нельзя ничего нарисовать.
Anonymous No.98666
>>96153 (OP)
>C или C++

На голом Си можно полноценно писать игры? Знаю базовый си и питон(неплохо знаю старндартные батарейки) - этого может хватить на мморпг песочницу-рогалик 2D? И посоветуйте инструменты, в какую сторону копать для реализации такой задачи.

Нет особого желания копаться в 1.500 листной спецификации плюсов
Anonymous No.98669
Начинаю прогрызаться в шейдеры и уже понимаю, какое же говно (извините) они в имплементации опенгла. Какие-то рудименты на рудиментах, версии, андефайнед бехавиор в зависимости от вендора, я еле скомпилировал GLSL, хотел попробовать уж сразу SPIR-V, чтобы не мучаться с сорсами, а они аж с четвёртой версии поддерживаются, а у меня на компе максимум третья. И получаю знания о шейдерах из кусков статей по интернету, ничего не понятно. Фрагментный шейдер хоть работает без вершинного?
Вот мой шейдер:
#version 130

precision mediump float;

out vec4 color;
void main() {
color = vec4(1.0,0.0,0.0,1.0);
}

Он компилируется и запускается, но не работает. Я бы тоже не работал, если бы увидел этот код. Куда мне color пихать, лол? Что color вообще такое?
Но мне всё-равно придётся изучить шейдеры, не только для Индустриворкс, но и для собственного развития. А для индустриворкс я уже подметил, что шейдеры должны быть уметь в файле ресурсов загружаться и исполняться опционально. Не работает шейдер — ок, будешь сырые вертексы потреблять, работает и компилируется GLSL или SPIR-V, в зависимости от этого будет разный функционал. Я собираюсь использовать GLSL для поддержки OpenGL 3.0 или чего-то подобного, но моды могут использовать и скомпилированные.
Бесплатный сыр в мышеловке, а бесплатное говно везде. Это относится к большинству СПО про проприетарное и заикаться не буду, это уже не совсем софт. В том числе и линукс с его POSIX и сложностью в разграничении прав процессам. Или многочисленные графические программы, которые косят под винду. ГУИ, запускающийся по таймингу. Я по вашему в игру играю, что собираюсь в определённый пиксель в определённый момент времени попасть? Неконфигурируемые конфиги, куча всего. Приходится всё самому создавать. Немногочисленные программы хороши, и большинство из них — cli или библиотеки. 2 графические хорошие программы, которые мне вспоминаются это mpv и Blender (несмотря на большой порог вхождения в него).
Но я не виню разработчиков, наверное, сложно смотреть в будущее и, при этом, делать на будущее.
Ну ладно. Что я хочу попробовать сделать с помощью шейдеров, так это:
0. Туман вдалеке.
1. Желейные анимации кубиков для некоторых мобов.
2. Покачивание травы.
3. Что-нибудь с солнечным светом.
4. Можно попробовать отражение воды.
Щас окажется, что всё это время я зря тратил его же пересылая вертексы через glvertexpointer и vbo и надо было изначально шейдеры учить.
Anonymous No.98676
>>98666
>На голом Си можно полноценно писать игры?
Ты не поверишь. Яркий и известный пример - Doom, который самый первый. Си + asm.

В одиночку не осилишь.
Anonymous No.98677
>>98669
>out vec4 color;
Вот эта фигня из glsl поздних версий вроде бы.
>#version 130
А вот эта фигня указывает на очень раннюю версию. По идее он ошибку должен выдать при создании.
Тут нужно было написать [gl_FragColor = vec4(1.0,0.0,0.0,1.0)], если у тебя 130. И стереть строчку с объявлением color. И вторую строчку я бы тоже удалил - зачем она? Это же цвет, плевать на точность. И не уверен, что она поддерживается в 130.
Или поставь [#version 330 compatibility] - будет работать как и старые встроенные юниформы по типу gl_ProjectionMatrix/gl_FragColor, так и новые фичи по типу [layout(location = 0) in ...]
>Фрагментный шейдер хоть работает без вершинного?
Работает до третьих версий или в режиме совместимости.
>зря тратил его же пересылая вертексы через glvertexpointer и vbo
Это разные области же и обе нужны - vbo голый инструмент, а шейдеры уже содержат элемент творчества, если хочется облака рисовать, например.

>>98666
>На голом Си можно полноценно писать игры?
Да. Но будет сложно найти либы и может быть не очень с поддержкой новых апи. Не уверен что у новых версий directx есть нормальный апи для чистого си, например.
Пост отредактировал Anonymous
Anonymous No.98694
>>98666
Ты не поверишь. Яркий, но неизвестный пирмер — Industriworks, который один из последних клонов Майнкрафта. Си + Python для генерации ресурсов + один небольшой файл C++ в качестве обёртки для стим-библиотеки.

В одиночку осилишь. Но, думаю, не стоит идти учить опенгл, лучше найди какой-нибудь графический движок типа Ogre3D (Ogre2D), irrlicht или ещё какой. Хотя, если у тебя будет
>рогалик 2D
То можешь и опенглом попробовать.
Что насчёт сетевой состоавляющей, то я ничего не знаю. Для индустриворкс я планирую использовать просто сокеты, только надо разные обрётки под Линукс и Виндовс сделать, ты тоже можешь так сделать. На питоновском модуле socks можешь потренироваться.
А если хочешь упростить себе программирование, то пиши питоне, только он более жрущ, так что можешь попробовать cython (python с си-фичами), хотя про него я не могу быть уверен. Ещё в numpy можешь покопаться, как быстро вычислять. Или даже самый бекенд сервера писать на си, а остальное на питоне. Си-библиотеки очень легко запускаются с питона.
Anonymous No.98696
15752864590560.jpg (237 KB, 768x512)
Нравятся такие фотографии, потому что они очень вдохновляющие.

>>98694
>В одиночку осилишь.
Опрометчивое заявление.
Он спросил про "мморпг песочницу-рогалик 2D", прошу заметить. Ни один язык или движок не позволят ему сделать что-то внятное за внятное время в таком жанре. Ну, то есть это возможно и никакого явного запрета нет, но я не верю в такие незначительные вероятности.

>>98666
>Нет особого желания копаться в 1500 листной спецификации плюсов
В них кстати не обязательно копаться, просто пролистай и возьми что понравится. И содержание стандартной библиотеки пролистай. Что-то точно понравится. А в остальном просто пиши си-код в с++ компиляторе - кучу нервов и времени себе сохранишь, чем если будешь пытаться использовать неприкрытый си и писать врапперы для крестовых библиотек.
Anonymous No.98741
Выпустил v0.2.2 Индустриворкс.
https://steamcommunity.com/games/1143340/announcements/detail/1717490355306147969

Теперь буду делать v0.2.3. В ней ожидаются:
0. Деревья на мапе.
1. Сеттлменты гоблинов.
2. Мобский ИИ.
3. Атака мобов.
Anonymous No.98744
15753888736080.png (17 KB, 630x181)
Ещё заказал у себя новый логотип. Хотел в картинку, которую в стиме в магазине в списке игр показывают, вставить название и справа гоблина, а оказалось, что название моей игры слишком длинное! Просто не влезало так, чтобы оставалось читаемым. И в 2 строки не разделить, потому что будет не красиво. Пришлось в менее видимую картинку гоблина вставлять.
Anonymous No.98759
15754016192500.png (303 KB, 722x508)
15754016192991.png (343 KB, 761x550)
15754016193372.png (294 KB, 698x502)
15754016193693.png (276 KB, 653x496)
сукп)))0))((((( Какая же блендер бешеная тварь! Его надо годами руками ковырять, чтобы он научился отличать ТЕЛО от ПУСТОТЫ. И ведь в его терминах есть что-то типа manifold, то есть замкнутое тело, которыми и являются реальные, настоящие с объёмом.
Знаете, почему детям нравятся растры, воксели и майнкрафт? Потому что они, сука, простые! У них дискретные координаты и ясные уму характеристики. Посадите ребёнка за inkscape или blender вычислять коллизии, что он вам скажет? Если бы они увидели рогалик с дискретными коордами (как DF), но в 3D, то обписялись бы от радости.
Почему я вообще начал делать minecraft-like игру с флоатскими передвижениями? Надо было с дискретными блочными значениями, был бы рогалик, но уже позно, концепт игры подготовлен, а бойны динамичны.
Я недавно понял, что фигню делал, джоиня меши, надо же было интерсектить))))0) А оно вон как T_T
Это надо кардинально менять, никакие аддоны не помогут. Надо брать сорсы блендера и превращать его в нормальный 3D-редактор, но для этого придётся и сами сорсы изучать. У него ещё координаты постоянно съезжают, небось floatы использует.
Не, ну они серьёзно? Они мне предлагают дома для новой игры моделировать в гокселе?
Anonymous No.98806
15754739690850.png (376 KB, 1194x605)
Ахаха, ладно, беру свои слова назад. Блендер соврешенно не подходит для создания 3D-моделей, если это не какие-нибудь животные/гуманоиды с цветными (не тестурированными) полигонами.
Однажды я посмотрел видеоурок по блендеру создание персонажа, попробовал и подумал, что блендер действительно достоин, у меня всё получалось и это было легко и доступно. Как же я ошибался.
Придётся велосипеды писать. В таком случае, можно сразу и от попыток на годоте что-либо делать. Не буду же разбираться, как там вертексы генерить.
Anonymous No.98817
Я придумал сюжет для ещё одной своей возможно будущей игры.
Взять форкнуть индустриворкс и сделать из него слешер с сюжетом и катсценами, без строительства и разрушения нет это не клон minecraft dungeons. Поселение ненормальных гоблинов, которые живут под землёй, а их соседи дварфы или гномы или кобольды (не определился пока с сеттингом в Индустриворкс) удивляются гоблинам в пещерах. Сюжет заключается в том, что какие-то стычки с игроком, а наш ГГ-гоблин обладает удивительной способностью к быстрой регенерации и сильному интеллекту и он отправляется побеждать игрока, но, как оказалось, игрок, внезапно, возрождается и возвращается на новое место, где устраивает мстительный геноцид. И тут подключаются соседние поселения "Тупой гоблин нажил нам общего врага, помогай расхлёбывать теперь", чтобы схватить игрока и построить для него тюрму, где его будет всё время хилять, чтобы он не возродился. В конце игрок просто станет обездвижен (вышел из игры). Можно ещё в сюжетце (может DLC) сделать типа охранники видели как игрок двигался и он поменял дислокацию, но снова перестал двигаться (по ту сторону монитора смотрел на свои миры, зашёл — вспомнил — удалил), но от этого создаётся новый сюжет.
Должны быть динамические сцены, например, на игроковых железных дорогах по вагонам-вагонеткам. Или лавопад по пластинам бегает-прыгает по таймингу. ещё неплохо бы добавить разветвления, которые позволят избежать скриптовой смерти, например.
Боёвка — ближний бой, но иногда дальний. Ограничение на кол-во боезапасов, либо стрельба тратит MP (деньги). Вид от третьего лица, с комбо, навыками, а стрельба показывает траекторию полёта снаряда.

Сегодня игр я почти не делал и чувствую себя плохо, кажется, у меня развивается игрозависимость.
Вообще, в планах сейчас у меня 6-8 игр и четыре из них немного разработаны (про сферу-захватчика, хоррор-комедию и платформер про паучка), наибольшего развития Индустриворкс достиг, он, хотя бы, выпущен.
Anonymous No.98888
15755757444780.png (658 KB, 1491x842)
Чужие среди своих.
Anonymous No.98906
15756254003380.png (50 KB, 603x804)
>>98888
>фон
Рендерить каждый чанк в небольшую текстуру и выводить лишь текстуру. Перерисовывать не каждый кадр, а только когда игрок выходит из некоторого эллипсоида, за пределами которого угол зрения изменяется достаточно, чтобы перерисовывать с нового ракурса. Угол можно регулировать, выбирая разумное качество дальнего фона.
Чем дальше чанк - тем реже его нужно перерисовывать и тем меньше размер текстуры что позволит поднять дальность прорисовки до громадных значений. При этом можно рисовать что угодно обычном способом и не придумывать непонятные спрайты для деревьев (как будет выглядеть спрайт дерева, если из дерева выкопать 1 блок? А если обрезать половину листвы? А если собрать непонятную фигуру из разноцветных блоков?).
Anonymous No.98922
>>98906
Да, я тоже думал о таком варианте для сверхдальней прорисовки. А для просто дальней я собираюсь семплировать прямоугольники блоков до одноцветных, чтобы каждый раз не выбирать текстуру или чанк, а сразу вертексы+колор зарисовать.
А что до этих деревьев, так они показываются там, где чанки ещё не сгенерированы, как и та зелёная карта высот.
Anonymous No.98923
>>98922
>А для просто дальней я собираюсь семплировать прямоугольники блоков до одноцветных
Нет смысла. Номер текстуры и текстурные координаты занимают столько же места, сколько и цвет. Выборки из текстуры почти не займут времени по сравнению с преобразованием вершин, а запихнуть текстуры в один текстурный атлас тебе в любом случае придётся, если ты хочешь хоть чуть-чуть позаботиться о быстродействии рендера. У тебя твоя штука будет тормозить из-за громадного количества вершин, а не из-за текстур вместо цветов.
Anonymous No.98932
15756540074340.jpg (77 KB, 764x1080)
Блядь.
Сегодня решил поделать хоть что-нибудь. Решил взяться делать игру в tic80. Погромирование не проблема, а вот с рисованием и музыкой совсем беда. Вот бы была программка, которая генерировала бы спайты и музыку.
Anonymous No.98933
>>98923
У меня уменьшиться кол-во вершин, так как те же 4 рядом идущих квадрата станут одним, а в случае текстурированных блоков я так не смогу сделать, ведь у меня текстуры могут быть рандомизированы или перевёрнуты на соседних блоках.
Ещё можно некоторые участки ссемплировать больше чем на один блок, то есть изменение высоты на 2 блока вместо одного не будет выглядеть так, будет просто один полигон.
Anonymous No.98950
15757346562020.webm (16421 KB, 1280x720, 00:00:37)
Сел за Идустриворкс гоблинские поселения делать, а там генерация замакаронена.
Ну и пошёл я игру про сферку делать. Добавил некоторый функционал.
Anonymous No.98960
>>98932
Раз погромирование не проблема, то запили.
Anonymous No.98996
15758074423750.png (8 KB, 800x400)
Джва часа делал я так, чтоб вепрь убегал от перса, ничего не получалось и я решил привести систему координат в нормальное состояние.
Оказалось, что по сторонам (x,y,z) у меня всё нормально. Истинная декартова система координат, правая, но где под Y подразумевается вверх. Что было с углами, так всё плохо. У меня есть угловые координаты ax и ay. ax это вокруг y, а ay это просто от плоскости вверх. Ещё недавно понадобилась az, когда делал ушки оленю, но больше случае история не упоминает. Исправил, немного подлатал функции.
Потом ещё долго мучался с передвижением персонажа, а оказалось, что я писал в рудиментарную часть кода.
Надеюсь, теперь перестану подгонять алгоритмы под результат вместо нормальной разработки.
Anonymous No.99012
15758128107290.png (7 KB, 912x587)
Так мне надо было ещё и полигоны рисовать, чтоб шейдер активировался! А я просто колор клеарил. Ещё и имя мне подсунули тогда glFragColor, а потом gl_fragColor, сейчас посмотрел в уроки NeHe и там показано gl_FragColor что и написал анон выше и синтаксисом засветился, теперь работает. Ну всё, теперь можно цветы шевелить и солнечную + лунню тень малевать. Только надо научиться читать вертексы и переписывать их и время takt передавать.
#version 120

void main() {
gl_FragColor = vec4(1.0,0.4,0.3,1.0);
}
Anonymous No.99062
И почему я раньше не учил шейдеры? Вот, множество Мандельброта вычисляется за долю секунды, когда на питоне я ждал несколько минут, пока отрендерится.
Вот картинка >>99063
Пост отредактировал Anonymous
Anonymous No.99063
15758833286230.png (35 KB, 616x567)
Anonymous No.99126
15759340590870.png (69 KB, 726x568)
15759340591191.webp (428 KB, 4320x3240)
Заголовок спойлера
Всё очень плохо. Хочется выкатить что-нибудь прикольное, чтобы скриншоты радовали глаз (не в плане красоты - красоты не будет, а в плане содержания). Но пока сплошные математические абстракции. А ещё за последние 6 дней (не считая сегодняшнего) я трогал нужный код минут 5-10, по правда говоря. Мне нужен надсмотрщик, лол, можно с кнутом. Вот если бы анон сказал - а ну-ка выкати мне технологию раскачивающийся на ветру травы - то вот тут всё понятно что делать и как делать, дело одного дня. А тут мне нужно найти матрицы для скошенной перспективной проекции (первая картинка: рыжая - нормальная пирамида видимости, сиреневая - скошенная) и внедрить все проверки пересечений сфер-пирамид для такой матрицы и потом внедрить это всё в функции отрисовки, чтобы лишние объекты за окноми не рисовались - всё по отдельности просто, да и вместе не очень сложно - но только пока таких оптимизаций меньше десяти и пока они не взаимодействуют друг с другом. Интересно зачем я этим занимаюсь, если у меня всего 2 полигона на всю сцену в виде пола. Не считая тестовых треугольников в воздухе.

Вторая картинка. Увидел фотографии в другом треде, подивился тому, как хорошо переданы яркости (обычно фотоаппараты не очень передают яркий свет и тёмные тени рядом). Нашёл этот фотоаппарат и в обзоре к нему была вот эта фотография. Внимание на строительный дом. Представляете сколько можно сделать аутизма в игре, если засунуть туда подобные по размеру строения и дать возможность прятаться условному снайперу на любом из этажей.

Ещё чуть-чуть помучаю свой код отрисовки (перфекционизм не даёт оставить как есть даже на первое время), и потом приступлю к генератору мира, по крайне мере собираюсь.
По идее город не так сложно сгенерировать, если генератор мира сделать послойным. То есть, первый слой генерирует карту дорог и местоположения строений. Второй по заданной форме строения и его назначения (с точки зрения генератора города) генерируется внутренние расположения помещений, лестницы, служебные помещения, шахты лифта, подземную стоянку или ещё что. Третий слой генерирует мебель для помещений по информации о назначении помещения от второго слоя. Четвёртый слой генерирует конкретные объекты мебели. Чашки немного разной формы и всё в таком роде.
На каждой стадии есть какие-то базовые параметры (является ли комната спальней или кухней) и затравка для псевдорандома; слой взаимодействует только с соседними слоями через параметры. По отдельности сделать простенький генератор дорог и строений для города или генератор для форм чашек/стаканов выглядит чем-то выполнимым. Достаточно потратить всего 2 часа на чёртову чашку, и по всему городу у меня будут самые разнообразные кружки и чашки. Или на ручки для дверей. Надо ещё подумать как организовать такое количество генераторов. Но в начале там конечно лишь куб с надписью "чашка" будет, тому что визуал не нужен.


>>99062
Сразу предупрежу - шейдеры плохо дружат со сложными циклами и условиями.
Если у тебя конструкция вида:
//r - принимает значения от 0 до 100000
if (r<1){
.. сложные вычисления освещения с векторными произведениями, нормалями и экпонентами
}else{
.. упрощённое освещение вида col=vec3(0.2,0.2,0.2)
}

То несмотря на то что проверка почти никогда не будет происходить, скорее всего (никто не знает как будет на самом деле) видеокарта всё-равно во всех случаях посчитает как упрощённую формулу, так и усложнённую, и потом подставит нужный вариант, что может катастрофически сказаться на производительности. Рискну предположить, что она реализует условия через функцию Хевисайда тому что ей нужно константное время выполнения каждого местного "потока". В OpenCL то же самое, кстати.
Пост отредактировал Anonymous
Anonymous No.99154
15759995730450.png (787 KB, 1587x907)
Генерация фундамента стен домиков некорректна!

>>99126
Слышал об недружбе ветвлений в шейдерах. Попробую писать их поменьше, может быть.
Вот шейдер, которым я рисовал множество Мандельброта:
#version 120

#define ITERNUM 200

#define WIDTH 1200.0
#define HEIGHT 600.0

#define STARTX -3.0
#define ENDX 1.0
#define STARTY -1.0
#define ENDY 1.0

#define RADIUS 1.0

void main() {
float c_re = gl_FragCoord.x/WIDTH*(ENDX - STARTX) + STARTX;
float c_im = gl_FragCoord.y/HEIGHT*(ENDY - STARTY) + STARTY;

float z_re = 0.0;
float z_im = 0.0;

int i = 0;
for (i = 0; i < ITERNUM; i++) {
float new_z_re = z_re*z_re + -z_im*z_im;
float new_z_im = z_re*z_im*2;
z_re = new_z_re;
z_im = new_z_im;
z_re += c_re;
z_im += c_im;

float a = sqrt(z_re*z_re + z_im*z_im);
if (a > RADIUS) {
break;
}
}

if (i == ITERNUM) {
gl_FragColor = vec4(0.0,0.0,0.0,1.0);
}
else {
if (i < 50) {
gl_FragColor = vec4(0.0,0.0,float(i)/50.0 + 0.1,1.0);
}
else if (i < 100) {
gl_FragColor = vec4(0.0,float(i)/100.0 + 0.1,0.0,1.0);
}
else {
gl_FragColor = vec4(float(i)/ITERNUM + 0.1,0.0,0.0,1.0);
}
}
}

Мне понравилось ускорение в несколько тысяч раз по сравнению с кодом на питоне.
Anonymous No.99156
>>99154
>в несколько тысяч раз по сравнению с кодом на питоне.
Код на си на всех трёх моих ноутбуках в 200 раз быстрее, чем питон. Не 100, не 300, а 200 для более-менее разнообразной программы с разными штуками выразимыми на си. Видеокарта ещё в сотню раз быстрее, чем даже многопоточная процессорная си-программа, в некоторых случаях.

>if (a > RADIUS) break;
Вот это требует тяжёлого условного перехода и не разворачивается через хевисайда.
Точно не обещаю, но если написать что-то вроде:
for (i = 0; i < 10; i++) {
...фигня комплексными числами. (без проверки радиуса).
}
for (i=10; i < ITERNUM; i++) {
...фигня комплексными числами.
if (a > RADIUS) break;
}

То это может заработать быстрее. Идея в том, что первые десять итераций без проверки (выполняющиеся для каждого пикселя в любом случае) рискуют выполнятся быстрее, чем нужно количество итераций с проверкой. Уменьшаешь среднее количество джампов - увеличиваешь среднее количество линейных итераций. Это разумно.

Используй float2. Точнее, vec2, например как-то так: z=vec2(z.x*z.x-z.y*z.y, 2*z.x*z.y). Впрочем, это зависит от мозгов твоего драйвера и может не дать никакого прироста производительности.

> float a = sqrt(z_re*z_re + z_im*z_im);
> if (a > RADIUS)
Вот это капец, за такое просто руки отрывают. Ты хотя бы примерно осознаёшь насколько тяжёлая операция извлечения корня?
Напиши: float a = (z_re*z_re + z_im*z_im); if (a > RADIUS*RADIUS) break; где квадрат на всякий случай лучше тоже в константу засунуть (компиляторы для видеокарты не отличаются особым умом). Зачем ты заводишь float a, если значение используется всего один раз?
А если тебе нужен радиус или расстояние, используй glsl-функции по типу distance, length, normalize.

>Финальная часть шейдера с ракрашиванием.
Если ты заведёшь массив uniform-ов (uniform vec4 col[5];) и засунешь цвета и напишешь gl_FragColor =col[3.4] - то он линейно заинтерполирует col[3] и col[4]. Может быть не только с юниформами работает - точно не скажу.
То есть ты можешь написать float fi=i/50 и потом без всяких условий выбрать нужный цвет одной командой gl_FragColor =col[fi];
Пост отредактировал Anonymous
Anonymous No.99157
>>98960
Как я без текстур игру делать буду? Надо чтобы атмосферно и красиво было с щепоткой pixel a e s t h e i c s
Anonymous No.99163
15760489326950.png (420 KB, 1587x907)
15760489328001.png (19 KB, 1136x569)
Вот так и живут.



>>99156
Переписал шейдер, раньше рендеринг занимал где-то 33000 тактов, а теперь 25000.

#version 120

#define ITERNUM 200

#define WIDTH 1200.0
#define HEIGHT 600.0

#define STARTX -3.0
#define ENDX 1.0
#define STARTY -1.0
#define ENDY 1.0

#define POW2RADIUS 1.0

void main() {
float c_re = gl_FragCoord.x/WIDTH*(ENDX - STARTX) + STARTX;
float c_im = gl_FragCoord.y/HEIGHT*(ENDY - STARTY) + STARTY;

float z_re = 0.0;
float z_im = 0.0;

int i = 0;
for (i = 0; i < ITERNUM; i++) {
float new_z_re = z_re*z_re + -z_im*z_im;
float new_z_im = z_re*z_im*2;
z_re = new_z_re;
z_im = new_z_im;
z_re += c_re;
z_im += c_im;
}

float sum = z_re*z_re + z_im*z_im;
if (sum < POW2RADIUS) {
gl_FragColor = vec4(0.0,0.0,0.0,1.0);
}
else {
gl_FragColor = vec4(0.8,0.0,0.0,1.0);
}
}


Я ещё пробовал заменить части комплексных чисел на vec2, но это оказалось медленнее, чем просто с floatами. Кстати, у меня ещё и неправильное множество Мандельброта было, теперь нормальное показывает.
Anonymous No.99172
Долбанный виндовс! Пытался сегодня выкатить обнову Industriworks, а виндовс-версия решила посегфолтить во время генерации гоблинских домиков! Потом я ещё и обнаружил, что и в обычном случае виндовс-версия работает через раз. Ещё я увидел очень большую утечку памяти. Сейчас-то я её исправил, но новую версию выкатить не могу.
Раньше такие проблемы были из-за неинициализированных переменных. Ох уж этот си с его UB. По-моему, язык программирования не должен содержать UB и исполняться с одинаковым результатом на всех платформах. Это 40 лет назад были сотни доминирующих архитектур с пятибитными байтами, а дисплеи показывали не только 1 и 0, но и Z и, даже, X, а а микросхемы с ОЗУ были одновременно дисководами. Благодаря чему UB и был полезен.
То, что в виндовсе неинициализированный стек ведёт себя не как на линуксе это хорошо, ведь это позволяет исправлять баги. Плохо то, что в виндовсе нет никакого дебаггера. Даже вайновский не показывает названия функций. А в случае с printf оказалось, что это тот самый баг, возникающий из-за оптимизаций и с printf всё работает. А утилита cppcheck не обнаружила никаких неинициализованных переменных. Вечно эти сипипишники вындоуз сипипи предлагают угадывать. То угадывать документацию, то угадывать баги. А сишники предлагают через #ifdef перебрасывать UB через бедро и завязывать в узел, которым потом крепить шестерни к цепям для своего велосипеда. Конечно, есть и исключения, но их не много.
А есть ли в линуксе какой-нибудь тулз, который вытворял бы со стеком и кучей страшные вещи, которые бы приводили к багам при UB? Было бы полезно.
Вообще, может быть, когда-нибудь, мне придётся написать свой ядро ОС, хотя не исключаю, что оно будет основано на линуксе или, по крайней мере, много кода из arch и driver ядра будет использовано и иметь совместимость с моим ядром.
Возможно, предел разработки Индустриворкс подошёл к своему концу. Дальше 2 пути — загнивание или перерождение. Чтобы он загнил, надо ничего не делать, а чтобы переродился, рефакторить. Я слишком долго подгонял алгоритмы к результатам и оставлял явный memory leak, надеясь исправить его в будущем. А код генерации мира до сих пор ужасен, так как я так и не научился генерировать миры. Майнкрафт-подобный мир слишком сложен. Чанки, блоки. Я оперирую на их уровне абстракции, хотя, стоит генерировать на более высшем уровне. Кроме того, ради ввода моддинга, мне всё-равно пришлось бы очень много менять.
Ну так что, переписывать теперь полностью?
Вообще, геймдев это не моё, это промежуток. А эксперимент с Индустриворкс довольно неудачный, особенно с Early Access. Не хочется нарушать общение. lowlevel исполнения обещания это добавить хотя бы 10 хостайл мобов, блоки логических схем кстати, я подумывал их сделать не с помощтю проводов, а мгновенной связью и можно бельты/ЖД или что-то такое. Моддинг не плохо бы, но это если комьюнити наберётся, а сейчас около 10% до добавления моддинга. Ну и мультиплеер. Пора бросать Индустриворкс. Лучше бы я делал игру про сферу, пожирающую миры.
Anonymous No.99173
>>99163
>рендеринг занимал где-то 33000 тактов, а теперь 25000.
Даже если у тебя 1 ггц, то это 33 микросекунды или 1/30000 секунды. Абсолютно нереальное значение.
У меня вот выдаёт пару десятков миллионов такстов первый вариант и в два раза меньше второй.
Anonymous No.99174
>>99173
И правда, я получается, только вызов функций OpenGL замерял, а не рендеринг. У меня на обоих около 20 миллионов тактов, но второй кажется даже немного медленнее.
Anonymous No.99453
15765861171310.png (384 KB, 1024x768)
>Ответ: Учи C или C++,
Поясните в чём разница, и как это отразится на конечном продукте
Спрашивает человек с нулевыми знаниями в программировании, просто на сайте osgameclones.com C++ имеет больше всех клонов ремейков и т.д., что это значит?
Anonymous No.99454
>>99453
Начните с изучения любого языка. В дальнейшем вы сами поймёте, что вам нужно.
Anonymous No.99460
>>99453
C - это C++ без крестов. Кресты - это ссылки, методы, более обширная стандартная библиотека и ещё тысяча и одна мелочь.
Использовать чистый си смысла особого нет. Даже если у тебя код без крестов - можно пользоваться компилятором и средой разработки под кресты, оно имеет почти полную обратную совместимость.
>как это отразится на конечном продукте
Не сможешь использовать по-нормальному половину библиотек (тому что они будут под кресты), общая скорость создания кода замедлится в 1.2-3 раза в зависимости от стиля кода и опыта.
Так или иначе, в процессе изучения с++ ты изучишь почти всё си, а изучив си, тебе будет очень просто потихоньку добавлять элементы из с++ в код - это же почти что один и тот же язык.
Anonymous No.99461
>>99453
Си даст возможность понять как компьютеры устроены, а ассемблер довбьёт эти знания в тебя. Для геймдева это не важно, так что можешь и C++ учить. Вообще, для создания игр можешь и простой с низким порогом вхождения питон учить, но он не подойдёт игр с большой нагрузкой на ЦП, если только не писать дополнительные оптимизированные модули на том же си, си++ или другом компилируемом ЯП. Хотя, если твоя игра будет использовать всякие матричные и векторные операции, то есть модуль для питона numpy. Проблема питона в геймдеве такова, что многим пользователям (виндузятникам особенно) может быть непросто запустить твою игру, также и со стимом. Хотя, CPython, дефолтный интерпретатор питона имеет свободную лицензия, так что проблем с питоном не должно возникнуть, наверное.
Anonymous No.99463
>>99461
>>99460
Спасибо за разъяснения, анон
Anonymous No.99643
Украсил игорку про сверку.

Тем временем, начались зимние скидки в стимсе и это принесло вверх. Можно будет игру на букву N<- взять добавить хейра ака зайца, но летучего, билдинг-режим и хороши бы теневых шейдеров завезти рендер орто дефтбуфера и накладывание как теней и выпустить, пока скидка действует, привлекая больше людей. Главное это ДЕБАГГИНГ и отсутсвие пригрехов в выпуске.
Ex constructione mundi non penis canina est. надеюсь угадал с переводом
соре без видева я не умею кодировать мп4 в вебм быстро, качественно и малоразмерно.
соре и без картинки, постинг ограничен
Anonymous No.99706
Почему в опенгле не работает рендеринг в текстуру?
Понаделают всякого говна и замедляют разработку...
Anonymous No.99707
15770200718800.jpg (87 KB, 1024x1008)
>>99706
Работает.
Код показывай!
Anonymous No.99711
>>99707
ок.
void draw() {
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0,0.0,0.0,1.0);


s64 start = rdtsc();




GLuint FramebufferName;
glGenFramebuffers(1,&FramebufferName);
glBindFramebuffer(GL_FRAMEBUFFER,FramebufferName);

GLuint renderedTexture;
glGenTextures(1,&renderedTexture);

glBindTexture(GL_TEXTURE_2D,renderedTexture);

glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,600,100,0,GL_RGBA,GL_UNSIGNED_BYTE,0);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

GLuint depthrenderbuffer;
glGenRenderbuffers(1, &depthrenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER,depthrenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT,600,100);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,depthrenderbuffer);

glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,renderedTexture,0);

GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1,DrawBuffers);

if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
printf("error\n");
}

glBindFramebuffer(GL_FRAMEBUFFER,FramebufferName);
glViewport(0,0,600,100);



glColor4f(0.0,1.0,1.0,1.0);
glBindTexture(GL_TEXTURE_2D,0);
GLfloat vertex[8];
glVertexPointer(2,GL_FLOAT,0,vertex);

vertex[0] = 0;
vertex[1] = 0;
vertex[2] = 600;
vertex[3] = 0;
vertex[4] = 600;
vertex[5] = 100;
vertex[6] = 0;
vertex[7] = 100;
glDrawArrays(GL_QUADS,0,4);


/*GLuint s_beg = glGetUniformLocation(progid,"beg");
GLuint s_end = glGetUniformLocation(progid,"end");
GLuint s_offset = glGetUniformLocation(progid,"offset");
GLuint s_height = glGetUniformLocation(progid,"height");
glUseProgram(progid);
glUniform4f(s_beg,vertex[0],(vertex[1] + vertex[7])/2,0,0);
glUniform4f(s_end,vertex[2],(vertex[3] + vertex[5])/2,0,0);
glUniform1f(s_offset,(float)(gtakt%20)/20.0*(2*M_PI));
glUniform1f(s_height,vertex[7] - vertex[1]);

s32 num = 0;
glGetProgramiv(progid,GL_INFO_LOG_LENGTH,&num);
char msg[64] = {0};
glGetProgramiv(progid,GL_INFO_LOG_LENGTH,&num);
glGetProgramInfoLog(progid,num,NULL,msg);*/
//printf("%i\n",num);
//printf("%s\n",msg);



glBindFramebuffer(GL_FRAMEBUFFER,0);
glViewport(0,0,WindowWidth,WindowHeight);




//glUseProgram(0);


glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0,0.0,0.0,1.0);

glRotatef(gtakt%50,0,0,1.0);




glColor4f(1.0,1.0,1.0,1.0);
glBindTexture(GL_TEXTURE_2D,renderedTexture);
glVertexPointer(2,GL_FLOAT,0,vertex);
vertex[0] = 0;
vertex[1] = 0;
vertex[2] = 600;
vertex[3] = 0;
vertex[4] = 600;
vertex[5] = 100;
vertex[6] = 0;
vertex[7] = 100;
glDrawArrays(GL_QUADS,0,4);






SDL_GL_SwapWindow(window);

s64 end = rdtsc();
//printf("%li\n",end - start);

usleep(20000);

gtakt++;
}

Тут есть мусорный код типа usleep и rdtsc, но я его не удаляю, а то вдруг какую-то функцию упущу.
Я хотел с помощью шейдера рисовать предмет и решил рендерить в текстуру. Не получилось. Затем я закоментировал код для установки шейдеров и стал рисовать просто белый квадрат. Но оно не работает, не рисует. Ещё в туториале было сказано glFramebufferTexture, но я сделал glFramebufferTexture2D, так как у меня на ПК максимум opengl 3.0 поддерживается.
Anonymous No.99717
>>99711
У меня по какой-то причине другой код для рендеринга в текстуру, но твой тоже работает.
В конце ты на экран рисуешь через glVertexPointer(2,GL_FLOAT,0,vertex)
Если у тебя рендеринг в текстуру, то в каком месте ты указал текстурные координаты для твоей текстуры? Бака ты такая.
>vertex[2] = 600;
После glLoadIdentity на экране рисуется область с координатами по x и по y от -1 до +1. 600 - это 300 твоих экранов - у тебя один пиксель твоей текстуры будет на весь экран.
И твоя текстура у тебя пустая - что оно должно было нарисовать?


Я дописал какие-то необходимые штуки, возможно тебе нужно будет стереть мои glEnableClientState и прочее.
И ещё я через аргументы функции размера окна передавал, просто сотри.
Код фреймбуфера совсем не трогал. Работает, и хрен с ним. Но я вот не использовал функцию glDrawBuffers вовсе, например.
Попробуй так
void draw(int WindowWidth,int WindowHeight) {
static GLuint FramebufferName;
static GLuint renderedTexture;
static GLuint depthrenderbuffer;
static bool bb=false;
if (!bb)
{
bb=true;






glGenFramebuffers(1,&FramebufferName);
glBindFramebuffer(GL_FRAMEBUFFER,FramebufferName);


glGenTextures(1,&renderedTexture);

glBindTexture(GL_TEXTURE_2D,renderedTexture);

glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,600,100,0,GL_RGB,GL_UNSIGNED_BYTE,0);
//Вот тут поставил в обоих местал GL_RGB на всякий случай


glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

glGenRenderbuffers(1, &depthrenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER,depthrenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT,600,100);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,depthrenderbuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,renderedTexture,0);
GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1,DrawBuffers);

if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
printf("error\n");
}

glBindTexture(GL_TEXTURE_2D,0);
glBindFramebuffer(GL_FRAMEBUFFER,FramebufferName);
glViewport(0,0,600,100);


// ----------------------



glClearColor(0.3,0.4,0.6,1.0);//Поставлю цвет вечернего неба, чтобы можно было отличить от фона
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor4f(1.0,0.5,0.0,1.0);
GLfloat vertex[]={0.2,0.2,0.2,0.8,
0.2,0.8,0.8,0.8,

0.45,0.45,0.55,0.55,
0.45,0.55,0.55,0.45,
0.6,0.45,0.65,0.5,
0.6,0.55,0.7,0.45,};
//Нарисую что-то на фреймбуфере.
glLineWidth(4);
glLoadIdentity();

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2,GL_FLOAT,0,vertex);
glDrawArrays(GL_LINES,0,12);
glDisableClientState(GL_VERTEX_ARRAY);



glBindFramebuffer(GL_FRAMEBUFFER,0);


}

// ----------------------
{
glViewport(0,0,WindowWidth,WindowHeight);
glLoadIdentity();
glClearColor(0.1,0.1,0.1,1.0);//Поставлю серый, чтобы было видно, что не чёрный и хоть что-то рисуется
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glOrtho(-WindowWidth*1.0/WindowHeight,WindowWidth*1.0/WindowHeight,-1,1,-1,1);
//Отмасштабирую, чтобы не растягивалось по горизонтали

glScalef(0.3,0.3,0.3);
glRotatef(clock()*0.02,0,0,1.0);


glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
GLfloat vertex[8]={0,0,0,4,4,4,4,0};//Рисуют 4х4 раза вышеизготовленную текстуру
glColor4f(1.0,1.0,1.0,1.0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,renderedTexture);
glVertexPointer(2,GL_FLOAT,0,vertex);
glTexCoordPointer(2,GL_FLOAT,0,vertex);//Текстурные координаты совпадают с реальными координатами
glDrawArrays(GL_QUADS,0,4);

glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindTexture(GL_TEXTURE_2D,0);
glDisable(GL_TEXTURE_2D);


}



}


А ещё пробовал смотреть что выдаёт glGetError? Полезная функция, рекомендую.
Пост отредактировал Anonymous
Anonymous No.99720
15770288165240.webm (4112 KB, 1200x600, 00:00:14)
>>99717
Спасибо, теперь работает и я могу рисовать текстуру шейдером.
Про текстурные координаты и правда забыл, а что насчёт -1 и 1, так я делаю glOrtho к пиксельным размерам окна.
Только я так и не понял, что было не так в моём коде, но главное, что твой код работает.
Anonymous No.99737
>>99720
Я не знаю как твой код использовался, от этого могло зависеть, от состояния opengl.
>Только я так и не понял, что было не так в моём коде
Вот без любого из этих фиксов твой код у меня не работал:
1. Начальная секция с glGenFramebuffers выполнялась каждый кадр, и после кадра никаких glDeleteFramebuffers после не следовало - я же через static переменные пришил, так чтобы инициализация выполнилась только в первый кадр. К тому же создавать и удалять текстуру каждый кадр - плохо, операция создания и удаления может быть тяжёлой.
2. Не было glEnableClientState(GL_VERTEX_ARRAY/GL_TEXTURE_COORD_ARRAY), и вызовов glEnable(GL_TEXTURE_2D).
3. Не было текстурных координат, обычные координаты были неадекватные и на текстуру ничего не рисовалось - без этого код сработает, но нельзя будет понять по картинке работает ли он, потому что там чёрный квадрат на чёрном квадрате, а выборка из текстуры производится только в одном пикселе.
Anonymous No.99780
15771878346150.webm (8213 KB, 1586x906, 00:00:15)
Приблизительно так будет сделан ветер.
Я был немного разочарован, когда оказалось, что я не могу с переменным размером данные в шейдер пихать. А может можно как-то данные повертексно давать?
Мне пришлось ограничить числом, из-за чего, если будет больше 256 одинаковых цветков/травы, то те уже перестанут двигаться:
#version 130

uniform float sila;

#define VETER_SIZE 2048
uniform int veter[VETER_SIZE];

void main() {
vec4 outvertex = gl_Vertex;
if (gl_VertexID < VETER_SIZE) {
if (veter[gl_VertexID] == 1) {
outvertex.x += sila;
outvertex.z += sila;
}
}
gl_Position = gl_ModelViewProjectionMatrix*outvertex;

gl_TexCoord[0] = gl_MultiTexCoord0;
}
Anonymous No.99790
>>99780
У тебя в шейдера аж два условия, избегай же условий. Не понял смысл первого, но второе точно стоит заменить на +=sila*veter[gl_vertexID]
>А может можно как-то данные повертексно давать?
Так же, как координату, цвет, нормаль и текстурные координаты? Конечно можно, вон уже сколько разных.

Собственно, glVertexAttrib3f(3,r,g,b) полностью эквивалентно glColor3f(r,g,b), а glVertex3f(..) - glVertexAttrib3f(0, ..), а:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2,GL_FLOAT,0,vertex);
glDrawArrays(GL_LINES,0,12);
glDisableClientState(GL_VERTEX_ARRAY);

можно заменить на куда более логичное:
glEnableVertexAttribArray(0);
glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,vertex);
glDrawArrays(GL_LINES,0,12);
glDisableVertexAttribArray(0);

В новых версиях у тебя не так получается - что координата имеет 2, 3 или 4 компоненты, нормаль всегда 3, а цвет 3 или 4 - а ты можешь сам определять количество атрибутов вершины, их размер (но не более 4 компонент) и смысл. Максимальное количество можно получить через GL_MAX_VERTEX_ATTRIBS, и оно должно быть по крайне мере 16, вроде бы. Ну и там всякие glBindAttribLocation посмотри.

Можно я тоже шейдер для ветра в траве сделаю? Я посмотрел ирл видео с ветром в поле и у меня, как мне кажется, появилась неплохая идея, чтобы ветер был чуть-чуть поживее, чем это движение как на гифке с лягушкой.
Anonymous No.99797
>>99790
>Можно я тоже шейдер для ветра в траве сделаю?
Для моей игры? Можно.
Только на моей машине поддерживается версия максимум 130, так что я, скорее всего, не смогу протестить большую версию.

Вот такой функцией я генерировал данные, которые пересылались в veter:
RetVertexData_t FlowerVertex(block_t* block) {
NewVar(RetVertexData_t,out); //макрос для выделения на стеке с memset в ноль

out.num = 8;
out.vertex = malloc(sizeof(GLfloat)*out.num*3);
out.texcoord = malloc(sizeof(GLfloat)*out.num*2);
out.color = malloc(sizeof(GLfloat)*out.num*3);


out.vertex[0*3 + 0] = VoxelToMeter(0.5);
out.vertex[0*3 + 1] = 0;
out.vertex[0*3 + 2] = BLOCKMETERSIZE/2;

... //неважно

out.shelmsize = sizeof(GLint); //размер элемента
out.shdnum = out.num; //кол-во элементов. В данном случае 8, что соответствует кол-ву вертексов
out.shaderdata = calloc(out.shdnum,out.shelmsize);

((GLint*)out.shaderdata)[0] = 0; //для нижних вертексов ноль, а для верхних 1.
((GLint*)out.shaderdata)[1] = 0;
((GLint*)out.shaderdata)[2] = 1;
((GLint*)out.shaderdata)[3] = 1;
((GLint*)out.shaderdata)[4] = 0;
((GLint*)out.shaderdata)[5] = 0;
((GLint*)out.shaderdata)[6] = 1;
((GLint*)out.shaderdata)[7] = 1;

return out;
}


А эта функция вызывается перед каждой отрисовкой вертексов, к которой привязана текстура одуванчика + комплекс шейдеров ветра или текстура клевера + тот же комплекс шейдеров ветра:
void FloraShaderFunc(RenderData* rd,GLuint prog) {
GLuint sila = glGetUniformLocation(prog,"sila");
GLuint veter = glGetUniformLocation(prog,"veter");

glUseProgram(prog);

glUniform1f(sila,sin((float)((takt)%50)/50.0*(2*M_PI))/5.0);
glUniform1iv(veter,rd->shdnum,rd->shaderdata);
}

А после, glUseProgram(0);. Это ещё и почанково.

Но если можно обойтись без костылей с пересылкой int данных каждый раз, а использовать только аттрибуты, то я буду рад.
Думаю, смогу приспособить твой шейдер.
Anonymous No.99801
>>99797
>Для моей игры?
Не уверен (трава в ямах же не должна качаться), я просто какую-то простую сцену сгенерирую, хочу посмотреть как идея.
А геометрический шейдер (расширение ARB_geometry_shader4) поддерживается?
Anonymous No.99810
>>99801
Скорее всего поддерживается, он рекьюрит OpenGL v1.1

Что насчёт ветра, то я собирался сгенерировать как бы скруглённую пилообразную волну, которая сильно выходит в + и немного - (отдача) и наложить на неё рандомный шум, а в шейдере ещё сделать зависимость от расположения вертекса (чтобы были как волны ветра). Ещё добавить фактор, в общем случае зависимый от высоты, ведь пшеница у меня двублочная.
Anonymous No.99854
15772696129470.png (60 KB, 999x682)
15772696131391.webp (191 KB, 882x626)
15772696133202.webm (4301 KB, 1320x1040, 00:00:11)
15772696136793.webm (7523 KB, 1320x1040, 00:00:11)
Вроде бы норм получилось. 60 фпс не конвертируется и по размеру не умещается.
Вот для начала я медитировал на сие видео, 53 и 57 минуты: https://youtu.be/wI1on2jLi7o?t=3229
Если внимательно посмотреть, сначала в траве верхняя часть стебля быстро дёргается, и лишь с небольшим запаздыванием прогибается основной стебель.

В итоге я сделал трёхкомпонентную текстуру: резкую карту шумов для мелких колебаний (на левой картинке отмечено красным), не очень резкую для средних по амплитуде и совсем плавную. Причём, каждую из этих компонент вершинный шейдер берёт с небольшим запаздыванием, чтобы сначала начинали трепетаться верхушки, а потом прогибался весь стебель более основательно.
И ещё какую-то коррекцию высоты стебля прикрутил, чтобы он визуально не расстягивался. Вот справа это изображено на первой картинке. Правда, при слишком сильном ветре стебель проваливается под землю, но это фигня.
Вот код: https://pastebin.com/sTf8ZTGS
Шейдер говно неоптимизированное, как, впрочем, и всё остальное - но мне просто хотелось это сделать, посмотреть насколько реалистично будет выглядеть.
Функции нужно передавать размеры окна (чтобы пропорции были верные). Ещё там в коде есть mode, которая позволяет отрисовывать листья в виде сетки как на втором пике (или можно на текстуру ветра посмотреть), и можно поменять количество кустов, сегментов у листьев и всего остального где-то ещё в коде.
Anonymous No.99886
15773241774790.jpg (65 KB, 720x480)
>6. Как делать музыку?
>Ответ: Если не можешь в реале, то тебе понадобится трекер.
https://rutracker.org/ сойдёт?
Anonymous No.99896
>>99886
Можешь поспользоваться моим, но он не завершён:
Хотя нет, не кину, там слишком много личной инфы
Anonymous No.99908
Мдпа, с игрой на букву и полнейшая неразбериха.
Видимо, мне придётся его полностью переписывать, ещё и сделать более модульным.
А хотел ещё попробовать насосать на скидочках.
Я ещё и гитом не пользовался, так как однажды он испортил мои исходники, а так бы мог откатить и посмотреть, где именно сломалось.
Anonymous No.100337
>>96153 (OP)
> Ответ: Если не можешь в реале, то тебе понадобится трекер.
Трекеры суть же хуйня неудобная. Ничего лучше пианоролла и степ-секвенсора пока не придумали.
Anonymous No.100815
Потихоньку вхожу в с# (вообще для юнити дрочу его). Почитал faq треда, где движки. Как это все работает? Если не юзаешь движок? Пишешь собсвтенный?
Anonymous No.100819
>>99886
MadTracker 2 скачай, это вещь!
Anonymous No.100825
>>100815
>с#
Чем оно от C++ отличается?
Anonymous No.100826
>>100815
Если не используешь конструкторы игр типа юнити, гейммейкера, уеча и годота, то пишешь игру как обычную программу с точкой входа в main. И уже подключаешь линковкой движки типа ogre, irricht, bulltet, ODE, libccd.
Anonymous No.100827
>>100825
C# - это как джава, там тоже виртуальная машина. Довольно сложно прострелить себе ногу, но и работает тормознее крестов в 1-4 раза.
Anonymous No.100902
>>100826
С джва дэ игрушками отдельно прикручивать граф движок не надо?
Видел на ютубе туториал какого-то чувака, он создавал visual studio папку с ресурсами, и скидывал туда графику.
Anonymous No.100908
>>100902
Вообще ты можешь взять OpenGL, и через glVertexPointer и glPushMatrix+glPopMatrix отрисовывать каждый спрайт, но учти, если таких спрайтиков будет больше пары тысяч, то могут начаться лаги, и не из-за видеокарты, а потому что процессор не будет поспевать в цикле каждую ноду (сос прайтом) рисовать и тебе придётся, например, отдельно генерить вертексы для статических объектов, чтобы рисовать их за один вызов.
Anonymous No.101060
15783368841780.png (402 KB, 825x548)
В новой версии TAKTRATE будет равен 60 для абсолютной плавности движений для 60 FPS, но обработка блоков и ещё некоторые вещи скорее всего будут вызываться раз в !(takt%2), а некоторые вещи типа перебрасываний указателей на сущностей на другие чанки-владельцев вообще раз в !(takt%4) или !(takt%8) раз. Хотя, этим можно вообще заниматься при выгрузке чанков с одного места на другое, наверное.
Anonymous No.101071
Кстати, код игры адаптирован процентов на 20.
Я тут посчитал, по исходникам проект (в его старой версии) разросся до 17 тысяч строк! Из них около 3 тысяч это код "главного мода" или же функций для отдельных предметов. Надеюсь, после реинкарнации код уменьшится хотя бы до 15 тысяч строк.
При этом текстур около 350, звуков 3, шейдеров 1 (код для ветра от анона я пока ещё не внедрил, но сохранил, а мой может стать шейдером для подводных волн), 3 текстуры-паттерна для генерации мира, было около 20 моделек разных предметов и есть около 350 кусков текста (для отдельно взятого языка).
Anonymous No.101103
15784083581970.png (9 KB, 736x578)
8 часов настривал новый ГУЙ, чтобы добавить горстку кнопочек.
Anonymous No.101128
>>96153 (OP)
Как вы умудряетесь сидеть над одним проектом месяцами? Я вот когда начинают проект, не вылезаю из него неделю-две, думаю только о нем, но через некоторое время полностью теряю в нему интерес.
Anonymous No.101130
>>101128
Я и сам не знаю. Наверное, есть что-то притягательное в этом. Высший художественный+инженерный интерес.
Хотя нет... На самом деле я просто очень хочу получить деньги при этом не ходя на работу, а занимаясь неплохим таким занятием, как геймдев, например. У меня есть очень много некоммерческих проектов, которые тоже отпали, хотя я, на самом деле, не занимался ими изрядно.
В общем-то я здесь единственный, чей проект живёт хоть и тоненькой, но жизни струйкой.
Anonymous No.101159
Уж очень сложно с этим новым гуи. Надо делать без костылей, а всё-равно получаеются спорные решения.
У меня есть виджеты, они могут быть параллелипипедами, другими дравейбл или боксом — хранилищем виджетов, который сможет выстраивать их по лейауту, сможет быть скроллед внутри другого виджета (в частности квадрата-окошка), ещё только что добавил штуку как PushActivity и PopActivity. Такое было и раньше, но теперь это и тут. Оно изменяет флаги нужных виджетов так, чтобы можно было перемещаться между активностями, ну main menu, options menu.
Ещё виджеты теперь имеют айди.
Зато мне больше не придётся заново ГУИ писать для новых игр.
Anonymous No.101166
Как же сложно создавать ГУИ! Никогда не создавайте ГУИ, лучше используйте уже готовое.
Внезапно обнаружилась проблема, из-за которой пришлось немного переписать логику, так из-за этого всё побагалось-порушилось.
Anonymous No.101167
А, не, я ошибся. ГУИ это норм вещь, Си это плохо. Не программируйте на Си, если не хотите багов. Си подходит только для небольших программок, в т. ч. и микроконтроллерных прошивок.
Anonymous No.101213
15787579260610.webm (8073 KB, 1200x800, 00:00:28)
Вот так сейчас выглядит Индустриворкс.
Сегодня еле-еле довёл до 29% готовности, когда хотел до 35%.
Вечно я не измеряю собственные показатели продуктивности, чтобы потом не стопорить свою психику "оправдывающими" числами.
Кстати, на следующей неделе ожидается небольшая скидочка на Индустриворкс в стиме.
Anonymous No.101387
Беру свои слова назад. Разработка настоящего ГУИ это то ещё занятие. Если вы не хотите разбираться со всей этой чепухой, ищите подходящую библиотеку, иначе много времени отнимет.
Anonymous No.101477
15790029120220.webm (2738 KB, 1200x800, 00:00:43)
Кстати, я сосачир-кроссбордер.
Я заморозил игру про сферку и начал делать игру про шахматы, так как это легче. А на сосаче постил, так как там аудитория больше.
В общем основные механики готовы, осталось только штук 30 уровней сделать и можно выпускать.
Ещё один плохой баг исправить.
Я бы и Индустриворкс поделал, всё-таки он уже есть, но не дружу с логикой и стратегией. Кроме того, используя уже имеющуюся экспу, можно посмотреть, сколько я выжму из шахмат.
Anonymous No.101484
15790093343050.png (24 KB, 600x365)
Тучеры, дайте мне годных гайдов по новому блендеру...

>>96153 (OP)
> Как под линукс не из-под линукса скомпилить, я незнаю, не пробовал.
Кросс-компиляция называется вроде, я видел на одной очень популярной имиджборде, как человек компилировал .exe из под какого-то линукса.
Anonymous No.101485
>>101484
> Тучеры, дайте мне годных гайдов по новому блендеру...
И мне чтобы с нуля вкатиться, а не переучиваться на новый интерфейс.
Anonymous No.101486
>>101484
> Кросс-компиляция называется вроде
Перечитал, я неправильно понял.
Anonymous No.101495
15790200438220.png (33 KB, 651x443)
Незнаю как, но я почти сделал обводку вокруг предметов.
Всё-таки си не подходит для настоящей разработки. Максимум для простых утилит или для обучения школьников. Я пробовал не подгонять алгоритм под результат, но не получилось.
А ведь некоторые люди пишут линукс на си.

А у меня ещё и ГУИ багает. Как только я бросаю предмет, мои виджеты рисуются белым.
как же это сложно...
Anonymous No.101809
15792524377400.webm (13550 KB, 1200x800, 00:00:27)
Научился снимать видео в 60 фпс.
Anonymous No.102272
15799572621800.png (93 KB, 530x390)
Сделать верстак с полем 10x10. А то чё крафт такой лёгкий! 8 палок 20 слитков на одну кирку.
Anonymous No.102313
Кстати, новая версия готова где-то на 46%.
Почему после Нового Года всех прям так размазало по холсту календаря? Но если других где-то на 1-2 недели, то меня на 3.
Anonymous No.102339
15800343114040.jpg (47 KB, 800x742)
>>101477
>я сосачир
>не дружу с логикой
Anonymous No.102568
Как вы можете использовать Си? Написал немного сложную программу, а в неё вся память утекает!
Anonymous No.102572
>>102568
Флаг, хватит фигнёй страдать, код показывай, поищем твою память.
Anonymous No.102599
>>102572
Мне что, все тысячи строк открывать теперь? Не, я лучше сам. Ту утечку я решил, но нашлась ещё парочка.

[Назад] [Обновить тред] [Вверх] [Каталог] [ Автообновление ]
160 / 78 / 113

[Ответить в тред] Ответить в тред

15000

Ответ в тред No.96153
Настройки
Избранное
Топ тредов