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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
2-1308388748
Gu
2011-06-18 13:19
2011.10.09
Своя кнопка и чекбокс в messagebox


15-1308118091
oldman
2011-06-15 10:08
2011.10.09
КриптоПро и Windows7


2-1308226982
Gu
2011-06-16 16:23
2011.10.09
{$DEFINE TEST}


15-1308313863
RGV
2011-06-17 16:31
2011.10.09
Реализация подсказки типа DropDownList.


1-1269069357
GA001
2010-03-20 10:15
2011.10.09
Сообщения форме





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский