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

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 Ты и первый пост не читал, надо полагать.

Цитата:
Дядя Миша писал:
мы выбираем проективную матрицу, сохраняем текущую, и загружаем собственную в момент отрисовки вью-модели. А затем восстанавливаем основную.

Чукча, как известно, не читатель - ему бы поскорее камент зафигачить

__________________

xaerox on Vivino


Отправлено PLut 07-01-2010 в 23:26:

Да, поторопился

Кстати по поводу фишек из хл2, расскажите пожалуйста о инертном смещении оригина вьюмодели при изменении направления обзора
Ну или просто: отставание вьюмодели когда вертишь башкой.
Расскажите как сделать это можно и вообще какие способы.

__________________
Base Defense on Steam, ModDB


Отправлено FiEctro 08-01-2010 в 10:00:

PLut
player.h

C++ Source Code:
1
BOOL	m_bIron;
2
float posiciondemanos_abajo;
3
float posiciondemanos_adentro;
4
float posiciondemanos_medio;
5
float posiciondezoom;


client.cpp - ClientCommand()
C++ Source Code:
1
else if ( FStrEq(pcmd, "iron" ) )
2
{
3
  if ( GetClassPtr((CBasePlayer *)pev)->m_bIron )
4
    GetClassPtr((CBasePlayer *)pev)->m_bIron = FALSE;
5
  else
6
    GetClassPtr((CBasePlayer *)pev)->m_bIron = TRUE;
7
}


player.cpp - Prethink()
C++ Source Code:
1
edict_t *pClient;
2
pClient = g_engfuncs.pfnPEntityOfEntIndex( 1 );
3
 
4
CBaseEntity *pEntity;
5
 
6
if ( m_Activity == ACT_RELOAD || m_Activity == ACT_HOP )
7
  m_bIron = FALSE;
8
 
9
if ( m_bIron  )
10
{
11
  //change weapon's aiment
12
  posiciondemanos_abajo = -1.0;
13
 
14
  if(posiciondemanos_medio <= 3.4)
15
    posiciondemanos_medio += 0.12;
16
 
17
  posiciondemanos_adentro = 0.0;
18
 
19
  if(posiciondezoom >= 55.0)
20
    posiciondezoom -= 1.0;
21
 
22
  //change speed
23
  g_engfuncs.pfnSetClientMaxspeed( ENT( pev ), 120 );
24
}
25
if ( posiciondemanos_abajo >= 0.0 )
26
  posiciondemanos_abajo -= 0.1;
27
 
28
if(posiciondemanos_abajo <= 0.0)
29
  posiciondemanos_abajo = 0.0;
30
 
31
if ( posiciondemanos_adentro >= 0.0 )
32
  posiciondemanos_adentro -=0.1;
33
 
34
if(posiciondemanos_adentro <= 0.0)
35
  posiciondemanos_adentro = 0.0;
36
 
37
 
38
if ( posiciondemanos_medio > 0.0 )
39
  posiciondemanos_medio -= 0.1;
40
 
41
if ( posiciondemanos_medio < 0.0 )
42
  posiciondemanos_medio += 0.1;
43
 
44
if(posiciondezoom < 90)//fix
45
  posiciondezoom += 1;
46
 
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
50
 
51
CLIENT_COMMAND(pClient, "default_fov %f\n", posiciondezoom);//down
52
if ( m_bIron  )
53
{
54
  //change weapon's aiment
55
  posiciondemanos_abajo = -1.0;
56
 
57
  if(posiciondemanos_medio <= 3.4)
58
    posiciondemanos_medio += 0.12;
59
 
60
  posiciondemanos_adentro = 0.0;
61
 
62
  if(posiciondezoom >= 55.0)
63
    posiciondezoom -= 1.0;
64
 
65
  //change speed
66
  g_engfuncs.pfnSetClientMaxspeed( ENT( pev ), 120 );
67
}
68
else
69
{
70
  g_engfuncs.pfnSetClientMaxspeed( ENT( pev ), CVAR_GET_FLOAT( "sv_maxspeed") );
71
}


C++ Source Code:
pEntity = FindEntityForward( this );

после
C++ Source Code:
CBaseEntity *pEntity;


На деле не проверял, так что если не пашет то ой.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено 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


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

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