![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Давайте попробуем развить демку dceDemo из состава GLScene ?
Ктото © (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. Монстры.
Какие будут уточнения, дополнения ?