Ru/Camera Bob: Difference between revisions
No edit summary |
No edit summary |
||
(6 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{LanguageBar|title=Реалистичная камера}} | ||
|title=Реалистичная камера | |||
}} | |||
Этот туториал научит вас основам создания реалистичной камеры, когда игрок ходит/бегает. Результатом является довольно реалистичная симуляция качки головы игрока, которая подходит под стандартную скорость ходьбы игрока и звукам. | Этот туториал научит вас основам создания реалистичной камеры, когда игрок ходит/бегает. Результатом является довольно реалистичная симуляция качки головы игрока, ''которая подходит под стандартную скорость ходьбы игрока и звукам''. '''Не очень-то и подходит''', нужна более тонкая настройка по осям '''XYZ''', а то выглядит так, будто у игрока голова на резинке. | ||
Большое спасибо [http://forums.steampowered.com/forums/member.php?u=562817 sharkkk] и [http://forums.steampowered.com/forums/member.php?u=380894 Winston] с форумов Steam за их коды. Жаль форум старый уже мертв. | |||
Комментарий с дополнениями от [https://developer.valvesoftware.com/wiki/User:EclipseTheory EclipseTheory]: | |||
[ | Этот код работает в любой версии движка. 2007, OB, 2013. SP/MP. | ||
Собственно, обновлённый код ниже: | |||
== Код == | == Код == | ||
Line 15: | Line 11: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
// Camera Bob | // Camera Bob | ||
ConVar cl_viewbob_enabled ( "cl_viewbob_enabled", " | ConVar cl_viewbob_enabled("cl_viewbob_enabled", "0", 0, "Oscillation Toggle", true, 0, true, 1); | ||
ConVar cl_viewbob_timer | ConVar cl_viewbob_timer("cl_viewbob_timer", "10", 0, "Speed of Oscillation"); | ||
ConVar | ConVar cl_viewbob_scale_x("cl_viewbob_scale_x", "0.015", 0, "Magnitude of Oscillation"); | ||
ConVar cl_viewbob_scale_y("cl_viewbob_scale_y", "0.01", 0, "Magnitude of Oscillation"); | |||
ConVar cl_viewbob_scale_z("cl_viewbob_scale_z", "0.05", 0, "Magnitude of Oscillation"); | |||
</source> | </source> | ||
Мы добавили консольные команды для включения/отключения, контроля скорости и силы качки. | Мы добавили консольные команды для включения/отключения, контроля скорости и силы качки, которая тонко регулируется по осям XYZ. | ||
В этом же файле, найдите функцию void ''CGameMovement::WalkMove( void )'' и добавьте в самый вверх следующий код: | В этом же файле, найдите функцию void ''CGameMovement::WalkMove( void )'' и добавьте в самый вверх следующий код: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
//view bob code | |||
if (cl_viewbob_enabled.GetInt() == 1 && !engine->IsPaused()) | |||
{ | { | ||
float xoffset = sin( gpGlobals->curtime * cl_viewbob_timer.GetFloat() ) * player->GetAbsVelocity().Length() * | float xoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_x.GetFloat() / 400; | ||
float yoffset = sin( 2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat() ) * player->GetAbsVelocity().Length() * | float yoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_y.GetFloat() / 400; | ||
player->ViewPunch( QAngle( xoffset, yoffset, | float zoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_z.GetFloat() / 400; | ||
player->ViewPunch(QAngle(xoffset, yoffset, zoffset)); | |||
} | } | ||
//end view bob code | |||
</source> | </source> | ||
Вот это и добавит качку, которая будет вычислять скорость игрока и собственно применят ее. | Вот это и добавит качку, которая будет вычислять скорость игрока и собственно применят ее. | ||
{{ACategory|Programming}} | |||
{{ACategory|Tutorials}} | |||
Latest revision as of 06:54, 12 July 2024
Этот туториал научит вас основам создания реалистичной камеры, когда игрок ходит/бегает. Результатом является довольно реалистичная симуляция качки головы игрока, которая подходит под стандартную скорость ходьбы игрока и звукам. Не очень-то и подходит, нужна более тонкая настройка по осям XYZ, а то выглядит так, будто у игрока голова на резинке. Большое спасибо sharkkk и Winston с форумов Steam за их коды. Жаль форум старый уже мертв. Комментарий с дополнениями от EclipseTheory: Этот код работает в любой версии движка. 2007, OB, 2013. SP/MP. Собственно, обновлённый код ниже:
Код
В gamemovement.cpp, перед списком определений, около строки 65 добавьте:
// Camera Bob
ConVar cl_viewbob_enabled("cl_viewbob_enabled", "0", 0, "Oscillation Toggle", true, 0, true, 1);
ConVar cl_viewbob_timer("cl_viewbob_timer", "10", 0, "Speed of Oscillation");
ConVar cl_viewbob_scale_x("cl_viewbob_scale_x", "0.015", 0, "Magnitude of Oscillation");
ConVar cl_viewbob_scale_y("cl_viewbob_scale_y", "0.01", 0, "Magnitude of Oscillation");
ConVar cl_viewbob_scale_z("cl_viewbob_scale_z", "0.05", 0, "Magnitude of Oscillation");
Мы добавили консольные команды для включения/отключения, контроля скорости и силы качки, которая тонко регулируется по осям XYZ.
В этом же файле, найдите функцию void CGameMovement::WalkMove( void ) и добавьте в самый вверх следующий код:
//view bob code
if (cl_viewbob_enabled.GetInt() == 1 && !engine->IsPaused())
{
float xoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_x.GetFloat() / 400;
float yoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_y.GetFloat() / 400;
float zoffset = sin(2 * gpGlobals->curtime * cl_viewbob_timer.GetFloat()) * player->GetAbsVelocity().Length() * cl_viewbob_scale_z.GetFloat() / 400;
player->ViewPunch(QAngle(xoffset, yoffset, zoffset));
}
//end view bob code
Вот это и добавит качку, которая будет вычислять скорость игрока и собственно применят ее.