главная профиль правила регистрация календарь народ F.A.Q поиск выход
Forum Half-Life.ru : Powered by vBulletin version 2.2.8 Forum Half-Life.ru > Ручная работа > Мастерская > Совершенствуем env_sky (Copy-paste tutorial)
Страниц (2): [1] 2 »   Предыдущая Тема   Следующая Тема
Автор
Тема Создать Новую Тему    Ответить
Digital Brother
Ссущий на небеса

Дата Регистрации: May 2004
Проживает: Україна / Харків
Сообщений: 1265

Рейтинг:
42 голос(ов)
[42 голос(ов)]

Post Совершенствуем env_sky (Copy-paste tutorial)

Ентитя env_sky, поставляемая со Спиритом, обладает одним(?) недостатком: созданное с ее помощью небо выглядит одинаково в любой точке карты. Т.е. ведет себя как обычная картинка скайбокса, только созданная маппингом.
Сегодня мы перевернем представление мировой общественности об этой энтите! И сделаем мы это посредством элементарного кодинга:

Сначала мы изменим небесную мессагу:

Code:

[i]в [b]effects.cpp[/b] ( CEnvSky::Think () )[/i]

    
MESSAGE_BEGIN(MSG_BROADCASTgmsgSetSkyNULL);
        
WRITE_BYTE(1); // mode
        
WRITE_COORD(pev->origin.x); // view position
        
WRITE_COORD(pev->origin.y);
        
WRITE_COORD(pev->origin.z);
        
WRITE_LONG(pev->health*1000); 
    
MESSAGE_END();


[
i]в [b]player.cpp[/b] ( LinkUserMessages )[/i]

gmsgSetSky REG_USER_MSG"SetSky"11);


[
i]в [b]hud_msg.cpp[/b][/i]

void CHud :: MsgFunc_SetSky( const char *pszNameint iSizevoid *pbuf )
{
    
BEGIN_READpbufiSize );

    
m_iSkyMode READ_BYTE();
    
m_vecSkyPos.READ_COORD();
    
m_vecSkyPos.READ_COORD();
    
m_vecSkyPos.READ_COORD();
    
m_flSkyDist = (float)READ_LONG()/1000.0;
}



Не может быть сомнений, что переменная m_flSkyDist была описана как член класса CHud. Разумеется, float.

Ну и, наконец, то, ради чего мы собственно и напрягали пальцы над клавишами Ctrl, C и V:

Code:

[i]в [b]view.cpp[/b] ( V_CalcNormalRefdef )
в самом конце найдем подаренные нам от Лаури приятные строки:[/i]

    
pparams->vieworg[0] = gHUD.m_vecSkyPos.x;
    
pparams->vieworg[1] = gHUD.m_vecSkyPos.y;
    
pparams->vieworg[2] = gHUD.m_vecSkyPos.z

[
i]и с улыбкой на лице заменим их на вот эти:[/i]

    
pparams->vieworg[0] = gHUD.m_vecSkyPos.v_origin.x*gHUD.m_flSkyDist;
    
pparams->vieworg[1] = gHUD.m_vecSkyPos.v_origin.y*gHUD.m_flSkyDist;
    
pparams->vieworg[2] = gHUD.m_vecSkyPos.v_origin.z*gHUD.m_flSkyDist;



Когда нам станет совсем скучно, мы добавим нашу фичу в FGD:

Code:

@PointClass base(Targetname) = env_sky "Unreal-Tournament style sky view"
[
    
health(string) : "Diatance (Inversly, 0.0 = infinite)" "0.01"
]




Теперь, изменяя наш новый параметр в пристойных пределах, мы можем получить эффект определенного расстояния до небесных объектов. Особенно это полезно, если они - близстоящие дома.

Надеюсь, читая этот замечательный тутор, вы получили так же много удовольствия, как и я, когда его писал.


Copyright © нас - рать! Распростараняйте, изменяйте или издавайте эту информацию под своим именем как хотите.

__________________
*((&vecAdd.x)+m_iAxis) = 2.0*( *((&m_vecAxisPos.x)+m_iAxis) - *((&(pVertex->GetPosition().x))+m_iAxis) );

Сообщить модератору | IP: Записан
Сообщение: 116016

Старое Сообщение 13-08-2005 16:58
Digital Brother в офлайне Посмотреть Профайл Digital Brother Кликните для отправки Digital Brother Приватного Сообщения Посетите сайт Digital Brother! Найти все Сообщения от Digital Brother Добавить Digital Brother в Список Друзей Редактировать/Удалить Сообщение Цитировать Digital Brother
XaeroX
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Торонто
Сообщений: 13760
Выдал предупреждений: 496

Рейтинг:
126 голос(ов)
[126 голос(ов)]

Мне стало совсем скучно, и я, с улыбкой (нет, ухмылкой!) на лице утверждаю, что хотя идея и интересная, но о "совершенствовании" говорить здесь сложно. На самом деле небо - это небо, и оно никуда не смещается относительно тех жалких 8192 юнитов, которые игроку дозволено пробежать. Кто не верит - может выйти на улицу в лунную ночь и пробежать из одного конца города в другой
Так что совет: ставьте в ФГД-шнике по умолчанию ноль. Вы же знаете дурацкую привычку хаммера заменять ноль на дефолт-значение при открытии карты...

Добавлено 14-08-2005 в 00:13:

да, кстати... лучше наверное так:

pparams->vieworg[0] = gHUD.m_vecSkyPos.x + (v_origin.x - vecMapCenter.x)*gHUD.m_flSkyDist;

а vecMapCenter можно рассчитать на основе ббокса ворлдмодели или как-нибудь еще. Ну и неплохо бы проверочку на предмет выхода вида за пределы небесного куба...

__________________
First, close your eyes and pretend that a WGL specification actually existed. Maybe if we all concentrate hard enough, one will magically appear. © NVidia
The fastest way to compute is to precompute. © Humus

Сообщить модератору | IP: Записан
Сообщение: 116019

Старое Сообщение 13-08-2005 17:10
XaeroX в офлайне Посмотреть Профайл XaeroX Кликните для отправки XaeroX Приватного Сообщения Посетите сайт XaeroX! Найти все Сообщения от XaeroX Добавить XaeroX в Список Друзей Редактировать/Удалить Сообщение Цитировать XaeroX
Digital Brother
Ссущий на небеса

Дата Регистрации: May 2004
Проживает: Україна / Харків
Сообщений: 1265

Рейтинг:
42 голос(ов)
[42 голос(ов)]

quote:
На самом деле небо - это небо, и оно никуда не смещается...

я ж сказал - это для (цитирую) "близстоящих домов" и пр.
шо-то типа хл2шного...

Добавлено 13-08-2005 в 20:36:

з.ы. я делаю не "как лучше", а "как проще"

__________________
*((&vecAdd.x)+m_iAxis) = 2.0*( *((&m_vecAxisPos.x)+m_iAxis) - *((&(pVertex->GetPosition().x))+m_iAxis) );

Сообщить модератору | IP: Записан
Сообщение: 116023

Старое Сообщение 13-08-2005 17:35
Digital Brother в офлайне Посмотреть Профайл Digital Brother Кликните для отправки Digital Brother Приватного Сообщения Посетите сайт Digital Brother! Найти все Сообщения от Digital Brother Добавить Digital Brother в Список Друзей Редактировать/Удалить Сообщение Цитировать Digital Brother
XaeroX
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Торонто
Сообщений: 13760
Выдал предупреждений: 496

Рейтинг:
126 голос(ов)
[126 голос(ов)]

не, я понял... просто так надежнее будет .
А насчет ФГД ты все же учти... Неприятный это баг у хаммера.

__________________
First, close your eyes and pretend that a WGL specification actually existed. Maybe if we all concentrate hard enough, one will magically appear. © NVidia
The fastest way to compute is to precompute. © Humus

Сообщить модератору | IP: Записан
Сообщение: 116025

