![]() |
Показать все 29 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Half-Life world model (https://hlfx.ru/forum/showthread.php?threadid=2868)
Half-Life world model
Рисую в cl_dll в HUD_DrawTransparentTriangles ребра карты кодом:
1 | model_t *WorldModel = gEngfuncs.GetEntityByIndex( 0 )->model; |
2 |
3 | glBegin( GL_LINES ); |
4 | for( int i = 0; i < WorldModel->numedges; i++ ) |
5 | { |
6 | glVertex3fv( WorldModel->vertexes[ WorldModel->edges[ i ].v[ 0 ] ].position ); |
7 | glVertex3fv( WorldModel->vertexes[ WorldModel->edges[ i ].v[ 1 ] ].position ); |
8 | } |
9 | glEnd( ); |
1 | for( int i = 0; i < WorldModel->numsurfaces; i++ ) |
2 | { |
3 | msurface_t *pface = &WorldModel->surfaces[ i ]; |
4 |
5 | for( int o = 0; o < pface->numedges; o++ ) |
6 | { |
7 | ... |
8 | } |
9 | } |
полигон формируется так
1 | int i, lindex; |
2 | float *vec; |
3 |
4 | for( i = 0; i < fa->numedges; i++ ) |
5 | { |
6 | lindex = loadmodel->surfedges[fa->firstedge + i]; |
7 |
8 | if( lindex > 0 ) vec = loadmodel->vertexes[loadmodel->edges[lindex].v[0]].position; |
9 | else vec = loadmodel->vertexes[loadmodel->edges[-lindex].v[1]].position; |
10 | glVertex3fv( vec ); |
11 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Всё заработало после того как я вытащил из паранои com_model.h
В сдк структуры нодов, листов и тд для програмного рендера, а они оказывается отличаются от аппаратного.
Я в шоке от такой подляны...
А вот интересно, в паранйе они этот файлик сами обновляли, или гдето надыбали?
Там даже комментарий сверху:
// 06/25/2002 MAH
// This header file has been modified to now include the proper BSP model
// structure definitions for each of the two Quakeworld client renderers:
// software mode and GL mode. Originally, Valve only supplied it with
// the software mode definitions, which caused General Protection Fault's
// when accessing members of the structures that are different between
// the two versions. These are: 'mnode_t', 'mleaf_t', 'msurface_t' and
// 'texture_t'. To select the GL hardware rendering versions of these
// structures, define 'HARDWARE_MODE' as a preprocessor symbol, otherwise
// it will default to software mode as supplied.
Стоит 2002 г. но дата изменения файла - 2007
n00b в ксаше достоверный com_model.h
Правда ксаш сам кое-какие переменные под себя определяет, но хл их все равно не юзает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ок, спасибо, посмотрю.
Чтоб не создавать лишних тем спрашиваю сдесь:
Почему время хранят во флоатах? просто я сейчас наткнулся на сервер, на котором карта не менялась 1 - 2 недели, так там изза переполнения флоата все жутко дергалось... Почему бы не хранить время в интах в миллисекундах?
Работать будет 49,710269(629) дней, с точностью в миллисекунду
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Через что лучше получать время? И как сделано в хл?
timeGetTime( ) на пример не очень точный, а на PerformanceCounter много плохого пишут
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Значит можно не боятся. А частоту его каждый кадр тоже смысла нет получать? Она невзначай не поменяется ?
таймер из сорса (и ксаша тожы)
1 | double Sys_DoubleTime( void ) |
2 | { |
3 | static LARGE_INTEGER g_PerformanceFrequency; |
4 | static LARGE_INTEGER g_ClockStart; |
5 | LARGE_INTEGER CurrentTime; |
6 |
7 | if( !g_PerformanceFrequency.QuadPart ) |
8 | { |
9 | QueryPerformanceFrequency( &g_PerformanceFrequency ); |
10 | QueryPerformanceCounter( &g_ClockStart ); |
11 | } |
12 | QueryPerformanceCounter( &CurrentTime ); |
13 |
14 | return (double)( CurrentTime.QuadPart - g_ClockStart.QuadPart ) / (double)( g_PerformanceFrequency.QuadPart ); |
15 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да я уже посмотрел в ксаше, вот и возник вопрос про частоту. Значит сделаю так. Спасибо.
__________________
XaeroX максимальное разрешение - 1 миллисекунда.
QueryPerfomanceCounter всяко точнее.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я тут над квейком 2 издевался, решил все ускорить, заменил:
curtime = timeGetTime() - base; |
curtime = timeGetTime() * 100 - base; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Делаю трейс по прицеливанию игрока - в основном, PointContent точки прицеливания идет CONTENT_EMPTY ( -1 ). Но иногда проскакивает CONTENT_SOLID ( -2 ), причем в основном на наклонных поверхностях.
Для чего нужен этот CONTENT_SOLID?
всмысле, для чего нужен?
это значит что в данной конкретной точке твёрдая поверхность.
Следует еще понимать, что клипноды строятся аппроксимацией ббоксов для наклонных поверхностей, поэтому подобные вещи неизбежны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я тут полезную картинку нарисовал, на случай если вдруг непонятно.
Добавлено 14-06-2011 в 23:01:
ЗЫ. отсюда же происходит и эпический упор в невидимую стенку при наклонных поверхностях, со включенным -clipeconomy mode.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Спасибо большое, теперь я уверен что понял верно
Мне примерно такая картинка пришла в голову ещё до того как я вопрос задал. Я потихоньку водил прицелом по наклонной двери и PointContent был по очереди то -1, то -2.
В pm_shared есть код, который отвечает за сглаживание подобных вещей, поэтому игрок не замечает что по сути бежит по маленьким ступенькам.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я тут наляпал карту, в ней коридорчик. Если с 1 стороны смотреть - рисует 1600 wpoly, задержка 2мс, если с другой - 1400. Я решил с фонариком пробежаться с 1 конца на другой, попутно все освещая. Добежал, повернулся, и начались тормоза. Смотрю на кол-во полигонов, думал в их колличестве дело - оказалось их даже меньше чем на другом конце, посмотрел на задержку - 8мс! Тут уменя кончился фонарик. Тык, и тормозить перестало, задержка упала до 2 мс. Здрасте думаю, из-за фонарика чтоли такие тормоза? На других картах, например на арканосе, не лагал же этот кривой фонарик, даже в месте где и вполи и еполи под 10000! Включаю его заново, тормозов нет. Что за ерунда думаю... Ну решил повторить пробежку. Стал светить на все подряд. И чем больше я водил по разным фейсам, тем больше начинало тормозить. Выключил фонарик - опять 2мс. Получается, если фейс осветил длайт, то для этого фейса всеравно будет обновлятся лайтмапа, пока длайт не кончится, даже если фейс им уже не освещается? Или этот баг только уменя? ( что наврятли конечно )
Добавлено 30-06-2011 в 11:20:
Проверил под ксашем, там такого вроде нет ( не удивительно конечно ), но фонарик наглым образом светит не туда где прицел, не в центр экрана, а заметно ниже
n00b ну я прямо знаю какой там у тебя фонарик
Если из первокваки, то там в каждом сурфейсе есть dlight_cached и dlightframe, которые, собственно для того и используются, чтобы обновление текстур не происходило каждый кадр. Длайт сместился - кэш обновился, длайт стоит на месте - текстуры не обновляются.
А твоя ситуация похожа на то, что у тебя каждая текстурка, которой коснулся длайт начинает обновляться, пока кол-во активных длайтов не станет равным нулю. Ищи, где в кэше накосячил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как определяется цвет подводного тумана? В ксаше полазил, нашел что цвет берется из текстуры, только как он определяется не понял.
1 | // check for half-life water texture |
2 | if( hl_texture && ( mip.name[0] == '!' || !Q_strnicmp( mip.name, "water", 5 ))) |
3 | { |
4 | // grab the fog color |
5 | image.fogParams[0] = pal[3*3+0]; |
6 | image.fogParams[1] = pal[3*3+1]; |
7 | image.fogParams[2] = pal[3*3+2]; |
8 |
9 | // grab the fog density |
10 | image.fogParams[3] = pal[4*3+0]; |
11 | } |
Говорят это в мануале по текстурам написано.
Третий цвет в палитре = цвет подводного тумана. А четвертый цвет в палитре (красный канал) - это плотность тумана.
Опять же, это не я придумал, так в халфе.
Кстати. Сможешь зачинить туман? А то, когда лифов много под водой, он выключается переодически.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
он не только выключается, он ещё почему то модели и мир разным цветом туманит. такой же баг в хл2 был, но его пофиксили потом.
thambs да зачем сюда? Есть же специальная тема для багов:
http://www.hlfx.ru/forum/showthread...=&threadid=2810
А то вы про нее забыли.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 13:27. | Показать все 29 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024