Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » API для графического движка | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 2
На страницу: 1, 2  След. | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «API для графического движка»
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Вот, например, есть графический движок - вы ничего не знаете про OpenGL DirectX и вообще графику. Ваша задача - писать игру.

Какой для вас будет самый удобный интерфейс, для использования графического движка? Опишите как можно подробнее, пожалуйста.
_________________
MOV topka, C++
    Добавлено: 18:37 09-08-2006   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
самый удобный?

гы, WYSIWYG канешна, када сцены ляпаются драг-н-дропом в редакторе, и потом подписываются какие-то мои функции на триггер Хы...

а потом недоумённо спрашиваем, почему такие игры получаются Ой, не могу!..
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 18:59 09-08-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Sh.Tac. :
а потом недоумённо спрашиваем, почему такие игры получаются

Ну это зависит от программиста, который игру пишет Подмигиваю

Ну хорошо перефразирую, не "самый удобный" а самый лучший. (Понимайте как хотите, но за слова больше не цепляйтесь Ой, не могу!..)
_________________
MOV topka, C++
    Добавлено: 19:40 09-08-2006   
himem
 210 EGP


Репутация: 24
Сообщения: 343
Откуда: Дзержинск- Нижегородский
Зарегистрирован: 24.01.2004
Имхо чтоб удобно было - нуна создать скрипт язык, из которого интерпретатор буит управлять движком... тока как это буит тормозить и скока времени займет изучение этого языка для написания скриптов (см IW2)
PS И есть опасность что кому то не хватит всех команд - а делать его расширяемым...
_________________
-Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно!
    Добавлено: 08:56 10-08-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Ну не совсем.. Я имею ввиду при написании самой игры! Т.е. когла пишут код на каком либо языке программирования - не скриптах (все на скриптах не написать).

Т.е. банальная загрузка какой-либо текстуры и/или модели.

Напишите хотяб псевдокодом.(Потому что надо решать это срочно)
_________________
MOV topka, C++
    Добавлено: 13:13 10-08-2006   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
обычно API предлагает разработчик, в случае, если интерфейсы неудобные, количество желающих воспользоваться библиотекой стремится к нулю, больше тут никто ничего не скажет

кста, библиотека будет опен-сорс или нет?
если закрытой, то сама даже постановка вопроса неправомочна
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 14:14 10-08-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Sh.Tac. :
обычно API предлагает разработчик, в случае, если интерфейсы неудобные..

ДЫк, а нафик я эту тему открыл? Я ж и хочу сделать чтоб был нормальный интерфейс, у вас собсно, появилась возможность самим придумать АПИ.

Насчет библтотеки - то она уже частично опен - сорс. Улыбка
http://www.elite-games.ru/art/program/jurlessindex.shtml
_________________
MOV topka, C++
    Добавлено: 14:21 10-08-2006   
Pavlon
 80 EGP


Репутация: 15
Сообщения: 107
Откуда: Киев
Зарегистрирован: 18.06.2006
Хм, однако это очень сложный вопрос Совсем запутался...

Слушай, а нипиши, что за игра хоть намечается, 3Д косомсим?
Если так, то... не знаю Расстроен

Ну можно например как в ГЛ, только на шаг выше. (это, я ГЛ не знаю поэтому не бейте больно)

1. Работа с моделями, имхо, без неё нкуда.
- Загрузить модель
- Загрузить текстуру для модели
...
- Загрузить/Выгрузить/Сдампить/Ещё чего-нибудть саму модель и/или все рюшечки к ней.
- Включить/Выключить все опции модели. (ну там бамп, фильтрацию и ещё чего-то)
- "Поставить" модель на сцену (координаты и повороты передаются)

2. Работа с большими объектами (как то планеты, звёзды...)
- Нарисовать объект
- Включить/Выключить опции объекта (сам не знаю что тут может быть)

3. Работа с ландшавтом (это ежели над планетой летать)
- Ввести координаты, где ты находишься на планете
- Не забываем про опции (например дальность горизонта)
- Ещё можно ввести, что-то вроде способа детализации микрорельефа:
1. При помощи заготовленных текстур микрорельефа (тогда нужно вводить ещё, когда начинать их использовать, т.е. на какой дальности от ландшавта, чтоб переход не заметен был). Ещё Проблема швов: а) все текстуры сделаны так, что швов нет (так вроде хочет делать Кладов, у которого я и спёр идею текстур микрорельефа) б) Спец процедурка "шлифовки" швов, их может быть несколько, какая работает - определяет соответствующая опция.
2. Чистый рандом. Тогда вводится тип ландшавта (можно брать из глобальной текстуры) и начальное число, от которого пляшет рандом.
- Ещё наверное нужна процедура формирования глобальной(ых) текстуры/текстур для планет, которые полностью рандомные.
- Туманность атмосферы и её цвет.

3. Работа с рендером/сценой
- Включать/выключать вскяки рюшечки (типа стенсил теней)
- Установка силы и направления глобального освещения (от звезды).
- Механизм расчёта видимых/невидимых обектов/треугольников. (может расчёт видимых/невидимых объектов выполняет общая глобальная функция, а триугольниками занимается каждый отдельно взяты объект)
- Конечно, нарисовать сцену.

4. Работа с артефактами
- Установить/убрать конкретный артефакт для конкретного объекта
(например передаётся номер артефакта и номер объекта. Или вызывается метод SetArtefact(int ArtefactNumber) нужного тебе объекта)
Отрисовка артефакта производится при отрисовке объекта. Хотя можно и вообще отдельно рисовать артефакты, как самостоятельные объекты. А функци просто вычисляет, к примеру, по планетарным координатам глобальные координаты и разворот города.

5. Всё остальное Улыбка Ну там АИ, Физика...

Конечно эта схема далека от совершенства, и даже есть подозрение, что вообще не работает Подозрение.
Например, отсечение невидимых треугольников можно делать опционально для каждого объекта (типа вкл/выкл). Ещё фрустум распил треугольников тоже можно опциональным сделать (тоже вкл/выкл).

Ну вот. Предлагаю дорабатывать эту схему кто чем хочет. Чтоб в итоге получить нормальное АПИ.

Кстати, АПИ это предлагается делать объектным или процедурным?
    Добавлено: 14:55 10-08-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Ок. Ща я опишу что есть. А есть у нас объектно ориентированный графический движок.

Есть архитектура Игровых объектов:
--------------------------
JLSceneObj - основной тип-родитель. Вообще абстрактный класс.
-IdName:string; (ну, уникальное имя - по нему объект можно найти)
-Trans,locTrans:JLTransformation; (JLTransformation - класс, в котором описывается трансформация. В данный момент это - позиция+матрица поворота)
-Static:boolean; (Статичен ли объект по отношению к камере)

-disToCam:single; (Расстояние до камеры)

-Parent:string; (IdName родителя - для модульной системы, т.е. можно привязать к какому-то объекту, например, радар вращающийся к крейсеру)
-countChild:integer; (кол-во детей)
-Children:array of string; (массив детей)

procedure Render; virtual; abstract;
procedure Update; virtual;
procedure LoadFromFile(var f:file); virtual; abstract;
procedure SaveToFile(var f:file); virtual; abstract;

procedure Assign(a:JLSceneObj); virtual;

procedure AddChild(a:JLSceneObj);
procedure AddStrChild(s:string);
function GetIndxChild(Id:string):integer;
procedure DelChild(i:integer);
procedure ClearChild;

procedure AssignChild(a:JLSceneObj);

--------------------------

От этого основного типа наследуются следующие типы (описывать не буду подробно - если надо - в приват):
-Камера
-Геометрия
-Спрайт
-Система частиц
-Источник света

Есть класс-контейнер, который хранит это дело. Поскольку у меня все классы наследники одного объекта, то я использую метаклассы( JLMetaObj=class of JLSceneObj ).
У этого класса есть
FData: array of JLSceneObj;

и через процедуру AddObj я добавляю любой объект в массив

procedure JLObjArray.AddObj(O:JLSceneObj);
var me:JLMetaObj;
s:string;
begin
s:=GetUniqId(o.IdName);

Count:=Count+1;
me:=JLMetaObj(O.ClassType);
if me<>JLParSystem then Fdata[count-1]:=me.Create;
Fdata[count-1].Assign(O);
Fdata[count-1].IdName:=s;

SetChanged;
end;

Кроме того есть такие классы (не наследники JLSceneObj, а вобще отдельные), как
-JLMesh (информация о геомерии - вершины, нормали, тангенс, бинормаль, текс. координаты - имеет IdName)
-JLTexture (загружает из файла и обрабатывает в GL текстуру - имеет IdName)
-JLShader (загружает шейдер из файла, компилит и управляет инфой о шейдере - имеет IdName)

-JLMaterial - массив на 10 текстур (пока хватит Улыбка ), имя шейдера и настройки поверхности (Color/Ambient/Diffuse/Specular и т.д.)

-JLBoundingObj и JLBoundingVolume(как бы массив JLBoundingObj) - это для проверки столкновений
-JLLensFlare - для спрайтов. Свечение линз


Ну там консоль, команды консоли, обертка над 2д графикой, там текст, меню и т.п. (меню пока не сильно)

Всё.. Выдал.. Улыбка А теперь расскажите что не так, я не знаком с другими движками, чтоб сравнивать.
_________________
MOV topka, C++
    Добавлено: 15:26 10-08-2006   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
ну так а кто мешает ознакомиться с другими движками? Подозрение.

вот к примеру, изделие, на которое один человек угробил четыре года, API достаточно хорошо структурировано, хотя в части гуи пользоваться не очень удобно
http://irrlicht.sourceforge.net/docu/hierarchy.html

меня, например, када я писал прототип движка, пёрло от идеи мастеров и подмастерьев, что типа подмастерье умеет что-то рисовать, планеты там, скайбоксы, неважно что, но что-то одно, а мастер умеет обрабатывать ввод пользователя и наносить, что называется "последние штрихи" на картину, созданную бригадой подмастерьев

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

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

Как разработчик двигла, ты можешь навязать какую-угодно идеологию работы, метафору, главное чтобы это было проведено железной рукой, без дрожи Улыбка
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 16:17 10-08-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Вот пример, как я использую граф. движок в игре:

структура аналогична граф.движку:
основной класс-родитель для всех игровых классов

GameObj=class
engUnit:string; (IdName объекта в граф.движке)
IdName:string; (уникальное имя для идентификации)

OnCreate,
OnDead,
OnMove,
OnUpdate,
OnAssign:GameEvent; (события, для расширения возможностей - например, чтоб вынести их в ДЛЛ)


// ActiveScript:PGameScript; (ну тут я хотел скрипты забацать, но забил)

constructor Create; virtual;
destructor Destroy; override;

procedure Update; virtual;
procedure Assign(a:GameObj); virtual;

// procedure ScriptUse(nam:string);
// procedure ScriptSetUp;

function GetGlobalPos:TDotVector3; (возвращает координаты в мире = GetEngUnit.trans.pos)
function GetEngUnit:JLSceneObj; (возвращает объект из граф.движка под именем engUnit)
end;
PGameObj=^GameObj;


тип "корабль", например.

GameShip=class(GameObj)

autoPilot:boolean;

MaxShield,
Shield,Hull:single;


Inertial:integer; /// масса

MaxTra, /// макс скорость
MaxRot, /// макс маневренность

ImpTra, /// импульс скорости
ImpRot, /// импульс поворота текущий

Speed, /// скорость
SpeedAim:TDotVector3; /// целевая скорость (для инерции нада)


rocReady:single; (когда можнол ракетой пусить)

Engines:array [0..Game_Max_Engine-1] of string;
EngiSpr:array [0..Game_Max_Engine-1] of string;
Weapons:array [0..Game_Max_Weapon-1] of GameWeap;


OnMove:GameEvent;
OnDamage:GameDamageEvent;
OnFire:GameFireEvent;
OnRocketUse:GameRockEvent;

Tag:integer;


constructor Create; override;

procedure Damage(sh,hul:single);

procedure Update; override;
procedure Assign(a:GameObj); override;

procedure Move(rot,tra:TDotVector3;const trPar:PJLTransformation = nil);


procedure LookAt(const pLook:TDotVector3;const trPar:PJLTransformation = nil);
function MoveTo(const pMove:TDotVector3; const range:single=10):boolean;
procedure Fire;
procedure RocketUse(aim:GameObj);

end;
PGameShip=^GameShip;

Вот.. Пока стека команд нету.. Скоро будет.

Как я работаю с кораблем в связке с граф.движком?
Фух.. ща попробую описать..

-загружаю геометрию
-создаю/загружаю инфу о корабле
-связываю корабль с геометрией, т.е. игровой модуль с граф.движком
-- корабль.engUnit:=геометрия.IdName;

ну а дальше работаю как хочу.. не вспоминая об граф.движке, кроме тех моментов, когда нужно работать с координатами или поставить какие либо флаги рендера, например.
_________________
MOV topka, C++
    Добавлено: 16:52 10-08-2006   
Trident
 610 EGP


Рейтинг канала: 2(16)
Репутация: 106
Сообщения: 4415
Откуда: Загнивающий Запад
Зарегистрирован: 03.05.2003
Jurec :
А теперь расскажите что не так, я не знаком с другими движками, чтоб сравнивать.

Ну, хм... Имхо, контейнер выбран неудачно. Тут куда более в тему что-то что даёт как быстрый последовательный перебор, так и поиск по ID. Например хэширование+красно-чёрное дерево... http://en.wikipedia.org/wiki/Red-black_tree Вообще при программировании "среднеуровневых" библиотек типа игровых движков разные деревья сильно жизнЮ облегчают, особенно если есть чужая и не баганутая реализация. Улыбка (у меня нет.)



По игровому коду, - сейчас лениво полностью формулировать, но как у старого жабера он у меня вызывает лёгкое неприятие в том, что касается событий и опять-таки ассоциативные структуры рулят Улыбка


О дельфях, нежно любимых... Посмотри библиотечку KOL. http://bonanzas.rinet.ru/ Как таковая она для геймдева не очень полезна, но автор очень подробно обьясняет, как писать компактный и быстрый ОО-код. Вообще узнал я про неё, кога уже от дельфей отошёл, так что может оно того и не стоит теперь.
_________________
Злостный РетроГад(tm) и конверсатор. И да, пуркуа гнобэ-ву наших нубов?
    Добавлено: 00:55 11-08-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Trident :
Посмотри библиотечку KOL

Ага, смотрел, автор - Владимир Кладов (и Новосибирская Элита - его работа) Улыбка - тут в соседней ветке обитает Улыбка

Trident :
Например хэширование+красно-чёрное дерево...

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

Trident :
По игровому коду, - сейчас лениво полностью формулировать, но как у старого жабера он у меня вызывает лёгкое неприятие в том, что касается событий и опять-таки ассоциативные структуры рулят

Поясняй
_________________
MOV topka, C++
    Добавлено: 09:09 11-08-2006   
Protectorat
 70 EGP


Рейтинг канала: 1(1)
Репутация: 15
Сообщения: 170
Откуда: Москва
Зарегистрирован: 13.10.2006
Jurec :
Вот, например, есть графический движок - вы ничего не знаете про OpenGL DirectX и вообще графику. Ваша задача - писать игру.


Найдите человека, который разбирается в DirectX или OpenGL, и пусть он занимается рендерингом! Не теряйте времени зря!
    Добавлено: 16:03 13-10-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Protectorat :
Найдите человека, который разбирается в DirectX или OpenGL, и пусть он занимается рендерингом! Не теряйте времени зря!

Хы...
Jurec :
Вот, например, есть графический движок - вы ничего не знаете про OpenGL, DirectX и вообще графику. Ваша задача - писать игру.

Это я писал не про себя. Подмигиваю Я как раз хорошо знаю OpenGL.
_________________
MOV topka, C++
    Добавлено: 16:08 13-10-2006   
Protectorat
 70 EGP


Рейтинг канала: 1(1)
Репутация: 15
Сообщения: 170
Откуда: Москва
Зарегистрирован: 13.10.2006
Jurec :

Это я писал не про себя. Подмигиваю Я как раз хорошо знаю OpenGL.


А я и не имел в виду васУлыбка Я отвечал на вопросУлыбка
    Добавлено: 16:11 13-10-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Protectorat :
Я отвечал на вопрос


*осматривая всю темку заново* По-секрету... На какой?
_________________
MOV topka, C++
    Добавлено: 16:14 13-10-2006   
Protectorat
 70 EGP


Рейтинг канала: 1(1)
Репутация: 15
Сообщения: 170
Откуда: Москва
Зарегистрирован: 13.10.2006
Jurec :
Protectorat :
Я отвечал на вопрос


*осматривая всю темку заново* По-секрету... На какой?


Ну не на вопрос точнее, а оспаривал постановку задачи, вот!Улыбка
    Добавлено: 16:17 13-10-2006   
NRG
 2526 EGP


Рейтинг канала: 3(32)
Репутация: 435
Сообщения: 10010
Откуда: Odessa, Ukraine
Зарегистрирован: 07.02.2001
с флудом полегше, а то пятница, 13-е, не знаю, кто переживет этот день, а кто - нет Гы-гы
_________________
Единица измерения равнодушия - один хер.
    Добавлено: 17:02 13-10-2006   
Protectorat
 70 EGP


Рейтинг канала: 1(1)
Репутация: 15
Сообщения: 170
Откуда: Москва
Зарегистрирован: 13.10.2006
NRG :
с флудом полегше, а то пятница, 13-е, не знаю, кто переживет этот день, а кто - нет Гы-гы


На меня намекаете?Улыбка

Нет, сугубо на флуд
А уж кто будет его инициатором - мне не так уж и важно Улыбка
NRG
    Добавлено: 17:04 13-10-2006   
Канал Игры Мечты: «API для графического движка»
На страницу: 1, 2  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Прошу отметить, что я категорически не желаю отмечаться в этой теме! (пост Fry'я)

  » API для графического движка | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18