HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- [Тутор] Кастомный фов для вьюмодели (https://hlfx.ru/forum/showthread.php?threadid=2050)
Отправлено Дядя Миша 07-01-2010 в 13:48:
 [Тутор] Кастомный фов для вьюмодели
Ко мне вчера в аську постучалось несколько человек и все вдруг попросили сделать кастомный fov для вьюмодели в халфе.
Наверное это был какой-то праздничный флэшмоб.
Собственно говоря проблема заключается в неправильном отображении вьюмоделек из хл2 где имелся кастомный фов и его можно было крутить.
Так или иначе - я выполнил их просьбу и написал простенький код который делает желаемое.
Постить сюда исходники не буду - смотрите рар-хив.
Собственно код очень простой - мы выбираем проективную матрицу, сохраняем текущую, и загружаем собственную в момент отрисовки вью-модели. А затем восстанавливаем основную.
FOV меняется консольной переменной cl_viewmodel_fov и работает только для OpenGL рендера (ну впрочем как и всегда).
О том, что кастомный FOV включен нас информирует строчка в консоли
CStudioModelRenderer: enable custom fov (в самом верху).
В рар-хиве изменные файлы оригинального сдк+скомпиленная дллка.
Наслаждайтесь 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено BeFore 07-01-2010 в 14:18:
 
Дядя Миша 
Ага, помню я у тебя тоже спрашивал несколько месяцев назад 
Есть еще другой вариант как сделать viewmodel_fov, но результат один и тот-же.
Отправлено Дядя Миша 07-01-2010 в 16:01:
 
Цитата:
BeFore писал:
Есть еще другой вариант как сделать viewmodel_fov, но результат один и тот-же.
расскажи что за вариант?
Добавлено 07-01-2010 в 19:01:
А вот вам исправленная и дополненная версия 
В этом коде учитывается текущий fov (например для арбалета), корректируется перспектива для карт с кастомным MaxRange
и положение аттачментов (теперь рисуются правильно).__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Дядя Миша 07-01-2010 в 17:23:
 
И еще один маленький (последний) фикс - трипмайны на стенках глючили.
Ошибся я малость в коде.
На этом позвольте откланяться - больше я к этому коду не вернусь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено PoD-Stas 07-01-2010 в 17:37:
 
Дядя Миша это рассчитывается по формуле 
viewer distance = (screenwidth)/(2*tan(FOV/2)) ?
И вопрос в ХЛ2 вроде как не только размещение вью модели меняется, или не так?
Отправлено Дядя Миша 07-01-2010 в 20:28:
 
Цитата:
PoD-Stas писал:
это рассчитывается по формуле
Что ЭТО ? 
Цитата:
PoD-Stas писал:
И вопрос в ХЛ2 вроде как не только размещение вью модели меняется, или не так?
Понятия не имею как в хл2. Народ говорит что все правильно.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено PLut 07-01-2010 в 20:32:
 
ААА!! Ты крут! Спасибо! Я долго мучался и делал сам вьюмодел_фов и сделал, БиФор про мой способ говорит. Я в StudioDrawModel выставлял матрицу проекции для вьюмодели и возращал.
У моего способа есть слабость - аттачменты на фове 90 остаются вродь, вообщем маззлфлэш не там где надо 
__________________
Base Defense on Steam, ModDB
Отправлено Дядя Миша 07-01-2010 в 20:42:
 
Цитата:
PLut писал:
Я в StudioDrawModel выставлял матрицу проекции для вьюмодели и возращал.
А я по твоему как сделал? Вы хоть в исходники загляните сперва, а потом умничайте.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено PLut 07-01-2010 в 20:53:
 
Да я скачал только что 
__________________
Base Defense on Steam, ModDB
Отправлено XaeroX 07-01-2010 в 21:19:
 
PLut Ты и первый пост не читал, надо полагать.
Цитата:
Дядя Миша писал:
мы выбираем проективную матрицу, сохраняем текущую, и загружаем собственную в момент отрисовки вью-модели. А затем восстанавливаем основную.
Чукча, как известно, не читатель - ему бы поскорее камент зафигачить 
__________________
Отправлено PLut 07-01-2010 в 23:26:
 
Да, поторопился  
 
Кстати по поводу фишек из хл2, расскажите пожалуйста о инертном смещении оригина вьюмодели при изменении направления обзора 
Ну или просто: отставание вьюмодели когда вертишь башкой.
Расскажите как сделать это можно и вообще какие способы.
__________________
Base Defense on Steam, ModDB
Отправлено FiEctro 08-01-2010 в 10:00:
 
PLut 
player.h
C++ Source Code:
| 2 | float posiciondemanos_abajo; | 
| 3 | float posiciondemanos_adentro; | 
| 4 | float posiciondemanos_medio; | 
 
client.cpp - ClientCommand()
C++ Source Code:
| 1 | else if ( FStrEq(pcmd, "iron" ) ) | 
| 3 |   if ( GetClassPtr((CBasePlayer *)pev)->m_bIron ) | 
| 4 |     GetClassPtr((CBasePlayer *)pev)->m_bIron = FALSE; | 
| 6 |     GetClassPtr((CBasePlayer *)pev)->m_bIron = TRUE; | 
 
player.cpp - Prethink()
C++ Source Code:
| 2 | pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 ); | 
| 6 | if ( m_Activity == ACT_RELOAD || m_Activity == ACT_HOP ) | 
| 11 |   //change weapon's aiment | 
| 12 |   posiciondemanos_abajo = -1.0; | 
| 14 |   if(posiciondemanos_medio <= 3.4) | 
| 15 |     posiciondemanos_medio += 0.12; | 
| 17 |   posiciondemanos_adentro = 0.0; | 
| 19 |   if(posiciondezoom >= 55.0) | 
| 20 |     posiciondezoom -= 1.0; | 
| 23 |   g_engfuncs.pfnSetClientMaxspeed( ENT( pev ), 120 ); | 
| 25 | if ( posiciondemanos_abajo >= 0.0 ) | 
| 26 |   posiciondemanos_abajo -= 0.1; | 
| 28 | if(posiciondemanos_abajo <= 0.0) | 
| 29 |   posiciondemanos_abajo = 0.0; | 
| 31 | if ( posiciondemanos_adentro >= 0.0 ) | 
| 32 |   posiciondemanos_adentro -=0.1; | 
| 34 | if(posiciondemanos_adentro <= 0.0) | 
| 35 |   posiciondemanos_adentro = 0.0; | 
| 38 | if ( posiciondemanos_medio > 0.0 ) | 
| 39 |   posiciondemanos_medio -= 0.1; | 
| 41 | if ( posiciondemanos_medio < 0.0 ) | 
| 42 |   posiciondemanos_medio += 0.1; | 
| 44 | if(posiciondezoom < 90)//fix | 
| 47 | CLIENT_COMMAND(pClient, "scr_ofsz %f\n", posiciondemanos_abajo);//down | 
| 48 | CLIENT_COMMAND(pClient, "scr_ofsx %f\n", posiciondemanos_adentro);//back | 
| 49 | CLIENT_COMMAND(pClient, "scr_ofsy %f\n", posiciondemanos_medio);//back | 
| 51 | CLIENT_COMMAND(pClient, "default_fov %f\n", posiciondezoom);//down | 
| 54 |   //change weapon's aiment | 
| 55 |   posiciondemanos_abajo = -1.0; | 
| 57 |   if(posiciondemanos_medio <= 3.4) | 
| 58 |     posiciondemanos_medio += 0.12; | 
| 60 |   posiciondemanos_adentro = 0.0; | 
| 62 |   if(posiciondezoom >= 55.0) | 
| 63 |     posiciondezoom -= 1.0; | 
| 66 |   g_engfuncs.pfnSetClientMaxspeed( ENT( pev ), 120 ); | 
| 70 |   g_engfuncs.pfnSetClientMaxspeed( ENT( pev ), CVAR_GET_FLOAT( "sv_maxspeed") ); | 
 
C++ Source Code:
| pEntity = FindEntityForward( this ); | 
  
после
C++ Source Code:
На деле не проверял, так что если не пашет то ой.__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено PLut 08-01-2010 в 10:10:
 
1. Код из АМ
2. Это код ironsight (прицел с мушки)
3. Здесь не оригин смещается, а сама камера, как я понял...
Вот видео того о чем я говорю: http://www.youtube.com/watch?v=eUiNLldsfW0
Смотреть на вьюмодельку. В хл1 она не отстает от прицела и двигается топорно вместе с камерой, а в хл2 она плавно двигается.
__________________
Base Defense on Steam, ModDB
Отправлено Дядя Миша 08-01-2010 в 10:28:
 
PLut возьми код из управления раектой редемира.
Она там тоже напарвление не сразу меняет.
Пихни этот код с сервера на клиент и добавляй к углам пушки.
Получится та же самая иррунда. UTIL_ApproachAngle тебе надо или што-то такое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено PLut 08-01-2010 в 11:09:
 
Спасибо, сейчас буду разбираться.
__________________
Base Defense on Steam, ModDB