jeank
43 постов
Карма: 4
#1 27 ноября 2009 в 21:53
Всем привет, у меня есть одна проблема: <br /><br />Делаю ретекстур для hexen2, для работы портом jsHexen2, который является, видимо, симбиозом частей glquake, quake2, tomaz qmb и т.п..<br />По графике этот порт, конечно, далеко не самый продвинутый, но для HexenII лучшего я не встретил.<br /><br />И главный косяк - не обрабатываются полигоны за поверхностью лавы, рендер ничего не отображает, вернее отображает лапшу из смежных текстур.<br /><br />Я не силен в с, залез в исходники, попробовал разобраться и понял, что с нуля это сделать крайне непросто.<br />Мне&nbsp; бы хотя бы какую наколку получить, где искать...<br /><br />Как понимаю, выхода два - либо сделать лаву полностью непрозрачной (но я не знаю, какой параметр её характеризует, в gl_surf.c есть<br />параметры SURF_DRAWTURB и DRF_TRANSLUCENT, возможно это они), либо сделать принудительное отображение полигонов за поверхностью лавы (как понимаю, полигон лавы отмечен как непрозрачный, и как их разделить с другими я не знаю).<br /><br />В общем, если кто сталкивался с этой проблемой, пожалуйста помогите, хотя бы дайте направление, где копать.<br /><br />Заранее благодарю. Потому как пока что мои усилия завершаются либо тем, что лава и вода в принципе не обрабатываются, вместо них белый полигон, либо артефакты лавы меняют вид и частоту мерцания, но по-прежнему сидят на месте...
Берсеркер
2326 постов
Карма: 218
#2 28 ноября 2009 в 04:29
привет<br />
И главный косяк - не обрабатываются полигоны за поверхностью лавы, рендер ничего не отображает, вернее отображает лапшу из смежных текстур.
<br />можно на картинку глянуть?
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
QuakeZombie
133 постов
Карма: 18
#3 28 ноября 2009 в 05:52
хм может не то -но похожий эффект есть в ГЛку1 - если включить прозрачню воду и не выклюсить &quot;виз&quot; то смотря в воду/лаву и пр.видно мерцающую размязню из уже &quot;виденого&quot; либо если прямо смотреть то просто мерцние <br />вот скрин такого в ку1<br /><br /><br />если это именно то,то в ку1 это происходит так как фича которая оптимизирует мапы - определяет что игрок откуда видит - чтоб обрабатывать только то что видит игрок а не весь левел,так вот изначально в ку1 вода не прозрачная, те VIS считает что игрок не видит что под/над водой и когда включаешь прозрачность,то там тупо ничего &quot;нет&quot;(виз отсек то что над/под водой) и вот собствено то и происходит<br />хотя если мне не изменяет памят хексен2 сделан на движке ку2,а в ку2 прозрачная вода уже &quot;своя&quot; есть
Берсеркер
2326 постов
Карма: 218
#4 28 ноября 2009 в 07:45
vis-хак &quot;прозрачная вода в quake&quot; основан на отказе от использования vis-data, но это влёчет за собой уменьшение скорости рендеринга.<br />про ку1 не скажу, не знаю, а в ку2, чтобы сменить непрозрачную воду на прозрачную, требуется пересоздание vis-data.
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
Barnes
1979 постов
Карма: 153
#5 28 ноября 2009 в 08:04
попробуй просто отключить блендинг водных поверхностей
Какой богатый внутренний мир! Дай-ка посмотрю.....
jeank
43 постов
Карма: 4
#6 28 ноября 2009 в 08:21
Вот такая картина получается, там правда от наложения shiny текстуры свечения изображение выглядет как выгоревшее, но по развороту явно видно, что ничего за поверхностью лавы не обсчитывается:<br /><br /><br /><br />Вот сами исходники этого порта, я пробовал копаться и в итоге дошел до того, что видимо, искать надо в gl_surf.c , но так ли это - не знаю. Там много функций, и я копался вот в этих:<br /><br />void R_DrawWaterSurfaces (void){......}<br />void DrawGLWaterPoly (glpoly_t *p);<br />void DrawGLWaterPolyMTexLM(glpoly_t *p);<br />void DrawGLPolyMTex (glpoly_t *p);<br />void XP_DrawTextureChains (void){......}<br />void DrawTextureChains (void){......}<br />void R_DrawSequentialPoly (msurface_t *s){......}<br />void R_DrawSequentialPolyMTex (msurface_t *s){......}<br />void R_DrawSequentialChromePoly (msurface_t *s){......}<br /><br />Если это как-то поможет, на старых видеокартах поколения GF3 при настройках ползунка прозрачности воды в положение &quot;непрозрачно&quot; этот баг пропадает, а вот на всех новых лава при любых положениях выгорает и наворачивает на себя полигоны границ.
jeank
43 постов
Карма: 4
#7 28 ноября 2009 в 08:22
[quote author=Barnes link=topic=597.msg13040#msg13040 date=1259395451]<br />попробуй просто отключить блендинг водных поверхностей<br />[/quote]<br /><br />Это работает, но только на старых видеокартах.
Barnes
1979 постов
Карма: 153
#8 28 ноября 2009 в 12:11
ссылка мертвая<br />Forbidden<br />You don&#39;t have permission to access /files/hexen2/jsglh2mp_src.zip on this server.
Какой богатый внутренний мир! Дай-ка посмотрю.....
jeank
43 постов
Карма: 4
#9 29 ноября 2009 в 16:08
Да, сорри, напрямую почему-то не пускает.... вот тут в разделе download сорс есть - http://jurajstyk.host.sk/<br />Ну и естественно masm для компиляции нужен...<br /><br />Там хотя бы подскажите, в какой функции разбираться.<br />На форуме ravengames был товарищ, который частично проблему с лавой вроде как решил, но он уже давно потерялся и ничего не выложил :(<br /><br />Заранее благодарю.
jeank
43 постов
Карма: 4
#10 03 декабря 2009 в 15:20
Ладно, попробую ковыряться сам... <br />Кое что несложным оказалось - баг glquake с ограничением на 30 режимов решился простейшим способом, и модуль меню более-менее понятен, зато появились новые вопросы:<br /><br />Для управления анизотропной фильтрацией, как понимаю, надо подключать glext_h от opengl sdk, который уже знает про GL_TEXTURE_MAX_ANISOTROPY_EXT и т.п.<br />Как понимаю, надо заменить ссылки на старые хэдеры хэдерами из SDK, и вопрос - совместимы ли они обратно, не придется ли переписывать все обращения к функциям, а также вопрос - можно ли оставлять подключенными старые GL хэдеры (gl\gl.h , gl\glu.h), подключая новые?<br /><br />И еще вопрос - я решил изменить в glhexen разрешение, сделал для этого менюшку, добавил cvar_t переменные, которые сохраняются в конфиге, но вот при запуске видеосистемы они при инициализации Cvar_RegisterVariable еще не сгружают данные из конфига и остаются в дефолтных значениях. Это можно как-то вылечить малой кровью?<br /><br />Только тапками плиз не бейте, я еще новичок в C и вообще в движке q, я по профилю вообще в области баз данных ковыряюсь...