Старое Сообщение 13-08-2005 17:40
XaeroX в офлайне Посмотреть Профайл XaeroX Кликните для отправки XaeroX Приватного Сообщения Посетите сайт XaeroX! Найти все Сообщения от XaeroX Добавить XaeroX в Список Друзей Редактировать/Удалить Сообщение Цитировать XaeroX
Дядя Миша
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Кубань
Сообщений: 13445
Выдал предупреждений: 408

Рейтинг:
136 голос(ов)
[136 голос(ов)]

Digital Brother
1. это будет корежить fov при больших дистанциях.
2. небо действительно не должно смещаться - т.е. твоя затея скорее всего просто бесполезна
3. возможны глюки с выходом за пределы неба, что не есть хорошо.

Сообщить модератору | IP: Записан
Сообщение: 116029

Старое Сообщение 13-08-2005 18:01
Дядя Миша в офлайне Посмотреть Профайл Дядя Миша Кликните для отправки Дядя Миша Приватного Сообщения Найти все Сообщения от Дядя Миша Добавить Дядя Миша в Список Друзей Редактировать/Удалить Сообщение Цитировать Дядя Миша
Digital Brother
Ссущий на небеса

Дата Регистрации: May 2004
Проживает: Україна / Харків
Сообщений: 1265

Рейтинг:
42 голос(ов)
[42 голос(ов)]

g-cont
1. Нихрена не корежицца при нормальных значениях, а если поставить там 9999..., то ясен пень - будет корежицца! главное, что при нормальном использовании все работает досконально. Это я проверял, не бойтесь
2. Вы шо блин сговорились? Объясняю 3 раз: это нужно для того, чтобы близкие объекты скайбокса (дома, например) не казались нарисованными на нем. Пример: ХЛ2, каналы - бродим по каналам и видим вокруг модельные домики, причем, видим, что они не нарисованы, а стоят у этого канала... а на самом деле - это просто скайбокс!
Вот именно таким я и сделал спиритовский енв_скай.
3. такие глюки возможны только при: неправильном значении Diatance, при неправильном построении скайбокса, или при нЕпРавИльНОм передвижении игрока за пределы карты. Если кто считает себя полным неудачником, может добавить проверку на выход за пределы скайбокса

__________________
*((&vecAdd.x)+m_iAxis) = 2.0*( *((&m_vecAxisPos.x)+m_iAxis) - *((&(pVertex->GetPosition().x))+m_iAxis) );

Сообщить модератору | IP: Записан
Сообщение: 116039

Старое Сообщение 13-08-2005 19:14
Digital Brother в офлайне Посмотреть Профайл Digital Brother Кликните для отправки Digital Brother Приватного Сообщения Посетите сайт Digital Brother! Найти все Сообщения от Digital Brother Добавить Digital Brother в Список Друзей Редактировать/Удалить Сообщение Цитировать Digital Brother
Nicord
Dream On

Дата Регистрации: Nov 2003
Проживает: Russia->Omsk
Сообщений: 3875

Рейтинг:
38 голос(ов)
[38 голос(ов)]

Небо как раз должно смещаться. Если небо это домики как в Хл2.

Добавлено 14-08-2005 в 02:20:

Digital Brother +1

__________________
You got to lose to know how to win (C) Aerosmith (1973)

Сообщить модератору | IP: Записан
Сообщение: 116043

Старое Сообщение 13-08-2005 19:18
Nicord в офлайне Посмотреть Профайл Nicord Кликните для отправки Nicord Приватного Сообщения Найти все Сообщения от Nicord Добавить Nicord в Список Друзей Редактировать/Удалить Сообщение Цитировать Nicord
XaeroX
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Торонто
Сообщений: 13760
Выдал предупреждений: 496

Рейтинг:
126 голос(ов)
[126 голос(ов)]

quote:
Автор оригинала Digital Brother
Если кто считает себя полным неудачником, может добавить проверку на выход за пределы скайбокса


Ты уж прости, но я себя не считаю полным неудачником, однако проверки делаю всегда. И тебе советую, если ты этот код как тутор выкладываешь.

__________________
First, close your eyes and pretend that a WGL specification actually existed. Maybe if we all concentrate hard enough, one will magically appear. © NVidia
The fastest way to compute is to precompute. © Humus

