HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 29 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Помогите! Сдвиг камеры от 3 лица в лево XX (https://hlfx.ru/forum/showthread.php?threadid=5544)


Отправлено Next Day 05-08-2020 в 22:43:

Помогите! Сдвиг камеры от 3 лица в лево XX

Всем доброва дня и крепкова здоровья.
Вот уже приличное время пытался сделать сдвиг камеры от 3 лица(thirdperson)
что бы модель сдвинулась в лево в хл есть такое.
Консольные команды для вида от 3 лица
чтобы крутить камеру
cl_pitchup - можно сделать чтоб можно было смотреть вверх ногами
cam_idealdist - дистанция камеры
cam_idealpitch - наклон камеры
cam_idealyaw - поворот камеры
chase_active - второй вариант вида от третьего лица.
chase_back - на сколько камера отдалена
chase_right - на сколько камера уходит в право (чтобы влево - пиши с минусом)
chase_up - на сколько камера уходит вверх

Вот а в XASH таких команд нет меня интересует команда chase_right чтобы от третьего лица сместить модель игрока в лево ,а то она по центру.

Добавлено 06-08-2020 в 01:43:

Ku2zoff Мне подсказал что нужно искать в файле in_camera.cpp, но я так и не смог сам эту команду добавить.
Если кто знает что и куда надо добавить помогите пожалуйста!!!!


Отправлено Crystallize 06-08-2020 в 01:32:

Начни чтоли с более простого, вот с этим форком кваки можешь поэкспериментировать: http://www.celephais.net/fitzquake/

Тебе видимо нужно взять углы viewangles или cl_viewangles, сделать им AngleVectors(NULL, right, NULL ) и потом взять позицию камеры (vieworg?) и прибавить к ней вектор right. Только надо как-то избежать постоянного наращивания позиции камеры на размер этого вектора, завести другую переменную или может брать оригин не камеры а игрока.


Отправлено Дядя Миша 06-08-2020 в 09:05:

C++ Source Code:
VectorMA( ppparams->vieworg, pparams->right, -50.0, pparams->vieworg );

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Next Day 06-08-2020 в 09:46:

Спасибо что пытаетесь помочь.
Дядя Миша а в какой файл надо это добавить?
Я копал в файле r_view.cpp туда надо?


Отправлено Ku2zoff 06-08-2020 в 10:48:

Next Day r_view.cpp, функция должна называться V_CalcThirdPersonRefdef.
Кстати, как сделаешь, проверь прицеливание. Когда я крутил квары chase_right/left, камера уезжала куда надо и прицел тоже. А вот игрок продолжал стрелять туда, где рыньше находился прицел.


Отправлено Next Day 06-08-2020 в 12:08:

Ну вообщем что то не работает


//==========================
// V_CalcThirdPersonRefdef
//==========================
void V_CalcThirdPersonRefdef( struct ref_params_s * pparams )
{
VectorMA( pparams->vieworg, pparams->right, -50.0, pparams->vieworg );///ставил в разные места функции
static float lasttime, oldz = 0;
pparams->vieworg = pparams->simorg;
pparams->vieworg += pparams->viewheight;
pparams->viewangles = pparams->cl_viewangles;

V_CalcSendOrigin( pparams );

// this is smooth stair climbing in thirdperson mode but not affected for client model
if( !pparams->smoothing && pparams->onground && pparams->simorg[2] - oldz > 0.0f )
{
float steptime;

steptime = pparams->time - lasttime;
if( steptime < 0 ) steptime = 0;

oldz += steptime * 150.0f;

if( oldz > pparams->simorg[2] )
oldz = pparams->simorg[2];
if( pparams->simorg[2] - oldz > pparams->movevars->stepsize )
oldz = pparams->simorg[2] - pparams->movevars->stepsize;

pparams->vieworg[2] += oldz - pparams->simorg[2];

}
else
{
oldz = pparams->simorg[2];
}

lasttime = pparams->time;

V_GetChaseOrigin( pparams->viewangles, pparams->vieworg, cl_chasedist->value, pparams->vieworg );

float pitch = pparams->viewangles[PITCH];

// normalize angles
if( pitch > 180.0f )
pitch -= 360.0f;
else if( pitch < -180.0f )
pitch += 360.0f;

// player pitch is inverted
pitch /= -3.0;

cl_entity_t *ent = GET_LOCAL_PLAYER();

// slam local player's pitch value
ent->angles[PITCH] = pitch;
ent->curstate.angles[PITCH] = pitch;
ent->prevstate.angles[PITCH] = pitch;
ent->latched.prevangles[PITCH] = pitch;

}

Добавлено 06-08-2020 в 15:08:

Если добавить в начале файла #define VectorMA
то ошибки конечно нет ,но вид все равно не меняется.
Что я сделал не так


Отправлено Crystallize 06-08-2020 в 15:06:

Next Day GetChaseOrigin обновляет vieworg, так что после неё ставь.
И картинки конверти в JPG перед выкладыванием.

Добавлено 06-08-2020 в 21:49:

VectorMA похоже в ксаше нету, возьми её в спирите и целиком размести где-то над ThirdPersonRefDef. VectorMA это три строчки, причём она бывает со звёздочками и без, попробуй что заработает.
Вообще я бы как начинающий, пока на Спирите и остался а не лез сразу в Ксаш.

Добавлено 06-08-2020 в 22:00:

Ku2zoff для этих целей можно утащить код из дядемишиного танка, где флаг Match Target.

Добавлено 06-08-2020 в 22:06:

или из кваки из chase_active


Отправлено Ku2zoff 06-08-2020 в 15:21:

Цитата:
Next Day писал:
Ну вообщем что то не работает

C++ Source Code:
VectorMA( pparams->vieworg, pparams->right, -50.0, pparams->vieworg );///ставил в разные места функции
static float lasttime, oldz = 0;
pparams->vieworg = pparams->simorg;


Да вот хотя бы на это чудо поглядеть. Сначала VectorMA - задаём нужную нам позицию новым кодом, а потом сразу же pparams->vieworg = pparams->simorg, задаём другую позицию оригинальным кодом. Естественно, оно не работает. Вставляй новый код в конец функции. И скопипасти VectorMA откуда-нибудь, например из pm_math.c оригинальной халфы. Только там порядок аргументов не такой, как привёл Дядя Миша. МБ он просто ошибся.

Добавлено 06-08-2020 в 22:21:

Цитата:
Crystallize писал:
утащить код из дядемишиного танка, где флаг Match Target

Crystallize а скажи-ка, в чём соль этого флага? Я как-то давно делал так, чтобы при юзании танка прицел не пропадал. Так танк всегда стреляет точно в прицел, насколько ему позволяют углы поворота по осям.


Отправлено Crystallize 06-08-2020 в 15:26:

Цитата:
Ku2zoff писал:
Так танк всегда стреляет точно в прицел, насколько ему позволяют углы поворота по осям.

Ну ты сам всё рассказал.
"при ручном управлении ствол танка целится туда же, куда смотрит игрок; удобно для контролирования множества пушек"


Отправлено Next Day 06-08-2020 в 16:32:

Crystallize С картинками понял если что то в .JPG
Спирит не подходит нужен ксаш.Кодить особо не собираюсь ,просто нужно пара
фишек прикрутить например эта очень нужна.

Ku2zoff Ставил я код и в конце и само собой после GetChaseOrigin просто на примере от без исходности чисто случайно поставил самую тупую попытку в начале функции.


Насчет VectorMA ну если из хл то это ставить ?
void VectorMA (const vec3_t veca, float scale, const vec3_t vecb, vec3_t vecc)
{
vecc[0] = veca[0] + scale*vecb[0];
vecc[1] = veca[1] + scale*vecb[1];
vecc[2] = veca[2] + scale*vecb[2];
}
ну естественно не компилит ошибки,может что то другое?

А в спирите такой функции не нашел, в каком файле искать?

Мужики а по поводу код из Дяде Мишиного танка, где флаг Match Target что то вообще не понял.

В квейк лезть я там вообще потеряюсь.

Да блин я думал задача из простых ,но вожусь я с ней фиг знает сколько и чем дальше тем не легче.!


Отправлено Дядя Миша 06-08-2020 в 17:02:

Цитата:
Ku2zoff писал:
Только там порядок аргументов не такой, как привёл Дядя Миша. МБ он просто ошибся.

второй и третий перепутал наверное

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Crystallize 06-08-2020 в 17:21:

Цитата:
Next Day писал:
Насчет VectorMA ну если из хл то это ставить ?

Да, я сейчас добавил это перед функцией, потом вписал в функцию ту строчку непосредственно использующую VectorMA (только циферка должна идти вторым аргументом а right третьим) и у меня всё скомпилилось.

Добавлено 07-08-2020 в 00:21:

Цитата:
Next Day писал:
А в спирите такой функции не нашел, в каком файле искать?

Привыкай пользоваться поиском по проекту с кодом.

Цитата:
Next Day писал:
Мужики а по поводу код из Дяде Мишиного танка, где флаг Match Target что то вообще не понял.

Это чтобы пули реально летели туда где прицел на экране, а не на 50 юнитов в сторону.

Цитата:
Next Day писал:
В квейк лезть я там вообще потеряюсь.

не потеряешься, тамошний chase.c даже проще чем здешний r_view.cpp

Цитата:
Next Day писал:
Да блин я думал задача из простых ,но вожусь я с ней фиг знает сколько и чем дальше тем не легче.!

Ну не поваляешь не поешь. Всё всегда устроено не так как мы ожидаем.


Отправлено Next Day 06-08-2020 в 18:23:

Crystallize Да у меня тоже скомпилировалось.

void VectorMA (const vec3_t veca, float scale, const vec3_t vecb, vec3_t vecc)
{
vecc[0] = veca[0] + scale*vecb[0];
vecc[1] = veca[1] + scale*vecb[1];
vecc[2] = veca[2] + scale*vecb[2];
}


//==========================
// V_CalcThirdPersonRefdef
//==========================
void V_CalcThirdPersonRefdef( struct ref_params_s * pparams )
{
static float lasttime, oldz = 0;

pparams->vieworg = pparams->simorg;
pparams->vieworg += pparams->viewheight;
pparams->viewangles = pparams->cl_viewangles;

V_CalcSendOrigin( pparams );

// this is smooth stair climbing in thirdperson mode but not affected for client model
if( !pparams->smoothing && pparams->onground && pparams->simorg[2] - oldz > 0.0f )
{
float steptime;

steptime = pparams->time - lasttime;
if( steptime < 0 ) steptime = 0;

oldz += steptime * 150.0f;

if( oldz > pparams->simorg[2] )
oldz = pparams->simorg[2];
if( pparams->simorg[2] - oldz > pparams->movevars->stepsize )
oldz = pparams->simorg[2] - pparams->movevars->stepsize;

pparams->vieworg[2] += oldz - pparams->simorg[2];
}
else
{
oldz = pparams->simorg[2];
}

lasttime = pparams->time;

V_GetChaseOrigin( pparams->viewangles, pparams->vieworg, cl_chasedist->value, pparams->vieworg );


float pitch = pparams->viewangles[PITCH];

// normalize angles
if( pitch > 180.0f )
pitch -= 360.0f;
else if( pitch < -180.0f )
pitch += 360.0f;

// player pitch is inverted
pitch /= -3.0;

cl_entity_t *ent = GET_LOCAL_PLAYER();

// slam local player's pitch value
ent->angles[PITCH] = pitch;
ent->curstate.angles[PITCH] = pitch;
ent->prevstate.angles[PITCH] = pitch;
ent->latched.prevangles[PITCH] = pitch;

VectorMA( pparams->vieworg, -50.0, pparams->right, pparams->vieworg );
}


Но самое интересное то что камера не сместилась совсем

Добавлено 06-08-2020 в 21:23:


Отправлено Дядя Миша 06-08-2020 в 18:53:

Так с чего она сместится, если pparams->right не был просчитан. Он только в firstperson считается. Добавь перед этой строчкой вот такую:

C++ Source Code:
AngleVectors( pparams->cl_viewangles, pparams->forward, pparams->right, pparams->up );

Но вообще тыкать код наугад - это тупиковый путь, время тратится, результата нет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Next Day 06-08-2020 в 19:26:

Дядя Миша ты прав насчет тыканья ,но другого пути для меня пока нет да и были удачи +- срабатывало ,но не сейчас!

// slam local player's pitch value
ent->angles[PITCH] = pitch;
ent->curstate.angles[PITCH] = pitch;
ent->prevstate.angles[PITCH] = pitch;
ent->latched.prevangles[PITCH] = pitch;

AngleVectors( pparams->cl_viewangles, pparams->forward, pparams->right, pparams->up );

VectorMA( pparams->vieworg, -50.0, pparams->right, pparams->vieworg );
}

Вот так надо добавить? если да то Дядя Миша все равно сдвига нет!


Временная зона GMT. Текущее время 18:59. Страницы (2): [1] 2 »
Показать все 29 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024