www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Пишем 3D движок - замену Xors3D (http://forum.boolean.name/showthread.php?t=18971)

bugway 25.02.2014 02:36

Пишем 3D движок - замену Xors3D
 
Вложений: 1
Для создания 3D движка (альтернатива устаревающему движку Xors3D) собирается команда энтузиастов.

Цели проекта:

+ Сделать движок не хуже Xors3D
+ Получить опыт в разработке
+ НЕ убийца КРИЗИСА и Unity !!!
+ Реализовать некоторые интересные идеи

Фичи проекта:

+ Платформа только РС
+ Движок в виде внешней DLL
+ Поддержка 3D Vision и Oculus Rift
+ Поддержка терраморфинга
+ Большие ландшафты
+ Наличие удобного редактора

Что есть на текущий момент:

+ Исходники на PowerBasic 10
+ Репозитрий GIT на bitbucket.org
+ Несколько демок (очень примитивных, чтобы выкладывать тут)
+ Материалы, примеры, гайды и. т.п. (как использовать lua.dll и.т.п.)

Движок (точнее его зачатки :) ) уже может:

+ Инициализировать DX9
+ Устанавливать видеорежим
+ Рендерить сцену
+ Реализованы некоторые примитивы: кубы, плоскости, треугольники.
+ VBO. Реализована загрузка моделей формата OBJ
+ Работа с камерой
+ Есть зачатки редактора мира на Xors3D - можно портировать на чистый DirectX

Лог разработки:


06.03.2014

- Исправлена глупая ошибка при стерео рендере - использовалась программная обработка вершин...
- Начальные эксперименты с шейдерами - загрузка, компиляция, установка.

04.03.2014

- Написан с нуля модуль для работы с HID-устройствами. Работает поиск трекера Oculus Rift на шине USB.

03.03.2014

- Портирован исходник для работы с видеокартами NVidia (nvapi.dll)



Скрины и демки:




Одна из первых демок:

Вложение 20195



Кто требуется в первую очередь:

- Человек, имеющий опыт в работе с шейдерами.
- Человек, имеющий опыт работы с физическими движками

а также все заинтересованные.

UPD: Нужность и целесообразность обсуждаем тут

Пара скринов с репозитория:



Пример кода (метод загрузки модели формата OBJ, выдранный из класса):

Код:

'===============================================================================================================================
METHOD xLoadMeshFromOBJ(File AS STRING)
    DIM buf AS STRING, FN AS LONG, FC AS LONG
    DIM tc AS LONG, vc AS LONG, P(4) AS STRING, v() AS vertexType, vtu() AS SINGLE, vtv() AS SINGLE
    DIM z(4) AS WORD, zp(4) AS STRING
    IF ISFILE(File) THEN 'если файл найден
        FN = FREEFILE
        OPEN File FOR INPUT AS FN
        WHILE NOT EOF(FN)
            LINE INPUT #FN,buf
            INCR FC
            IF MID$(TRIM$(buf),1,1)<>"#" THEN
                PARSE buf, p(), " "    'парсим строку в массив P()
                SELECT CASE p(0)
                    CASE "mtllib":      'файл с материалами          'пока не нужно
                    CASE "o":          'новый подмеш (набор) subset  'если текстурный атлас - субмеши не нужны
                    CASE "v":          'координаты вертекса
                        REDIM PRESERVE v(vc)
                        v(vc).x=CSNG(VAL(p(1)))  :  v(vc).y=CSNG(VAL(p(2)))  :  v(vc).z=-CSNG(VAL(p(3)))
                        INCR vc
                    CASE "vt":          'координаты текстуры
                        REDIM PRESERVE vtu(tc), vtv(tc)
                        vtu(tc)=CSNG(VAL(P(1)))  :    vtv(tc)=1-CSNG(VAL(P(2)))
                        INCR tc
                    CASE "vn":          'нормали - пока не нужны
                    CASE "f":          'индексы стрипов или треугольников (делаем только треугольники!)
                        PARSE P(1), ZP(), "/"
                        Z(0)=CWRD(VAL(ZP(0))):  Z(1)=CWRD(VAL(ZP(1))):  Z(2)=CWRD(VAL(ZP(2))) ' (Z(0)-1)  - индекс вертекса
                        me.AddVertex (v(Z(0)-1).x, v(Z(0)-1).y, v(Z(0)-1).z, vtu(Z(1)-1), vtv(Z(1)-1))

                        PARSE P(2), ZP(), "/"
                        Z(0)=CWRD(VAL(ZP(0))):  Z(1)=CWRD(VAL(ZP(1))):  Z(2)=CWRD(VAL(ZP(2))) ' (Z(0)-1)  - индекс вертекса
                        me.AddVertex (v(Z(0)-1).x, v(Z(0)-1).y, v(Z(0)-1).z, vtu(Z(1)-1), vtv(Z(1)-1))

                            PARSE P(3), ZP(), "/"
                            Z(0)=CWRD(VAL(ZP(0))):  Z(1)=CWRD(VAL(ZP(1))):  Z(2)=CWRD(VAL(ZP(2))) ' (Z(0)-1)  - индекс вертекса
                            me.AddVertex (v(Z(0)-1).x, v(Z(0)-1).y, v(Z(0)-1).z, vtu(Z(1)-1), vtv(Z(1)-1))

                END SELECT
            END IF
        WEND
        CLOSE FN
        IF FC<5 THEN MSGBOX "Incorrect file - please convert it with MilkShape! (or convert from UNIX format!)"
    ELSE 'файл не найден
        MSGBOX "File not found:  " & file
    END IF
END METHOD


Как видите - очень простой пример процедуры загрузки формата OBJ...

Randomize 25.02.2014 03:20

Ответ: Пишем 3D движок - замену Xors3D
 
Скрины? Прмеры кода? Бенчмарки?

Harter 25.02.2014 04:57

Ответ: Пишем 3D движок - замену Xors3D
 
Отличный ник! Хорошо бы смотрелся в качестве названия какой-нибудь аутсорс-студии.
"BugWay - we provide only high quality bugs!"
"BugWay - try to deBug!"
...
:)

bugway 25.02.2014 05:39

Ответ: Пишем 3D движок - замену Xors3D
 
Скрины еще посмотрю, может что более привлекательное найдется... Кто что может сказать по поводу задумки?

Судя по обсуждениям только одного форума о Xors3d - все хотят продолжения поддержки движка, т.к. он очень простой. Но до сих пор НИКТО не предложил сделать аналогичный движок.

Выкладывать скрины думаю вообще не особо целесообразно, ведь пишется именно движок, а не контент для него... Что можно оценить по скриншоту? Для оценки движка нужно какое-то время с ним поработать, понять его структуру, оценить удобство и функциональность. На текущем этапе в плане моего движка это сделать нельзя до завершения хотя бы основных функций....

pax 25.02.2014 06:58

Ответ: Пишем 3D движок - замену Xors3D
 
А почему бейсик? Ксорс же на С++ под любой язык подключается... Имхо вы хотите написать новый Blitz3d, а не Ксорс...

L.D.M.T. 25.02.2014 07:14

Ответ: Пишем 3D движок - замену Xors3D
 
DIM z(4) AS WORD, zp(4) AS STRING - я щитаю лишнее, будет проще указывать DIM z#(4), dim zp$(4)

Samodelkin 25.02.2014 07:17

Ответ: Пишем 3D движок - замену Xors3D
 
И чем он новее если опять dx9?

Кстати Knightmare вроде собирался что то делать только не для блица. Есть инфа?

bugway 25.02.2014 07:35

Ответ: Пишем 3D движок - замену Xors3D
 
Цитата:

Сообщение от pax (Сообщение 275295)
А почему бейсик? Ксорс же на С++ под любой язык подключается... Имхо вы хотите написать новый Blitz3d, а не Ксорс...

Нет. Задачи написать новый блиц желания нет. Цель - сделать движок с рендером DX9/10/11 с продуманной архитектурой и совместимый со всем, с чем только можно. Блиц, си, VB6, PowerBasic, PureBasic, FreePascal и т.п. К тому же с редактором мира.

Выбор языка PowerBasic 10 обусловлен следующим:

