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