Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Вниз

Давайте выкладывать сюда короткие демки по GLScene, которых нет   Найти похожие ветки 

 
Antichacker   (2003-02-01 09:01) [0]

А также писать, кому какие демки ещё нужны. Могу предложить такое:
Движение объекта в 2D(по x и z).

if ar1.TurnAngle>=0 then i:=ar1.TurnAngle
else i:=360-abs(ar1.TurnAngle);
if up then
begin
ar1.Position.X:=ar1.Position.X-sin(i*pi/180)*0.5;
ar1.Position.z:=ar1.Position.z-cos(i*pi/180)*0.5;
end;
if left then ar1.TurnAngle:=ar1.TurnAngle+5;
if right in dxinput1.States then ar1.TurnAngle:=ar1.TurnAngle-5;


Все дело в том, что у этого GLScene болшие глюки с определением углов(270=-90,181=-179) а синус и косинус на этом глючат. И ещё: turn(x) - также сильно глючит(у меня он выдавал стабильный угол от 56 до 84, вне зависимости от реального)(up,left,right:boolean)

Кто может написать подобную демку для 3D?


 
Alek Aaz   (2003-02-01 10:47) [1]

Выкладывать лучше на DelphiGFX


 
Antichacker   (2003-02-01 12:43) [2]

Ты смеешься? Объем текста таких демок - примерно страница. "Выкладывать" - писать часть исходника, как например наверху.


 
Кен   (2003-02-02 02:37) [3]

Antichacker ©
Помоему самое нужное для GLScene это иммитация физических законов. Гравитации там, инерции, вращения, и тому подобных. Все написания игр начинаются именно с этих эмитаций в той или иной степени.


 
Кен   (2003-02-02 02:50) [4]

Гравитацию можно делать так :

procedure TForm1.DummyCube1Progress(Sender: TObject; const deltaTime, newTime: Double);
begin
CollisionManager1.CheckCollisions;
k := deltaTime*1; // - ход времени.
y0 := y; // - Запомнить предыдущую позицию для вычисления скорости.
y := y0 + v*k*col - g*k*k/2; // Вычисляем новое положение по Y
v := (y - y0)/k*ktorm; // Вычисляем новую скорость.
col := 1;
DummyCube1.Position.Y := y;
end;

procedure TForm1.CollisionManager1Collision(Sender: TObject; object1, object2: TGLBaseSceneObject);
begin
if ( v <= 0 ) then begin col := -1; end;
end;


Проблема только с тем, что когда предмет окончательно падает на поверхность, то он начинает медленно просачиваться через неё пока не пройдёт насквозь. Как бы этого избежать ?

ktorm - коф. торможения. Чуть меньше единицы.


 
Antichacker   (2003-02-02 07:32) [5]

Я предлагаю такую систему(она подойдет для непрозрачности абсолютно любого объекта). Вот она:

если коллизия(на первый пиксел), то сдвинуть модель на один пиксел назад

И так и остался вопрос: Как двигать модель по ориентации её "носа"? Что-то вроде freeform1.move(speed). Стандартный move не предлагать - глючит и не работает. Неужели никто об этом не знает?


 
Alek Aaz   (2003-02-02 08:16) [6]

С чего это глючит и не работает? Все работает.


 
Antichacker   (2003-02-02 08:46) [7]

Всем привет! Я наконец разобрался в 3D-движении. Оказывается разработчики УЖЕ сделали все необходимые для этого процедуры. Вот пример ПОЛНОГО управления звездолетом:

dxinput1.Update;
if (isbutton2 in dxinput1.States)and(v<0.5) then v:=v+0.1;
if (isbutton3 in dxinput1.States)and(v>=0.1) then v:=v-0.1;
if isup in dxinput1.States then ar1.Pitch(2);
if isdown in dxinput1.States then ar1.Pitch(-2);
if isbutton4 in dxinput1.States then ar1.Roll(2);
if isbutton5 in dxinput1.States then ar1.Roll(-2);
if isleft in dxinput1.States then ar1.Turn(2);
if isright in dxinput1.States then ar1.Turn(-2);
ar1.Move(v);


Кстати, здесь же заложена и инерция - обнулить V сразу не получится. Единственная проблема, кторая может возникнуть - правильное расположение модели до экспорта. Подбирается опытным путем. Единственное, что я могу сказать по поводу ориентации - "нос" модели должен быть задран кверху на 90 градусов. Угол по Y приходится подбирать. После вставки такой модели начальный PitchAngle должен равняться 90.
dxinput1 - обработчик нажатия клавиш(кто не знает)


 
Antichacker   (2003-02-02 09:29) [8]

Появился такой вопрос: можно ли в GLScene как в DelphiX описать класс спрайта, прописать процедуры создания, движения, столкновения и смерти а затем создавать кучу его копий? Если можно, то как?


 
Кен   (2003-02-06 01:42) [9]

Antichacker ©
Дело в том, что звездолёт (самолёт, воздушный шар, автомобиль, корова на льду) должен иметь какую то инерцию. То есть, если ты его повернул на 90 градусов, то это не значит, что он сразу туда и полетит, а не будет продолжать движение в прежнем направлении, только боком.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-100797
ruslan_as
2003-07-16 17:45
2003.07.31
Как открыть файл Acrobat Reader с паролем


1-100807
Mastiff
2003-07-12 17:50
2003.07.31
Windows не выключаеться при запущенной программе


1-100768
WASYA
2003-07-16 17:18
2003.07.31
События


1-100680
ruslan_as
2003-07-18 09:55
2003.07.31
После обработки обшибки try -.except у меня не работает Combobox


14-100986
Delphi5.01
2003-07-16 06:51
2003.07.31
авторизация TIdHTTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский