Всем доброва дня и крепкова здоровья.
Вот уже приличное время пытался сделать сдвиг камеры от 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, но я так и не смог сам эту команду добавить.
Если кто знает что и куда надо добавить помогите пожалуйста!!!!
Тебе видимо нужно взять углы viewangles или cl_viewangles, сделать им AngleVectors(NULL, right, NULL ) и потом взять позицию камеры (vieworg?) и прибавить к ней вектор right. Только надо как-то избежать постоянного наращивания позиции камеры на размер этого вектора, завести другую переменную или может брать оригин не камеры а игрока.
Next Day r_view.cpp, функция должна называться V_CalcThirdPersonRefdef.
Кстати, как сделаешь, проверь прицеливание. Когда я крутил квары chase_right/left, камера уезжала куда надо и прицел тоже. А вот игрок продолжал стрелять туда, где рыньше находился прицел.
//==========================
// 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;
Next Day GetChaseOrigin обновляет vieworg, так что после неё ставь.
И картинки конверти в JPG перед выкладыванием.
Добавлено 06-08-2020 в 21:49:
VectorMA похоже в ксаше нету, возьми её в спирите и целиком размести где-то над ThirdPersonRefDef. VectorMA это три строчки, причём она бывает со звёздочками и без, попробуй что заработает.
Вообще я бы как начинающий, пока на Спирите и остался а не лез сразу в Ксаш.
Добавлено 06-08-2020 в 22:00:
Ku2zoff для этих целей можно утащить код из дядемишиного танка, где флаг Match Target.
VectorMA( pparams->vieworg, pparams->right, -50.0, pparams->vieworg );///ставил в разные места функции
staticfloat 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 С картинками понял если что то в .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 что то вообще не понял.
В квейк лезть я там вообще потеряюсь.
Да блин я думал задача из простых ,но вожусь я с ней фиг знает сколько и чем дальше тем не легче.!
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 писал: Да блин я думал задача из простых ,но вожусь я с ней фиг знает сколько и чем дальше тем не легче.!
Ну не поваляешь не поешь. Всё всегда устроено не так как мы ожидаем.
// 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;