+ Простой синтаксис языка
+ Мощь и возможности Си (+ есть встроенный ассемблер, 17 типов данных!!!)
+ Чисто нативный код без виртуальных машин
+ Поддержка классов, COM, и.т.п.
+ самое главное: есть готовые заголовочные файлы для ВСЕГО WIN32API!!! Включая DX9/10/11!!!

Т.е. на выходе будет DLL или несколько, которые можно использовать практически в любом языке.

bugway 25.02.2014 07:39

Ответ: Пишем 3D движок - замену Xors3D
 
Цитата:

Сообщение от L.D.M.T. (Сообщение 275299)
DIM z(4) AS WORD, zp(4) AS STRING - я щитаю лишнее, будет проще указывать DIM z#(4), dim zp$(4)

Код набран на скорую руку, но вообще суффиксы обещали исключить в следующих версиях компилятора...

Mr_F_ 25.02.2014 08:04

Ответ: Пишем 3D движок - замену Xors3D
 
Цитата:

PowerBasic 10
ну это несерьёзно как-то.

DStalk 25.02.2014 08:14

Ответ: Пишем 3D движок - замену Xors3D
 
Несерьезно - это лепить виртуальную машину на android и пихать это дело в мобилки с многоядерными процами.
А PowerBasic для данной задачи я думаю вполне подходит...

jimon 25.02.2014 10:06

Ответ: Пишем 3D движок - замену Xors3D
 
Запилите мне версию под Mac, Ubuntu\Debian, FreeBSD, iOS, Android, WP8

MadMedic 25.02.2014 11:13

Re: Пишем 3D движок - замену Xors3D
 
Да, действительно, надо мультитаргетенджин.
Виндовс, Андроед, Айёос, HTML5 или WebGL и опционально, но желательно Линух и Мак

HolyDel 25.02.2014 13:09

Ответ: Пишем 3D движок - замену Xors3D
 
как подключить к пурику библиотеки?
всякие там фритайпы да злибы.
плюсы выбирают не из-за языка, а потомучто к ним библиотек немерено.

ну а вообще да, я бы бенчмарки бы посмотрел.

bugway 25.02.2014 14:31

Ответ: Re: Пишем 3D движок - замену Xors3D
 
Цитата:

Сообщение от MadMedic (Сообщение 275315)
Да, действительно, надо мультитаргетенджин.
Виндовс, Андроед, Айёос, HTML5 или WebGL и опционально, но желательно Линух и Мак

Думаю если человек реально собрался выпускать игру на всех платформах - ему НЕ НУЖЕН движок уровня Xors3D, т.к. это уже совсем другой уровень. Скажите честно - кто-нибудь сделал на Xors3d убийственный коммерческий проект? Я думаю ответ очевиден.

Задача сделать движок, в основном, для начинающих игрописателей. Таким движком был Xors3D. Таким будет и мой движок. Только добавятся более современные фичи.

Я реально оцениваю свои силы и возможности и говорю сразу - "Убийцы Unity" не будет. Но должен получится (если мы сообща приложим усилия) вполне приемлемый по качеству движок.

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

Для меня же ценен сам опыт работы в команде, изучение чего-то нового , создание чего-то своими руками и т.п.

Если есть энтузиасты, готовые полученный код портировать на PureBasic, который поддерживает Linux и Mac - нет проблем!

Хотя чем и интересен именно PowerBasic - он позволяет делать все тоже самое, что и на Си - только намного проще и код намного более читабельный и понятный. Не думаю, что кто-то будет иметь желание ковыряться в чужом коде Си. Особенно Си++.

Если все-таки не сойдемся в выборе инструмента - можно писать алгоритмы на псевдоязыке и переводить на свой любимый язык или платформу. Но согласитесь, задача не завоевать рынок, не убить Юнити - мы сделаем удобную и нужную обвертку под графическое АПИ в первую очередь для себя, для воплощения своих творческих идей. Мне кажется - что это было стержнем у Xors3D.

От сообщества поклонников Xors3D требуется список фич, которых не хватало в Xors3D. Например мне не хватало функций для работы с ландшафтом, были глюки с LODом и дыры в ландшафте. И много чего еще. Так давайте вместе это дело исправим?


Часовой пояс GMT +1, время: 00:17.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot