Название: в разработке
Разработчик: я
Платформы: пока - Windows, потом - HTML5.
Средства разработки: FreePascal+OpenGL 3.1
Описание: очередной проект, нужны все.
Основная идея: RTS с десятками тысяч юнитов, которые обрабатываются на GPU и за счет этого будут работать в обычном браузере. Обстановка - эпические бои в космосе.
Пока делаю на обычном OpenGL, потом ради конкурса HTML5 переведу на WebGL (соответственно ограничиваюсь фичами доступными в WebGL, правда использую пару расширений которых на мобильных девайсах нет, поэтому будет идти только на десктопах).
Дошел до стадии технодемки - основная механика работает, но до играбельного состояния еще далеко. Ну и над графоном надо работать.
Но можно посмотреть\покликать мышкой и нагрузить видеокарту.
В текущей версии участвует 32 тысячи объектов, из-за жутко неоптимального алгоритма поиска цели это для текущей версии предел. Каждый корабль влоб перебирает всех врагов и ищет ближайшего, на GeForce 310M при 60 FPS это занимает четверть секунды, для 65 тысяч будет занимать уже секунду и начнет влиять на исход боя.
Если поиск цели оптимизировать - вполне реально дойти до сотен тысяч. Правда какая будет скорость на WebGL еще предстоит выяснить, там ведь ANGLE переводит GLSL шейдеры в HLSL.
Картинки:
Демка:demo5 (от 01.02.2014)
Управление в демке: выход по Esc, при нажатии левой кнопки мыши корабли первого игрока (который внизу, т.е. красные) будут вместо бортового ИИ двигаться к указанной точке. Тормозить у точки они не будут, так что собрать их вместе не получится.
Требует OpenGL 3.x
На картах RADEON нужно исправить в shaders/consts.c "#version 110" на "#version 330" (но сам проверить не могу), на картах NVIDIA должно работать так, карты Intel в пролете.
Буду благодарен советам\критике\интересным идеям по механике космических боев и прочему.
Проект интересный но не запускается игра =( только серый фон
LogicManager
А что в консольном окне (доступном по альт-таб) пишет?
Вообще лучше сейчас нормальный лог добавлю.
Перезалил версию с логом в первое сообщение. Можешь прислать что в log.txt пишет?
Хм, радеоны не поддерживают отсутствие #version, ну да ладно. Все равно я особо и не надеялся что шейдеры между webgl и opengl будут совместимы напрямую.
вот исправленная демка:
[file=93933]
kipar
> В текущей версии участвует 32 тысячи объектов
> для 65 тысяч
> реально дойти до сотен тысяч
цифры ради цифр, ясно.
ratling
А то!
kipar
> вот исправленная демка:
Эм? Там шейдеры без #version и соответственно не работает. Поправь ссылку
war_zes
Во все шейдеры при запуске включаются файл consts, а в нем #version есть. Просто у меня радеонов нет, поэтому проверить не могу (хотя amdшный). Может ему #version 110 не нравится? счас выложу с #version 120 (ну или сам поправь в shaders\consts)
ratling
> цифры ради цифр, ясно.
Но если серьезно - пока это демонстрация технологии, поэтому кроме цифр похвастаться нечем.
Правда еще есть особенность - мне интересно как могут выглядеть бои в нормальном вакууме, без дурацких ограниченных скоростей и сажания на хвост. Пока этой цели я не очень добился, исход боя решается микроконтролем, но это уже вопрос доработки ИИ.
Механика тоже простая - у каждого корабля есть зависящая от типа дальность, хп и урон. Те у кого дальность маленькая стремятся подойти ближе, те у кого большая - держаться подальше.
kipar
Вообщем заработало только #version 330
Я х.з. почему. В моем движке #version 110 работает, а здесь не хочет. Может ты как-то сам ограничиваешь при создании контекста? Просто в логе так и пишется что на этот контекст нельзя юзать версию 110
Implicit version number 110 not supported by GL3 forward compatible context
36 fps при экране 1600х900 (карта в пред логе написана). Отвяжи управление от количества кадров. А то у меня вообще на клик мышки никакой реакции нет (синие и красные корабли куда-то вправо меееедлено ползут)
war_zes
Надо зажать кнопку нажатой и держать. Когда отпускаешь - корабли возвращаются к исходной логике. И да, реакция у них все равно замедленная, им же надо текущую скорость погасить, а синие и красные - твои. Вот зеленые и оранжевые - вражеские. Но это временно, а так - уже другую систему приказов делаю.
Контекст - создаю forward-compatible, т.е. без FFP, запрашиваю версию 3.1.
Хм, с 330 уже на моей видюхе не работает, ругается на устаревшие variyng и attribute, еще один повод переходить сразу на WebGL и смотреть какие будут проблемы с совместимостью там.
kipar
> Хм, с 330 уже на моей видюхе не работает, ругается на устаревшие variyng и
> attribute
а при чем тут видюха? вместо varying - in\out, аттрибуты пишутся
layout(location=0) in vec3 inVertex; layout(location=1) in vec3 inNormal; layout(location=2) in vec2 inTexCoord;
kipar
ох уж эти ссаные радионы )
у меня запустилось. прикольно выглядит.
Тема в архиве.