Phantom3D

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Форум движка Xtreme3D / Свободный треп / Phantom3D

Страницы: 1 2 3 4 5 Next>> новая тема

Автор Сообщение

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 09-12-2009 18:34
После долгих лет изучения готовых движков, полугода изучения C++ и OpenGL, я наконец-то нашел в себе силы и желание писать собственный 3D-движок для GM!
Рабочее название - Phantom3D.
В качестве примера для подражания я, естественно, взял X3D. Основная архитектура и концепция будет такая же, как там.

Разработка пока находится на очень-очень ранней альфа-стадии (0.0.0.7). Пока это всего лишь скелет, основа, из которой можно лепить что угодно.

Что уже готово:
- Граф сцены с поддержкой иерархии
- Один примитив (полигон)
- Камера
- Основа системы материалов
- Я не удержался и уже ввел поддержку шейдеров (на ассемблере)
- Несколько функций для трансформации объектов.

Что планируется в ближайшем будущем:
- Побольше примитивов
- Текстуры

В приведенном архиве находятся откомпилированная тестовая версия библиотеки, пример использования в GM6, GM7 и С++, исходники (Dev-C++) и список функций.
Пример демонстрирует управление камерой от первого лица, использование материалов и шейдеров.

Цель данного релиза: тестирование, отлов багов, критика, пожелания.

Ссылка на скачивание:
Phantom3D_alpha_SDK.zip

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 09-12-2009 21:29
К сожалению, не работает. Пишет неизвестная ошибка.
А вообще давно пора было писать начать, надеюсь выйдет что-то не просто стоящее, а мега стоящее

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 10-12-2009 09:32
К сожалению, не работает. Пишет неизвестная ошибка.

Да, я это уже заметил. Шейдеры не работают, если запускать без Mesa. Но я это поправлю.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 10-12-2009 10:12
Попробуйте с этой версией библиотеки. Должно работать.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 11-12-2009 10:22
Да, работает. Багов не заметил, так как их особо замечать не из чего.
А, что делает шейдер? Меняет цвет?
А пишите его на связке C++ и OpenGL?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 11-12-2009 10:51
Да, использую C++ и OpenGL.
А шейдер меняет цвет на тот, который задается параметром (в данном случае сначала вершинная программа окрашивает вершины в красный, затем фрагментная - окрашивает пиксели в розовый). Это самый простейший вариант ассемблерного шейдера.
На ассемблере, правда, их писать не очень-то удобно, да и не рекомендуют, так как разные видеокарты могут выполнять этот код по разному. На некоторых (на старых ATI, например) вообще ARB_Vertex_Program и ARB_Fragment_Program не поддерживаются, там свои расширения и свой ассемблер. Поэтому я планирую добавить поддержку Cg.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 11-12-2009 22:56
Обновление до 0.0.0.10.
Ссылка та же.

Что нового:
- Текстуры. Благодаря библиотеке DevIL, поддерживается большое количество форматов, включая JPG, TGA, BMP, PNG, TIF, DDS, PSD и PCX
- Исправлен недочет: объект Triangle переименован в Quad, так как это не треугольник, а квадрат.

Что дальше:
- Примитивы
- Новые опции для материалов
- Новые функции для объектов
- Модели.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 12-12-2009 10:34
Да, классно. Посмотрел исходные коды, голова закружилась
Проект однозначно перспективный, главное сделать его не хуже GMOgre иначе не выдержит конкуренции Phantom3D, хотя у него и сейчас есть огромный плюс - русскоязычный разработчик
Я надеюсь потом вы интегрируете все в одну библиотеку, дабы удобнее было.
Надеюсь список поддерживаемых форматов моделей будет огромным.
Пока смотреть особо не чего, но вижу что это стоило приличных усилий. Удачи в разработке!
Если что я буду среди первых пользователей Phantom3D, если конечно вы его закончите в ближайшем будущем.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 12-12-2009 14:01
главное сделать его не хуже GMOgre иначе не выдержит конкуренции

Ну, конкурировать с GMOgre будет тяжеловато - все-таки, известный, состоявшийся движок, над которым поработал не один человек... Но я попробую!

Я надеюсь потом вы интегрируете все в одну библиотеку, дабы удобнее было.

А это обязательно? Просто я задумал сделать движок как можно более модульным, чтобы можно было по своему усмотрению использовать/не использовать отдельные функции. Например, в X3D если не нужна физика, ODE можно не включать в проект. А тут так будет не только с физикой, но и с изображениями, моделями и т.д. Нужны текстуры - включаешь DevIL, не нужны - не включаешь. Разве это не преимущество?
Сам движок - это как бы графическое ядро, содержащее только самое необходимое. А за все взаимодействия с внешними данными пускай отвечают дополнительные модули.
За счет этого ядро будет очень минималистичным и быстрым. Будет быстрее загружаться и содержать меньше багов. Это очень привлекательная архитектура, ее используют такие фундаментальные системы, как UNIX, BSD и др.

Надеюсь список поддерживаемых форматов моделей будет огромным.

Я бы сказал так: он будет неограниченным, потому что я планирую возможность писать собственные загрузчики моделей.

Пока смотреть особо не чего, но вижу что это стоило приличных усилий.

Это стоило нескольких месяцев предварительной работы по проектированию и подготовке всех необходимых классов. Зато теперь все должно пойти как по маслу :)

Удачи в разработке!

Спасибо!


Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 13-12-2009 11:17
Просто я задумал сделать движок как можно более модульным, чтобы можно было по своему усмотрению использовать/не использовать отдельные функции. Например, в X3D если не нужна физика, ODE можно не включать в проект. А тут так будет не только с физикой, но и с изображениями, моделями и т.д.

Не спорю, идея хорошая, но сколько будет этих самых библиотек? 2? 5? 10? тогда - это будет казаться уже хаосом. Просто я думаю, что, например, модели и текстуры, можно было включить в основную, так как сомневаюсь, что кто-то не будет использовать их в своей игре. А вот шейдеры, физика, звук...можно отдельно.
Сам движок - это как бы графическое ядро, содержащее только самое необходимое. А за все взаимодействия с внешними данными пускай отвечают дополнительные модули.
За счет этого ядро будет очень минималистичным и быстрым. Будет быстрее загружаться и содержать меньше багов. Это очень привлекательная архитектура, ее используют такие фундаментальные системы, как UNIX, BSD и др.

Это интересно, нечто подобное - это Ogre для C++. Пожалуй так оно даже лучше.
И еще, пожалуйста, сделайте нормальные тени! Вот например в том же GMOgre мне понравились схемы реализации их. Есть несколько видов, соответственно качество разное, скажем так под определенные нужды сделано. В далеке похуже можно тени сделать, тут вблизи лучше, плюс тени могут ложится на сам объект, который их отбрасывает, то есть , например, возьмем модель узла... тень от него(при определенных настройках) будет ложится не только на землю, но и на те части узла, на которых она должна быть, причем это все просчитывается автоматически и не особо жрет fps. Так же присутствует отрисовка теней в рамках определенного диапазона выставленного для камеры. Так, что я надеюсь, что вы над ними поработаете
Я бы сказал так: он будет неограниченным, потому что я планирую возможность писать собственные загрузчики моделей.

А можно по-подробнее?

Самый нубский нуб
Группа: Участники
Сообщений: 37
Добавлено: 13-12-2009 12:28
Задумка Здоровская!
Пс про движок
Необходимо добавить СКЕЛЕТНУЮ АНИМАЦИЮ.

А также создать типо какойнить свой собственный редактор карт.(это уже потом)

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

Пример.
Start.
Create Player in 15.80 (данные от балды)
Set player model "game/player/I.smd"
Set Player animations "run" "game/player/run.smd"
Set Player animations "shoot" "game/player/shoot.smd"
set_thirdperson 1
Set_the wolrd model "/map/hell.bsp"
итд...

как вам идея?


Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 13-12-2009 13:23
Необходимо добавить СКЕЛЕТНУЮ АНИМАЦИЮ.
А также создать типо какойнить свой собственный редактор карт.(это уже потом)

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


Start.
Create Player in 15.80 (данные от балды)
Set player model "game/player/I.smd"
Set Player animations "run" "game/player/run.smd"
Set Player animations "shoot" "game/player/shoot.smd"
set_thirdperson 1
Set_the wolrd model "/map/hell.bsp"

Синтаксис какой-то не гейммейкеровский. И даже не в стиле С. Похоже больше на Basic.
Зачем все опускать до такого примитивного уровня? А если программеру не нужно встроенное set_thirdperson, и он хочет написать свое? То же самое - Set_the wolrd model? Что такое в этом случае world? По каким алгоритмам рассчитывать столкновение с ним? А если, опять-таки, встроенная проверка столкновений программеру не нужна?
Я не буду двигаться в сторону упрощения. Эта простота - громадный недостаток всех движков для GM. Нужно обеспечить программиста базовыми инструментами для написания сложных вещей, а не впихивать ему примитивные интерфейсы к готовым встроенным алгоритмам.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 13-12-2009 13:36
И еще, пожалуйста, сделайте нормальные тени!Вот например в том же GMOgre мне понравились схемы реализации их. Есть несколько видов, соответственно качество разное, скажем так под определенные нужды сделано. В далеке похуже можно тени сделать, тут вблизи лучше, плюс тени могут ложится на сам объект, который их отбрасывает, то есть , например, возьмем модель узла... тень от него(при определенных настройках) будет ложится не только на землю, но и на те части узла, на которых она должна быть, причем это все просчитывается автоматически и не особо жрет fps. Так же присутствует отрисовка теней в рамках определенного диапазона выставленного для камеры. Так, что я надеюсь, что вы над ними поработаете