Сообщить модератору | IP: Записан
Сообщение: 116058

Старое Сообщение 13-08-2005 19:40
XaeroX в офлайне Посмотреть Профайл XaeroX Кликните для отправки XaeroX Приватного Сообщения Посетите сайт XaeroX! Найти все Сообщения от XaeroX Добавить XaeroX в Список Друзей Редактировать/Удалить Сообщение Цитировать XaeroX
Дядя Миша
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Кубань
Сообщений: 13445
Выдал предупреждений: 408

Рейтинг:
136 голос(ов)
[136 голос(ов)]

Digital Brother
Ладно, возможно, что ты и прав.
тогда объясни мен плз такую вещь.
WRITE_LONG(pev->health*1000);
m_flSkyDist = (float)READ_LONG()/1000.0;

1.pev->health И ТАК передается на клиент без твоих мессаг.
2.зачем ее умножать на тыщщу, а после приема на клиенте делить обратно - можешь мне объяснить ?????
или у тебя маленькие числа теряются по дороге ?

Сообщить модератору | IP: Записан
Сообщение: 116101

Старое Сообщение 14-08-2005 07:08
Дядя Миша в офлайне Посмотреть Профайл Дядя Миша Кликните для отправки Дядя Миша Приватного Сообщения Найти все Сообщения от Дядя Миша Добавить Дядя Миша в Список Друзей Редактировать/Удалить Сообщение Цитировать Дядя Миша
BUzer
Модератор хрум-хрум

Дата Регистрации: Dec 2002
Проживает: Владивосток
Сообщений: 9118
Выдал предупреждений: 151

Рейтинг:
135 голос(ов)
[135 голос(ов)]

quote:
1.pev->health И ТАК передается на клиент без твоих мессаг.

Энтият env_skу вообще не передается на клиент, и уж тем более, ее pev->health
quote:
2.зачем ее умножать на тыщщу, а после приема на клиенте делить обратно - можешь мне объяснить ?????
или у тебя маленькие числа теряются по дороге ?

Да, они действительно теряются.. По сети флоаты передаются с меньшей точностью.

Сообщить модератору | IP: Записан
Сообщение: 116107

Старое Сообщение 14-08-2005 08:56
BUzer в офлайне Посмотреть Профайл BUzer Кликните для отправки BUzer Приватного Сообщения Посетите сайт BUzer! Найти все Сообщения от BUzer Добавить BUzer в Список Друзей Редактировать/Удалить Сообщение Цитировать BUzer
Дядя Миша
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Кубань
Сообщений: 13445
Выдал предупреждений: 408

Рейтинг:
136 голос(ов)
[136 голос(ов)]

quote:

Да, они действительно теряются.. По сети флоаты передаются с меньшей точностью.


Млиа, а я то-то думал, чего у меня туман глючит!
quote:

Энтият env_skу вообще не передается на клиент, и уж тем более, ее pev->health


да я понимаю, просто сам стараюсь юзать стандартные pev переменные, дабы не создавать лишние мессаги.
можно ей например нулевой спрайт поставить, чтобы передавалась

Сообщить модератору | IP: Записан
Сообщение: 116126

Старое Сообщение 14-08-2005 10:53
Дядя Миша в офлайне Посмотреть Профайл Дядя Миша Кликните для отправки Дядя Миша Приватного Сообщения Найти все Сообщения от Дядя Миша Добавить Дядя Миша в Список Друзей Редактировать/Удалить Сообщение Цитировать Дядя Миша
BUzer
Модератор хрум-хрум

Дата Регистрации: Dec 2002
Проживает: Владивосток
Сообщений: 9118
Выдал предупреждений: 151

Рейтинг:
135 голос(ов)
[135 голос(ов)]

quote:
можно ей например нулевой спрайт поставить, чтобы передавалась

Дык.. PVS.

К слову, pev->health как раз-таки не шлется для всех энтить подряд (см. delta.lst)

Сообщить модератору | IP: Записан
Сообщение: 116136

Старое Сообщение 14-08-2005 13:04
BUzer в офлайне Посмотреть Профайл BUzer Кликните для отправки BUzer Приватного Сообщения Посетите сайт BUzer! Найти все Сообщения от BUzer Добавить BUzer в Список Друзей Редактировать/Удалить Сообщение Цитировать BUzer
Дядя Миша
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Кубань
Сообщений: 13445
Выдал предупреждений: 408

Рейтинг:
136 голос(ов)
[136 голос(ов)]

BUzer
ну это легко поправить
да и ктому же есть и другие методы

Сообщить модератору | IP: Записан
Сообщение: 116140

Старое Сообщение 14-08-2005 13:24
Дядя Миша в офлайне Посмотреть Профайл Дядя Миша Кликните для отправки Дядя Миша Приватного Сообщения Найти все Сообщения от Дядя Миша Добавить Дядя Миша в Список Друзей Редактировать/Удалить Сообщение Цитировать Дядя Миша
Oба Глаза
- позывной Шурика П.

Дата Регистрации: Jan 2004
Проживает: в команде мода Red Alert
Сообщений: 1564

Рейтинг:
46 голос(ов)
[46 голос(ов)]

Руль! Jump da Punk Up
Digital Brother +1

__________________
H-L Red Alert мод - ralertmod.narod.ru/hlra-novosti.htm

Указатель объектов в Half-Life 1 на русском с нашего сайта (пока далеко не всех).

Сообщить модератору | IP: Записан
Сообщение: 116483

Старое Сообщение 16-08-2005 21:30
Oба Глаза в офлайне Посмотреть Профайл Oба Глаза Кликните для отправки Oба Глаза Приватного Сообщения Посетите сайт Oба Глаза! Найти все Сообщения от Oба Глаза Добавить Oба Глаза в Список Друзей Редактировать/Удалить Сообщение Цитировать Oба Глаза
XaeroX
Администратор Administrator

Дата Регистрации: Nov 2003
Проживает: Торонто
Сообщений: 13760
Выдал предупреждений: 496

Рейтинг:
126 голос(ов)
[126 голос(ов)]

quote:
Автор оригинала BUzer
quote:
1.pev->health И ТАК передается на клиент без твоих мессаг.

Энтият env_skу вообще не передается на клиент, и уж тем более, ее pev->health



Ну а в чем проблема? Либо можно поставить ей нулл.спр, или вручную AddToFullPack или что там подкорректировать...

__________________
First, close your eyes and pretend that a WGL specification actually existed. Maybe if we all concentrate hard enough, one will magically appear. © NVidia
The fastest way to compute is to precompute. © Humus

Сообщить модератору | IP: Записан
Сообщение: 116867

Старое Сообщение 19-08-2005 05:54
XaeroX в офлайне Посмотреть Профайл XaeroX Кликните для отправки XaeroX Приватного Сообщения Посетите сайт XaeroX! Найти все Сообщения от XaeroX Добавить XaeroX в Список Друзей Редактировать/Удалить Сообщение Цитировать XaeroX

Переводчик
транслита

Прикрепить Файл:
Максимальный Размер: 524288 байт

Допустимое расширение Файлов: gif jpg png txt zip jpeg rmf bsp rar
Время GMT. Текущее Время 22:16. Создать Новую Тему    Ответить
Страниц (2): [1] 2 »   Предыдущая Тема   Следующая Тема
Версия для Печати | Отправить страницу по Email | Подписаться на эту Тему

Перейти на:
Оценить эту Тему:

Правила Форума:
Вы Не можете Создавать Новые Темы
Вы Не можете Отвечать
Вы Не можете Прикреплять Файлы
Вы Не можете Редактировать Свои Сообщения
HTML код ВЫКЛ
vB код ВКЛ
Смайлики ВКЛ
[IMG] код ВКЛ
 



Copyright ©1999-2021 Half-Life.ru
Все права защищены Законодательством РФ.
Перепечатка материалов (в любом виде) с данного сайта
без письменного разрешения авторов запрещена.
HL DM Style for vBulletin © by: anno
Тех. площадка: Join-Stock Company "BIG Telecom"