Free3d - трехмерный лабиринт

Entertainment for 5 minutes, hours, days
  • anton_obuhov wrote:Слушайте парни если есть дайте исходники или напишите на чем сделана а то так можно реально игру забацать аж в 3д если разберусь с этим то начну создавать хоть завтра хоть и начинающий программер
    кто с асмом не дружит, тому не создать хорошей игры в Коос.
    начни с изучения ассемблера.... чтения примеров и понимания как и что работает
  • ...или напишите на чем сделана...
    ASM, ASM и еще раз ASM. :wink:
    А исходники на SVN в programs/demos/free3d04/trunk
    Заглянул на огонёк
  • Пару дней ковырялся с Free3D с целями:
    1) Прикрутить PNG вместо GIF (а следовательно полноценные 24 бита, вместо урезанной палитры ограниченной 8 бит) и сделать его динамическую подгрузку при запуске.
    2) Уменьшить расход памяти - в версии 0.4 вообще менеджер памяти не используется, да и карта памяти честно говоря разбросана как попало.
    3) Прикрутить текстуры более высокого разрешения. В версии 0.4 они 64х64, в своей я пока прикрутил 128x128. К сожалению разница между этими текстурами не сильно заметна, зато размер самой текстуры увеличивается в 4 раза. Впрочем я еще не разобрал код окончательно, может где еще подкрутить можно, для улучшения качества отображения.

    В общем выглядит теперь так:
    1) С текстурами 64x64
    1.png
    1.png (78.84 KiB)
    Viewed 7205 times
    2) С текстурами 128x128
    2.png
    2.png (118.16 KiB)
    Viewed 7205 times
    В планах сделать еще нормальное управление видом, а то то как оно есть очень неудобно позиционировать.
  • На посмотреть пока выкладываю бинарник вместе с текстурой 128х128:
    free3d.7z (258.38 KiB)
    Downloaded 299 times
  • Nice update, mario.
    Did you speed it up too? In KlbrInWin, it is too damn fast to walk through the maze..
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • Probably this is your subjective experience. :)
    I did not do anything for the speed.

    However, I would suggest that the align 4 and using the memory manager (function 68) can give a speed boost is theoretically.

    Also KlbrInWin works very fast too - because it uses the Windows services.
  • Кажется я понял в чем причина. Алгоритм реализованный в программе масштабирует по вертикали нормально, в то время как масштабирование по горизонтали сделано очень тупым методом. В итоге вместо кубиков получаем прямоугольники.

    Отсутствие сглаживания тоже не идет на пользу качеству - впрочем есть такое подозрение, что внедрение даже билинейного сглаживания (например как я сделал для zSea) приведет к замедлению на порядок.
  • hidnplayr: "...it is too damn fast..."
    Mario: "...приведет к замедлению на порядок."
    хм...
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Я сказал если внедрить. А чего ты хочешь? Это же куча операций умножения и деления. Причем поскольку числа не фиксированы, то рассчитывать тем что обойдется операциями сдвига регистра не приходится. Разве не замечал, что любые попытки улучшить картинку в современных играх разнообразными сглаживаниями выливаются в резкий провал производительности. Это не смотря на то, что там все это дело видеокарта сама обсчитывает, не нагружая центральный процессор.

    А вообще я не обещал, что буду этого делать. Поскольку это уйма затраченного времени, а движок у Free3D малоперспективен, из-за своей неполной трехмерности. Вот движок 3detx60b, который оставил Павлюшин Евгений гораздо более перспективен, но и сложней соответственно.

    Вообще скорее всего на неопределенное время я пропаду из сети. Может быть через месяц только появлюсь - жизнь имеет свое мнение относительно моих планов.

    UPD: Залил на SVN ревизия 1880.
  • я знаю, что если внедрить. Иначе бы не обращал внимание на проблему, которая таким образом побочно решится, если ты захоешь и сможешь это сделать.
    А сможешь/захочешь или нет - исключительно твое дело, разумеется (ну и жизни, как следует из твоего сообщения).
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Обнаружил хитрое ограничение - в Колибри можно получать только координаты мыши, но когда координаты в своих значениях доходят до края экрана, то мышь для приложения "замирает". Я еще не смотрел код ядра, но мне думается что события мыши генерируются даже когда она уперлась в край экрана. Таким образом приложение получает событие мыши, но не может опознать что произошло. Для 2D режима это не существенно, поскольку пользователь видит курсор мыши. Для 3D режима это уже проблема.

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

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

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

    Кстати, то же самое не помешает и 2d приложениям - а то у меня в какой-то портированной игре курсор покрывал только верхнюю левую часть игрового окна, а правее/ниже выскакивал из него.

    Предлагаю оформить такие вещи в виде макросов, т.к. команд для каждой из этих операций совсем немного нужно, а игры клепать позволит только так =)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • так что я думаю что ядро дергать не стоит, оно, имхо, все правильно делает. а то, если окно всегда будет знать что с мыщью творится - можно будет написать мышьлоггер зловредный, что не есть хорошо.

    Кстати да, при потере фокуса окна или выходе из приложения тоже должен срабатывать пункт 2 из предыдущего поста. Возможно, даже вместо специальной горячей клавиши (что будет компенсировано возможностью нажать кнопку "виндовз", что приведет к сбросу фокуса).
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • под горячей клавишей я понимаю не общесистемную, а внутреннюю...
    /сорри что пишу не в один пост, беспокоюсь за получающих сообщения через rss/
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Who is online

    Users browsing this forum: No registered users and 2 guests