Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.09;
Скачать: CL | DM;

Вниз

Пуля   Найти похожие ветки 

 
Mr.Vlad ©   (2007-09-13 23:07) [0]

У меня вопрос. С помощью GLScene я начал делать стрелялку (только не подумайте, что я делаю её для продажи или как шедевер с новыми технологиями, нет я делаю её для себя и для друзей). Так как я не умею делать много чего (только 3 месяцев как стал сам разбираться) и анимационные модели, то использую стандартного waste.md2 только
рисую разные текстуры. Ну, ближе к вопросу. Мне надо сделать выстрел. Как я понимаю, создаю целиндр, при нажатии на LMB он visible:=true, GetOrCreateDCEDynamic(Pulia1).ApplyAccel(Sila). Это понятно, а вот как сделать чтобы пуля летела именно в том направлении в котором смотрит камера и ещё с разносом...??? Я пытался Position и  Up пули присваивать камеры, но у меня что-то не получается. Подскажите, пожалуйста, или может есть какойто другой способ реализовать
выстрел и столкновение(расчёт что пуля попала в Actor3 и тд.).


 
ElectriC ©   (2007-09-14 17:49) [1]

Для полёты пуль - обычно юзаются вектора (вектору пули присваивается вектор камеры (положение, направление) + различные преобразования).
Для столкновения - Collusion Detection(вроде бы так пишется).


 
Help me! ©   (2007-09-14 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;



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

Текущий архив: 2011.10.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
15-1308562061
xayam
2011-06-20 13:27
2011.10.09
Архивная статистика: С днем рождения


9-1189763352
andreil
2007-09-14 13:49
2011.10.09
Глюк OpenGL


2-1308483468
ZimFFa
2011-06-19 15:37
2011.10.09
запросы


15-1308428998
Юрий
2011-06-19 00:29
2011.10.09
С днем рождения ! 19 июня 2011 воскресенье


15-1308256200
Юрий
2011-06-17 00:30
2011.10.09
С днем рождения ! 17 июня 2011 пятница