2010-03-18 2 views
6

Более 5 лет назад я играл с DirectSound и Direct3D, и я нашел его действительно захватывающим, хотя для получения хороших результатов с C++ потребовалось много времени. Тогда я был студентом колледжа. Теперь у меня в основном опыт развития предприятий на C# и PHP, и я делаю это для жизни. У нас действительно нет шансов заработать деньги с серьезным развитием игры в нашей стране. Каждый день все больше и больше я нахожу, что что-то упускаю. Поэтому я решил потратить час или около того каждый день, чтобы заниматься программированием для удовольствия.3D-игровой движок для сетевого моделирования мира/AI sandbox

Итак, моя идея - построить мировую симуляцию. Я хотел бы начать с чего-то простого - некоторых человекоподобных существ, которые живут своей жизнью - например, Sims 3, но гораздо более простых, простых потребностей, основных анимаций, минимальных графических объектов - я думаю, это не будет город, а просто большой дом для начала. Идея состоит в том, чтобы иметь какое-то серверное приложение, которое хранит мировые данные в базе данных MySQL, а некоторые клиентские приложения - безболезненные AI-боты, которые имитируют движение и некоторые взаимодействия с миром и друг с другом. Но это не было бы весело без 3D. Итак, есть и 3D-клиенты - я могу войти в этот виртуальный мир и посмотреть, как живут боты AI. Когда бот входит в видимую область, он становится материалом - загружает сетку и анимацию, поэтому я могу ее увидеть. Когда я ухожу, боты снова теряют свои 3D-сетчатые тела, но их виртуальная жизнь продолжается.

Со временем я надеюсь сделать его похожим на расширяемую скриптовую песочницу для экспериментов с различными алгоритмами AI и так далее. Но я не намерен создать полноценную MMORPG: D

Я искал много возможных вещей, которые я бы нужно (бесплатно и с открытым исходным кодом), и теперь я должен сделать выбор:

  • OGRE3D + enet (или RakNet). Старый хороший C++. Но разве это не замедлит меня так, что я больше не буду веселиться?

  • CrystalSpace. Формально не игровой движок, но очень близкий к этому. C++ снова.

  • MOgre (обертка OGRE3D для .NET) + lidgren (сетевая библиотека, которая уже используется в некоторых игровых проектах). Хорошо - мне нравится C#, это хорошо для быстрого программирования, а также может использоваться для сценариев.

  • XNA кажется только каркас, а не двигатель, так что действительно есть сомнения, я должен даже смотреть на XNA Game Studio :(

  • Panda3D. - полный движок игры с положительной обратной связью мне очень нравится идея иметь весь набор инструментов в одном пакете, он имеет хорошие отзывы как дружественный для начинающих движок ... если вы знаете Python. На стороне C++ у Panda3D почти несуществующая документация. У меня есть 0 опыт работы с Python, но я слышал это легко понять, и если это будет интересно и сложно, я думаю, что я выиграю от опыта в еще одном языке программирования.

Какой из них вы бы предложили, а не из-за расширенных функций или хорошей поддержки платформы, но в основном для развлечения, простого рабочего процесса и расширяемости, и поэтому я могу создавать и интегрировать все компоненты, которые мне нужны, - сервер с базой данных, AI-ботами и трехмерное клиентское приложение?

ответ

1

Если вам нравится python, есть привязки для Ogre. Выезд python-ogre. Я использовал его немного, и он казался достаточно стабильным, чтобы его можно было использовать. Однако вы столкнетесь с случайной ошибкой, поскольку пользовательская база не такая большая.

У меня больше опыта с простым C++ Ogre, которому мне очень нравится много. Я не думаю, что это сильно замедлит вас. Похоже, ваш проект может масштабироваться до довольно большого уровня, и для этого вам потребуется большая производительность. В этом случае C++ никогда не является плохим выбором.

В любом случае, как только двигатель будет завершен, это почти все о скриптах. И вы можете сделать это на высоком уровне, если хотите.

3

Я использовал только XNA, поэтому я не могу дать вам хорошее сравнение с другими. Я скажу, что в то время как XNA - всего лишь каркас, TorqueX 3D - это двигатель. Вы получаете доступ к бинарным файлам 2D и 3D TorqueX, когда подписываетесь на разработку XNA ($ 100/year).

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

Ваш опыт работы с C#, безусловно, пригодится. Вы должны будете придерживаться разработки Windows, потому что у вас не будет доступа к сетевому стеку (или базе данных) на Xbox 360.

Как только я работал с учебниками и привык к стилю Torque, я обнаружил, это будет очень забавно работать. Очень легко добавлять объекты/поведение. Поддержка звука была улучшена и сделана очень простой с некоторыми из последних релизов XNA. У этого есть хороший редактор для 2D, и я думаю, что 3D-редактор также достойный (на самом деле не пробовал), чтобы помочь вам начать создавать уровни. Я думаю, что в отделе сети/базы данных этого недостает, но вам придется использовать стандартный материал .NET или использовать другие библиотеки для работы.

Я думаю, что стоит потратить ваше время, чтобы взглянуть на него в любом случае и сравнить его с остальными. Я считаю, что вы можете скачать бесплатную пробную версию (30 дней), даже не подписавшись на XNA, если хотите поиграть с ней. Удачи!

2

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

с помощью InnoDB можно сделать таблицы что-то, как мой SQL, вероятно, выключен, но это дает идею:

create table `vertex` (
    `id` bigint(15) not null auto_increment, 
    `when` timestamp default now() not null, 
    `x` number not null, 
    `y` number not null, 
    `z` number not null, 
    `cR` number default 0.0 not null, 
    `cG` number default 0.0 not null, 
    `cB` number default 0.0 not null, 
    `cA` number default 1.0 not null, 
    `u` number default 0.5 not null, 
    `v` number default 0.5 not null 
) primary key (id) ENGINE=InnoDB; 

create table triangles (
    `p1` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `p2` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `p3` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `when` timestamp default now() not null 
) primary key (p1,p2,p3) ENGINE=InnoDB; 

идентификатор вершина идентификатор, когда временная метка позволяет сделать обновление патчей х, у, г является точка вершины 3d cR, cG, cB, cA - цвет вершины RGBA u, v - координата текстуры вершин p1, p2, p3 ссылаются на вершины в таблице вершин, образуя треугольники, как указано этими ссылками на внешние ключи. . InnoDB позволяет нам предотвращать неопределенные проблемы, связанные с вершиной (то есть: согласованность), поэтому может также использовать его. Если допустимо удалить все треугольники с удаленной вершиной в вашей ситуации, измените «ограничивать» на «каскад» (ограничивать ошибку, чтобы удалить вершину с треугольниками, которые ее используют)

Что касается алгоритма бот-меша, в основном вы реализуете LOD cull для ботов, которых нет в поле зрения. Многие двигатели уже могут сделать это за вас уже. Например, все сетки скинов/анимации бота могут быть сделаны дочерними элементами для внешнего объекта бота в Panda3D, и если внешний объект бота выведен из видимой области видимости, то ни один из этих детей не упоминается вообще.

+0

Спасибо, очень полезные идеи. – JustAMartin

Смежные вопросы