О тенях пока рано думать... Но на будущее учту.

А можно по-подробнее?

Будет возможность создавать массив (или буфер вершин), куда заносятся данные о вершинах модели, как в стандартном d3d GM. Например, так:

model = VertexBufferBegin();
VertexBufferAddVertex(model,pos_x,pos_y,pos_z,nor_x,nor_y,nor_z,tex_u,tex_v);
VertexBufferEnd(model);

Или так:

model = ModelCreate();
v_array = VertexArrayCreate(size);
VertexArrayAddVertex(v_array,pos_x,pos_y,pos_z,nor_x,nor_y,nor_z,tex_u,tex_v);
ModelSetVertexArray(model,v_array);

Но это пока только планы.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 13-12-2009 18:21
Будет возможность создавать массив (или буфер вершин), куда заносятся данные о вершинах модели, как в стандартном d3d GM. Например, так:
model = VertexBufferBegin();
VertexBufferAddVertex(model,pos_x,pos_y,pos_z,nor_x,nor_y,nor_z,tex_u,tex_v);
VertexBufferEnd(model);

То есть, можно будет таким путем грузить любую модель?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 13-12-2009 18:41
В принципе, да, если удастся прочитать данные из файла. Предполагается, что программист будет использовать эту возможность для загрузки моделей собственного формата.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 13-12-2009 18:50
Заманчиво, но как быть в таком случае с анимацией? Или в таком случае о ней и речи быть не может?
P.S Мне вот интересно, каким образом пишут собственный формат, может у вас есть ссылка на соответствующую тему?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 13-12-2009 18:56
Поддержка анимации в таком случае - вещь из разряда инноваций. Но кто знает, может получится что-нибудь придумать. Например, загружать подряд несколько статичных моделей и интерполировать между ними - получится вертексная анимация. Со скелетной сложнее, но тоже есть способы.

А собственный формат пишут на бумаге (имею в виду спецификацию), а потом создают плагин-экспортер для 3DSMax/Maya/Blender и т.д.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 13-12-2009 19:13
Обновление до 0.0.0.12.
Ссылка та же.

Что нового:
- Движок теперь может работать и без DevIL.dll
- Добавлена функция DevILInit()
- Функция TextureCreate() переименована в DevILTextureCreate()
- При загрузке текстур генерируются mip-карты
- Добавлена функция ILUInit()
- Добавлена функция ILUTextureCreateFilter(), которая загружает
текстуру и пропускает ее через фильтр.
Поддерживаются следующие фильтры:
- Gaussian Blur (размытие по Гауссу)
- Negative (инвертация цветов)
- Emboss (рельеф)
- Alien (эффект "Чужой")
- Pixelize (пикселизация - "мозаика")
- AvgBlur (размытие)
- Edge Detect E (выделение края - Лаплас)
- Edge Detect P (выделение края - Превитт)
- Edge Detect S (выделение края - Собел)
- Sharpen (резкость)
- Mirror (зеркальное отображение по горизонтали)
Функция требует ILU.dll

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 13-12-2009 21:29
А как вы считаете версии 0.0.0.7 сначала, потом 0.0.0.10 и 0.0.0.12 ? Где логика?
А так , неплохо. Эффекты нужны и, что самое интересное, для отдельных текстур можно применять. Что же будет дальше?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 14-12-2009 19:02
Согласно общепринятому стандарту нумерации версий, первая цифра означает основную версию, вторая - подверсию, третья - номер релиза, четвертая - номер сборки. Так что 0.0.0.7 означает седьмую сборку нулевого релиза нулевой версии. Были и 0.0.0.8, и 0.0.0.9, и 0.0.0.11 - соответственно, восьмая и девятая промежуточные сборки, которые я не счел нужным выкладывать.


Страницы: 1 2 3 4 5 Next>> новая тема
Раздел: 
Форум движка Xtreme3D / Свободный треп / Phantom3D

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU