Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Давайте попробуем развить демку dceDemo из состава GLScene ?


Страницы:   1 2 3 4

Ктото ©   (2004-09-17 02:54:00) 

Потому, что она похожа на недоделанный игровой движок. (Графика плюс коллизии.) И можно попытаться его доделать. Или хотя бы обсудить чего ей нехвататет, чтобы стать игрой.

Сама демка dceDemo, если кто не знает, лежит тут :
http://cvs.sourceforge.net/viewcvs.py/glscene/Demos/behaviours/DCEDemo/

Я пока сделал небольшой редактор Джиэльсценовского мира, с возможностью сохранять/загружать отредактированный мир в ini-файл. Ini-файлы удобны тем, что их можно легко подредактировать ручками. Например, вставить несколько однотипных объектов с небольшим смещением координа, и таким образом получить, например забор, или несколько этажей здания. И т. п.

Скачать можно тут : http://dcegame.narod.ru/dcegame.html
Исходник к демке прилагается. В файле save.ini находится небольшой уровень, сделанный в редакторе.

Вопросы, пожелания ? СтОит ли ? Куда двигаться дальше ?


miek   (2004-10-01 08:17:00) [21]

И запускал и компилировал - результат один.


DeadMeat   (2004-10-01 01:08:00) [22]

Интересно...
А ты сразу *.EXE запускал или компилил?
Вроде и карта та не так много ест, да и вычислений там таких серьезных нет...

У меня был похожий прикол. Скачал одну демку, запустил готовый *.ЕХЕ - дает около 2000 фпс. Моя офигеть. Скомпилил - 800 фпс. ХЗ в чем было дело...

---
...Death Is Only The Begining...


miek   (2004-09-30 23:48:00) [23]

FPS 1-4, на P4-2500, карта встроенная IntelBrookdale.
Карту загружать пока не пробовал, но сцены с таким количеством полигонов делал, скорость была выше.


DeadMeat   (2004-09-30 18:57:00) [24]

А скока ФПС?
Попробуй отдельно только карту загрузить и полетать в ней. В своем проекте. Может чего намутили с настройками?


miek   (2004-09-30 18:24:00) [25]

Я одного не понимаю - почему демка ТАК тормозит?


DeadMeat   (2004-09-29 17:38:00) [26]

Без SMD никуда. Как например делать поворот башни/дула танка ?
Ну я не правильно выразился. Он не советует использовать *.SMD от халфлайфа. Они там странные. Некоторые со сдвигом в анимациях...

Текстуры взрыва в твоей демке, которая для конкурса. Если GLMaterialLibrary2 сохранить на диск.
Ну дык... Их же там несколько. Сама текстура лежит отдельно (на сколько я помню) и довольно большая. Пришлось сделать несколько текстур, каждая для своего взрыва. Я примерно прикинул, скока взрывов может быть одновременно на экране и сделал столько же текстур. Кажись так было. Щас точно не вспомню. Делалось это по двум причинам:
1) TOffSetAnimation изменяет саму текстуру, а соответственно два взрыва, ссылающихся на нее одну, будут выглядеть одинаково.
2) Создавать в рантайме текстуры (в смысле добавлять их в MaterilLibrary) есть очень плохо и тормознуто. Поэтому они не создаются и не удаляются из памяти, а просто показываются в нужный момент времени.


Ктото   (2004-09-29 01:18:00) [27]


> DeadMeat ©   (28.09.04 22:09) [53]
> Надо поприкалываться. Пока не смотрел в эту сторону... С
> *.SMD вообще то проблем много. Сам Эрик не советует его
> использовать. С ним мороки много...

А где Эрик не советует его использовать ?
Без SMD никуда. Как например делать поворот башни/дула танка ? Можно конечно извратитьяс и без SMD, но с SMD это всего пара строчек.


> Эээ... Недопонял. Какие текстуры? Ты про чего вообще?

Текстуры взрыва в твоей демке, которая для конкурса. Если GLMaterialLibrary2 сохранить на диск.


DeadMeat   (2004-09-28 22:09:00) [28]


> Где можно это чудо скачать посмотреть? Но не исходники,
> ибо всего этого (ну или многого из необходимого для компиляции)
> у меня нет.

Буду отдельно *.EXE выкладывать...


> Не знаешь, как прикрепить к руке smd-модели ружьё ?

Надо поприкалываться. Пока не смотрел в эту сторону... С *.SMD вообще то проблем много. Сам Эрик не советует его использовать. С ним мороки много...


> Кстати, я там так до конца и не понял, как это делается.
> Пытался сохранить текстуры, после загрузки и оказалось,
> что они аж 15 мегабайт занимают. Слишком ресурсоёмко.

Эээ... Недопонял. Какие текстуры? Ты про чего вообще?

---
...Death Is Only The Begining...


Колбасьев   (2004-09-28 19:47:00) [29]

Где можно это чудо скачать посмотреть? Но не исходники, ибо всего этого (ну или многого из необходимого для компиляции) у меня нет.


Ктото   (2004-09-28 04:02:00) [30]


> DeadMeat ©   (27.09.04 10:21) [48]

Проблемы с вьездом камеры в препятствия продолжаются. Дело в том, что плоскости видны и просчитываются на проходимость только с одной стороны. Поэтому функция GLSceneViewer1.Buffer.GetPickedObject(CrossHairPos.X, CrossHairPos.Y);с обратной стороны, то есть изнутри, препятствия не видит, и камера не может определить, что оказалась внутри него. Как же быть ?

Не знаешь, как прикрепить к руке smd-модели ружьё ? А то там в демках примеры только для квэйковских моделей, а они много места занимают, по сравнению с smd.

> Про FireFX знаю, но специально его не использую... Беспантовый
> он... ;)
> Лучше уж PerlinPFX. Он чуть по симпатишнее. Либо как в моем
> паратрупере..

Кстати, я там так до конца и не понял, как это делается. Пытался сохранить текстуры, после загрузки и оказалось, что они аж 15 мегабайт занимают. Слишком ресурсоёмко.


DeadMeat   (2004-09-27 22:03:00) [31]

Я ж говорил... Чтобы объем всей демки чуть уменьшить... В смысле размер архива... А именно эту, я выбрал потомучто она придает некий вид виртуальности всего происходящего... Мне нравится...

---
...Death Is Only The Begining...


DeFenix   (2004-09-27 17:26:00) [32]

А почему карта покрыта ТАКОЙ текстурой?!


DeadMeat   (2004-09-27 10:21:00) [33]


> Взрывы я сделал из FireFx.

Про FireFX знаю, но специально его не использую... Беспантовый он... ;)
Лучше уж PerlinPFX. Он чуть по симпатишнее. Либо как в моем паратрупере..


> Проблема в том, что если часто стрелять, то второй выстрел
> попадает не в объект, а в разлетающиеся части от предыдущего
> выстрела. Как избежать - я не нашёл.

Странно... Надо будет глянуть.

---
...Death Is Only The Begining...


Ктото   (2004-09-27 07:11:00) [34]


> А насчет RayCastIntersect... Дык используй его аналог -
> OctreeRayCastIntersect...

Да. Вроде стало быстрее. Но ещё попроверяю.

Глюк с взрывной волной - я понял почему был. Потому, что иногда камера оказывалась внутри стены, и выстрел попадал не перед Актёром, а за ним, в стену, внутри которой была камера, и поэтому отскок происходил не вперёд, а назад. :)


> Волна от выстрелов... Невидимая правда, и взрывов пока нет
> (руки не доходят).

Взрывы я сделал из FireFx.
Ставишь объект который надо задать им в Reference.
Делаешь Disabled, чтобы огонь не горел.
Далее FireFX.FireInit; Чтобы инициализировать взрыв,
Задаёшь FireFX.ParticleSize := 1 ( или 2 или 0.5 , чем меньше тем быстрее работает, но менее эффектно )
и
 if Random > 0.5 then FireFX.IsotropicExplosion(8, 10, 5)
                 else FireFX.RingExplosion(8, 10, 5, XVector, ZVector);

Два вида взрыва по рэндому. Можно потом будет для разных видов оружия разные взрывы сделать.

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

И как лучше сами FireFx делать я тоже пока не решил. Создавать каждый раз в рантайме - наверное долго. Или может создать несколько с самого начала, а потом их использовать по кругу ? В общем вопрос открытый.


Ктото   (2004-09-27 07:11:00) [35]


> А насчет RayCastIntersect... Дык используй его аналог -
> OctreeRayCastIntersect...

Да. Вроде стало быстрее. Но ещё попроверяю.

Глюк с взрывной волной - я понял почему был. Потому, что иногда камера оказывалась внутри стены, и выстрел попадал не перед Актёром, а за ним, в стену, внутри которой была камера, и поэтому отскок происходил не вперёд, а назад. :)


> Волна от выстрелов... Невидимая правда, и взрывов пока нет
> (руки не доходят).

Взрывы я сделал из FireFx.
Ставишь объект который надо задать им в Reference.
Делаешь Disabled, чтобы огонь не горел.
Далее FireFX.FireInit; Чтобы инициализировать взрыв,
Задаёшь FireFX.ParticleSize := 1 ( или 2 или 0.5 , чем меньше тем быстрее работает, но менее эффектно )
и
 if Random > 0.5 then FireFX.IsotropicExplosion(8, 10, 5)
                 else FireFX.RingExplosion(8, 10, 5, XVector, ZVector);

Два вида взрыва по рэндому. Можно потом будет для разных видов оружия разные взрывы сделать.

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

И как лучше сами FireFx делать я тоже пока не решил. Создавать каждый раз в рантайме - наверное долго. Или может создать несколько с самого начала, а потом их использовать по кругу ? В общем вопрос открытый.


DeadMeat   (2004-09-26 22:32:00) [36]

http://deadmeat.fatal.ru/minishooter_upd.rar
Волна от выстрелов... Невидимая правда, и взрывов пока нет (руки не доходят). Да и приседание пока не сделал...

А насчет RayCastIntersect... Дык используй его аналог - OctreeRayCastIntersect...

---
...Death Is Only The Begining...


Ктото   (2004-09-26 01:56:00) [37]

Немного помучился с камерой вьезжающей в препятствия. Пытался сделать её динамическим DCE-объектом. В результате камера падает вниз под действием гравитации. Как сделать, чтобы гравитация на камеру не действовала - не нашёл.

Можно использовать другой подход. Посчитать расстояние от камеры до ближайшего объекта. И если оно меньше, чем расстояние до TargetObject у камеры, то значит между ней и TargetObject'ом есть препятствие, и её надо придвинуть.

var
 rayStart, rayVector, iPoint, iNormal : TVector;
 BasePick : TGLBaseSceneObject;
 CrossHairPos, CrossHairPosInv : TPoint;

...

   // CrossHairPos и CrossHairPosInv - координаты точки экрана из которой смотрим, и её перевёрнутые координаты.
 CrossHairPos    := Point(GLSceneViewer1.ClientWidth div 2, GLSceneViewer1.ClientHeight div 2);
 CrossHairPosInv := Point(GLSceneViewer1.ClientWidth div 2, GLSceneViewer1.Height -(GLSceneViewer1.ClientHeight div 2));
   //  Берём объект с экрана по этим координатам.
 BasePick := GLSceneViewer1.Buffer.GetPickedObject(CrossHairPos.X, CrossHairPos.Y);
 if BasePick <> nil then begin
   SetVector(rayStart,  GLCamera1.AbsolutePosition);
   SetVector(rayVector, GLSceneViewer1.Buffer.ScreenToVector(AffineVectorMake(CrossHairPosInv.X, CrossHairPosInv.Y, 0)));
   NormalizeVector(rayVector);
   if BasePick.RayCastIntersect(rayStart, rayVector, @iPoint, @iNormal) then begin
     if VectorDistance(iPoint, Player.AbsolutePosition) < GLCamera1.DistanceToTarget then begin
         // Расстояние до ближайшего объекта меньше, чем до Плэйера. Значит перед камерой препятствие.
         GLCamera1.AdjustDistanceToTarget(Power(1.1, -3)) // Приближаем камеру.;
     end;
   end;
 end;


Это работает, но тормозит. Функция BasePick.RayCastIntersect может занимать до 300 миллисекунд. Как быть ?


Ктото   (2004-09-26 01:29:00) [38]


> DeadMeat ©   (25.09.04 11:09) [42]
>
> > А что в скобках ?
>
> Как что?...
> Вектор в направлении которого надо сдвинуть актера в глобальных
> координатах... Т.е. не зависит от текущего дирекшина этого
> актера... Надо влево - (1,0,0), надо вправо - (-1,0,0) и
> т.п. Куда бы он не смотрел, двигаться будет в нужном направлении...

У меня глючит. В зависимости от того, с какой стороны от координаты 0, 0 он стоит и в какую сторону смотрит, иногда отскок происходит куда-то в сторону, в общем не туда. Поэтому и спрашиваю, что точно писать.

А если выстрел в пол, то он подлетает ?


DeadMeat   (2004-09-25 11:09:00) [39]


> А что в скобках ?

Как что?...
Вектор в направлении которого надо сдвинуть актера в глобальных координатах... Т.е. не зависит от текущего дирекшина этого актера... Надо влево - (1,0,0), надо вправо - (-1,0,0) и т.п. Куда бы он не смотрел, двигаться будет в нужном направлении... Волну я уже сделал, пару глюков подправил. Осталось сделать приседание...

---
...Death Is Only The Begining...


Ктото   (2004-09-25 04:30:00) [40]


> Darth   (25.09.04 03:05) [40]
> //Будет движок - будет и игра.
> движок сам по себе это дай Бог 10% от игры

Только GLScene эти 10 процентов не может осилить уже многие годы.

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

1. Неразрушаемые, непроходимые. Дома, мосты, и т. п.
2. Разрушаемые, непроходимые. Стёкла, ящики какие-нибудь, загораживающие проход, которые можно взорвать и куда-нибудь пройти.
3. Неразрушаемые, проходимые. Типа газет на земле в Вайс Сити, или травы, кустарников. Возможно их вообще не стоит расставлять, или лишь задавать области в которых они должны создаваться динамически.
4. Разрушаемые, проходимые. Предметы, которые можно брать. Оружие, патроны, аптечки, и т. п. Отличие от предыдущих в том, что они напрямую связаны с кодом. То есть, если через них проходишь, то они исчезают, а у тебя что-то появляется.
5. Монстры.

Какие будут уточнения, дополнения ?


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо