Конференция "Игры" » Пуля [Delphi, Windows]
 
  • Mr.Vlad © (13.09.07 23:07) [0]
    У меня вопрос. С помощью GLScene я начал делать стрелялку (только не подумайте, что я делаю её для продажи или как шедевер с новыми технологиями, нет я делаю её для себя и для друзей). Так как я не умею делать много чего (только 3 месяцев как стал сам разбираться) и анимационные модели, то использую стандартного waste.md2 только
    рисую разные текстуры. Ну, ближе к вопросу. Мне надо сделать выстрел. Как я понимаю, создаю целиндр, при нажатии на LMB он visible:=true, GetOrCreateDCEDynamic(Pulia1).ApplyAccel(Sila). Это понятно, а вот как сделать чтобы пуля летела именно в том направлении в котором смотрит камера и ещё с разносом...??? Я пытался Position и  Up пули присваивать камеры, но у меня что-то не получается. Подскажите, пожалуйста, или может есть какойто другой способ реализовать
    выстрел и столкновение(расчёт что пуля попала в Actor3 и тд.).
  • ElectriC © (14.09.07 17:49) [1]
    Для полёты пуль - обычно юзаются вектора (вектору пули присваивается вектор камеры (положение, направление) + различные преобразования).
    Для столкновения - Collusion Detection(вроде бы так пишется).
  • Help me! © (14.09.07 18:28) [2]
    // Начальное положение пули это положение камеры:

    Pula_Position0 := Camera_Position;

    // Так можно найти вектор направления движения пули:

    glGetFloatv( GL_MODELVIEW_MATRIX  , @m );

    Pula_Direction.x := m[0,2];
    Pula_Direction.y := m[1,2];
    Pula_Direction.z := m[2,2]; // или все с минусом, что-то сейчас не соображу

    Полженее пули в зависимости от времени такое:

    Pula_Position.x := Pula_Position0.x + Pula_Direction.x  *  t * v;
    Pula_Position.y := Pula_Position0.y + Pula_Direction.y  *  t * v;
    Pula_Position.z := Pula_Position0.z + Pula_Direction.z  *  t * v;

    // v - это скорость

    Ну и т.д. ...

    Положение камеры я например раньше находил вот так:
    ( способ проверенный работает )

    function GetCameraPos: TVector3f;
    var
    mdP,mdM :array[0..15] of double;
    mV      :array[0..3 ] of integer;
    x,y,z   :double;
    begin

    glGetDoublev( GL_PROJECTION_MATRIX , @mdP );
    glGetDoublev( GL_MODELVIEW_MATRIX  , @mdM );
    glGetIntegerv( GL_VIEWPORT , @mV );

    gluUnProject( mV[2]/2 , mV[3]/2 , -1000000 , @mdM , @mdP , @mV , x , y , z );

    result.x:=x;
    result.y:=y;
    result.z:=z;

    end;
 
Конференция "Игры" » Пуля [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0]