Вероятно IOS (если один человек согласится) И возможно от меня Android.
Так, расскажу чуть о дальнейшем развитии. Ветку 0.6 можно считать стабильной. Сейчас если и будут обновления - то только отлов багов. Я же потихоньку начинаю думать о следующей версии 0.7. В этой версии будет переписан весь скелет движка. Цель - сделать его более легким для изменения и для портирования на другие платформы.
Исходный код движкаи так в открытом доступе и до версии 1.0, так и будет. Потом скорее всего так и останется, а вот редактор игр который я начну делать с версии 1.0 - уже будет закрытым Мой блог Вики DirectX
А что на счет поддержки рендера Direct3D? Будит ли данная версия или останется OpenGl?
останется OpenGL, так как движок создается мультиплатформенным
Создаю фиче-лист для новой ветки:
Приложение • Класс создающий приложение и проводящий всю инициализацию • Создание в пользовательском окне • Возможность изменять размер в оконном режиме с учетом системной панели • Специальный режим компиляции в релизе для профилирования (то есть профайлер движка включающийся только в специальном режиме (на основе релиза!)) Ресурсы • Предотвращение загрузки одинаковых ресурсов. • Создание атласа из загруженных изображений • Создание копии изображения для работы с ним (например при пиксельном редактировании) • Все данные должны лежать в ресурс менеджере. Интерфейсы хранят только специальный id ресурса с которым и работают. О взаимосвязи (пример), интерфейс (к примеру Image) сообщает о требовании загрузить изображение. От него поступает имя файла. Далее запускается менеджер файловой системы для поиска данного файла (ищется как прямо на диске так и в архивах.). При нахождении такого файла, имя передается менеджеру ресурсов. Менеджер просматривает, не был ли такой файл загружен ранее, и в противном случае создает Bitmap. Затем пытается поместить его в атлас. • Неудаляемые ресурсы. Пользователь может решить, как работать с ресурсами. Обычно ресурсы, которые не используются, очищаются. Но пользователь может некоторым ресурсам поставить флаг неудаляемости. Данный ресурс всегда (то есть до завершения или физической очистки пользователем) будет содержаться в памяти. Эта возможность может пригодится, если приходится часто загружать и удалять одни и теже изображения Файловая система • Определение существования файла • Работа с архивами • Вывод имен файлов из папки. • Предзагрузка файлов. Желательно в отдельном потоке. Все предзагруженные ресурсы получают флаг «неудаляемый» в ресурс-менеджере. Также есть возможность получать в процентах количество загруженных (нужно для создания полосы загрузки или других индикаторов загрузки)
Рисование • Уменьшить число DIP за счет создания динамического атласа и группировки вертексов с одинаковой текстурой • Процесс рисования. Сначала подготовка (Begin) потом пользовательские команды и потом рисование (End). В подготовке стираются все данные, очищается экран. Затем данные вертексов заполняются, группируются. После чего все рисуется на экран. • Возможность включать VSYNC • Рендер в текстуру • Возможность глобально задавать режим альфа-смешивания. При отключении альфа используется из изображения. При включении альфа-смешивание у изображений игнорируется. Нужно например для быстрого переключения (например, при работе с частицами, когда надо выключить). Позволит экономить на ненужных командах в кадре. • Возможность задания гаммы • Геометрические фигуры (как минимум – линия, треугольник, прямоугольник и элипс). Возможность вывода их на экран. Работа с их логикой (например определение того находится ли указатель внутри круга, или столкновение двух треугольников) • Класс для работы с цветом • Задание, как реальных координат, так и относительных через специальную функцию, а также через свои методы • Фиксация пропорций. То есть, например экран 640 на 480, игрок увеличивает до 1024 на 768 - но картинка не должна увеличиваться - вместо этого должно больше вмещаться на экран • Специальный менеджер сцен, выкидывающий все за пределами экрана. Кроме того у него должна быть камера (?)
Изображение • Доступ к изображению на уровне пикселей • Создание чистого изображения • Загрузка из файла • Для файлов не поддерживающих альфа-канал, нужна возможность исключать цвет. Возможно, расширить фичу – и позволить откидывать сразу несколько цветов. • Рисование • Модификаторы (сдвиг, вращение, масштабирование, изменение размера) • Загрузка нескольких изображений (карты нормалей, карты освещений и т.д.), ориентировочно до 8. Также простое смешивание этих текстур. Кроме того обычное смешивание с использованием альфа • Наложение цвета и разные режимы прозрачности • Сделать массив изображений. То есть берем несколько изображений, делаем из них один объект и работаем уже с этим объектом. При этом доступ к изображениям остается (через указатели скорее всего). Для чего это нужно – например, делаем гонки с видом сверху, берем изображения дороги, делаем единый массив из них. И теперь можем вращать как угодно не ломая остальную часть движка и давая крутую фичу пользователю. Я думаю, массив будет сделан в виде минибатча – при инициализации собираем вертексы в специальный минибатч, и потом уже юзаем его объединяя с общим.
Анимация • возможность узнать, закончилось ли исполнение анимации • реверс анимации • запуск с любого кадра анимации • возможность загрузки из ини-файла • функция Draw рисует следующий кадр • сменить связь с Image (указатель не нужен) • Возможность создания атласа анимации • Создание анимации из одного изображения • Создание анимации из разных изображений • Установка скорости анимации • Шрифты • Возможность задавать цвет примерно так ^$red^красный ^$green^зеленый ^$0,0,255^синий. Получится – красный зеленый синий. • Три группы текста – bipmap, прегенерирующийся (то есть перед использованием даем текст, он из этого текста делает изображение и выводит его), ttf •
Кому не сложно подкиньте десяток идей что должно быть в 2D движке Мой блог Вики DirectX
А не поясните, как модификаторы для изображений собираетесь делать? Будь подобен лезвию бритвы: ярким, блестящим, отточенным, но холодным и не показывающим своего истинного цвета.
Я понял, что модификации, меня интересуют технические подробности - как именно это будет осуществлено. Если не секрет, конечно. Будь подобен лезвию бритвы: ярким, блестящим, отточенным, но холодным и не показывающим своего истинного цвета.
Ну как, я даже не знаю как ответить. Изображение это квад, масштабирование, вращение и движение делаются средствами OpenGl к этому кваду - все стандартно Мой блог Вики DirectX
Ага, понял. Просто мало ли, может Вы изобрели какой-нибудь свой алгоритм на этот счёт. Будь подобен лезвию бритвы: ярким, блестящим, отточенным, но холодным и не показывающим своего истинного цвета.
пока нет. Будет написан враппер http://astralax.ru/projects/particles/dev (для некомерческого бесплатно) Кроме того сделаю можно набить хардкорно самому)
А что на счет поддержки рендера Direct3D? Будит ли данная версия или останется OpenGl?
Сегодня было принято важное решение:) Описывать пока не буду - все равно на словах сложно объяснить. Но я отвяжу движок от OpenGL. Пользователь при желании сможет использовать любой GAPI написав свою обертку на низким уровнем. В документации я покажу как написать обертку под DirectX. Это позволит сделать движок мультиплатформенным за счет пользователя (то есть пользователь просто переделывает несколько команд полиморфируя их и юзает нужные ему платформы) Сам я просто не смогу одновремено поддерживать несколько платформ, так что на мой згляд это единственное решение в результате которого пользователь сможет сам выбирать нужные платформы, и при этом ему не нужно будет ковыряться в коде движка, или что-то там переписывать.
Ну и сегодня стал изучать box2d. Вот простенький код (может кому интересно)
#define FPS 60 /* библиотека box2d требует использования масштабирования, т.к. работает лишь с определённым диапазоном размеров в нашем случае 1 единице длины box2 будет соотв. 50 пикселей */ #define BOX2D_SCALE 32 #define FORCE 1000
b2Vec2 gravity(0.0, 15.0f); // устанавливаем вектор гравитации, учитываем направление координат - положительное направление вниз bool sleep = true;
b2World world(gravity); // создаём "мир" box2d
// пол b2BodyDef ground_body_def; // определение тела ground_body_def.position.Set(10.0f, 15.0f); // положение центра (320:480)
b2Body* ground_body = world.CreateBody(&ground_body_def); // создаём тело
b2PolygonShape ground_box; // создаём бокс (прямоугольник :)) ) ground_box.SetAsBox(10.0f, 0.5f); // размеры бокса (x2 каждой стороны) - 20x1 м (640 на 32 в пиксельном выражении) ground_body->CreateFixture(&ground_box, 1.0f); // накладываем связь на ground_body. второй параметр - плотность.
// левая граница b2BodyDef left_def; left_def.position.Set(0, 7.5f);
/// Динамическое тело b2BodyDef dynamic_body_def; dynamic_body_def.type = b2_dynamicBody; // ставим тип "динамическое", чтобы тело смогло отвечать на прилагаемые усилия dynamic_body_def.position.Set(5.0f, 1.0f); // устанавливаем позицию от нуля: 5 метров по горизонтали, 1 метр по вертикали (1 метр ~ 32 пикселя)
// вектор силы, прилагаемой к объекту b2Vec2 vec; vec.x = 0; vec.y = 0;
// точка приложения силы b2Vec2 world_point; world_point.x = 0; world_point.y = 0;
while (true) { Gfx_Clear();
vec.x *= FORCE; vec.y *= FORCE;
// dynamic_body->ApplyForce(vec, world_point); // для создания эффекта вращения вокруг своей оси dynamic_body->ApplyForce(vec, dynamic_body->GetPosition()); // обнуляем вектор силы, чтобы не провоцировать глюки vec.x = 0; vec.y = 0;
world.Step(time_step, velocity_iterations, position_iterations); // совершаем шаг физической симуляции b2Vec2 position = dynamic_body->GetPosition(); // получаем позицию объекта float32 angle = -1 * 180/3.14 * dynamic_body->GetAngle(); // получаем угол
пока даже не начинал, сейчас смотрю на совместимость с физикой (box2d), затем уже прикручу частицы
Добавлено (02.07.2012, 06:37) --------------------------------------------- Так, в ветке 0.6 есть один баг - Font не работает так как надо (то есть тупо не вывоится). Баг древний (я о нем знаю более 6 месяцев) и судя по тому что никто об нем не написал я могу оценить "популярность" моего движка
Вообщем если кому надо - скину фикс на быструю руку... Перекладывать движок не буду, так как сейчас идет работа над 0.7, а там полностью движок с нуля переписывается, кроме того мне не нравится текущая реализация шрифта - слишком тормозная... Поэтому фиксить 0.6 не вижу смысла - скоро будет публичная 0.7 а там все по другому работает.
Кста, 0.7 будет считаться официально рабочей и вполне функциональной для создания игр. Также я ее внесу в базу движков.
И как обычно - жду идей и предложений по движку.
p.s. физика (box2d) нормально взаимодействует с движком (собственно а почему бы и нет). Частицы пока не прикручивал, буду думать в 0.8-0.9 версии. Также попробую с 0.8 поприкручивать GUI
Движок не "умер" часом? Как обрабатываются столкновения в движке? Или Box2D просто будет идти в комплекте и "лепите как хотите"? Насчет GUI - могу помочь, пиши в ЛС ( Что-то типо такого ).
Сообщение отредактировал Demeron - Понедельник, 02 Июля 2012, 12:08
ак обрабатываются столкновения в движке? Или Box2D просто будет идти в комплекте и "лепите как хотите"?
пока так. потом будет встроено в движок
Quote (Demeron)
Насчет GUI
будет использоваться готовое (MyGUI к примеру)
Quote (Нохчи)
Нарывался на него, после чего двигло тихо отправилось в корзину ))
ну можно было здесь отписаться - через несколько часов я бы исправил... А так - мне шрифт был не нужен, отзывов я не увидел - поэтому и лень было исправлять. Баг возник просто - я оптимизировал вывод изображений через батч. Шрифты выводились отдельно по старому.. В результате изображения закрывали текст. И надеюсь от этой неудачи вы не будете предвзято относится к 0.7 версии - там полностью все с нуля пишется, постараюсь недопустить никаких явных багов Мой блог Вики DirectX
В то время как раз выбирал между GEGE, HGE и Sapphire, и подумал, ну... не работает.. ну и черт с ним, пойду остальные тестить. Я все так же жду системы частиц. Имхо, это намного важнее чем бокс2д и автору стоило бы обратить на это внимания. Многие вопросы по Windows отпадут, если посмотреть тут