![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Давайте выкладывать сюда короткие демки по GLScene, которых нет [Delphi, Windows]
Antichacker © (2003-02-01 09:01:00)А также писать, кому какие демки ещё нужны. Могу предложить такое:
Движение объекта в 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?
Кен (2003-02-06 01:42:00) [1]Antichacker ©
Дело в том, что звездолёт (самолёт, воздушный шар, автомобиль, корова на льду) должен иметь какую то инерцию. То есть, если ты его повернул на 90 градусов, то это не значит, что он сразу туда и полетит, а не будет продолжать движение в прежнем направлении, только боком.
Antichacker (2003-02-02 09:29:00) [2]Появился такой вопрос: можно ли в GLScene как в DelphiX описать класс спрайта, прописать процедуры создания, движения, столкновения и смерти а затем создавать кучу его копий? Если можно, то как?
Antichacker (2003-02-02 08:46:00) [3]Всем привет! Я наконец разобрался в 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- обработчик нажатия клавиш(кто не знает)
Alek Aaz (2003-02-02 08:16:00) [4]С чего это глючит и не работает? Все работает.
Antichacker (2003-02-02 07:32:00) [5]Я предлагаю такую систему(она подойдет для непрозрачности абсолютно любого объекта). Вот она:
если коллизия(на первый пиксел), то сдвинуть модель на один пиксел назад
И так и остался вопрос: Как двигать модель по ориентации её "носа"? Что-то вроде freeform1.move(speed). Стандартный move не предлагать - глючит и не работает. Неужели никто об этом не знает?
Кен (2003-02-02 02:50:00) [6]Гравитацию можно делать так :
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 - коф. торможения. Чуть меньше единицы.
Кен (2003-02-02 02:37:00) [7]Antichacker ©
Помоему самое нужное для GLScene это иммитация физических законов. Гравитации там, инерции, вращения, и тому подобных. Все написания игр начинаются именно с этих эмитаций в той или иной степени.
Antichacker (2003-02-01 12:43:00) [8]Ты смеешься? Объем текста таких демок - примерно страница. "Выкладывать"- писать часть исходника, как например наверху.
Alek Aaz (2003-02-01 10:47:00) [9]Выкладывать лучше на DelphiGFX