#11
03 декабря 2009 в 15:38
я не рублю в движке ку1 но про анизотропию скажу.<br />просто в хедере напиши<br /><br />#ifndef GL_EXT_texture_filter_anisotropic<br />#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE<br />#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF<br />#endif<br /><br />первое устанавливает количество семплов анизотропии (ставим в gl_upload32) <br /><br />qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, r_anisotropic->value);<br /><br />а при помощи второго можно получить максимальное значение выборки<br />int max_aniso;<br />qglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_aniso);
#12
03 декабря 2009 в 17:25
Большое спасибо, сейчас буду пробовать 8)
#13
03 декабря 2009 в 18:25
Огромнейшее спасибо, всё работает!!!!!<br /><br />прописал в glquake.h, как вы написали, только в gl_upload32 вывел этот вызов только для mipmap уровней if (mipmap), иначе вместо меню был ровный белый фон, а старое, без mipmap, так и осталось: <br /><br />
if (mipmap)<br /> {<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 8);<br /> //glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min);<br /> //glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);<br /> }<br /> else<br /> {<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max);<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);<br /> }<br />
<br /><br />Надеюсь, так будет правильно? Статику я потом, конечно, уберу, это наспех для пробы поставил....
#14
03 декабря 2009 в 18:46
закоментил ты напрасно, тк это надстройка над би-триленейной фильтрацией<br /><br />if (mipmap)<br /> {<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 8);<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min);<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);<br /> }<br /> else<br /> {<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max);<br /> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);<br /> }
#15
03 декабря 2009 в 20:41
Понял, исправил, полез добавлять в меню. Спасибо большое.<br />Получается, ничего в коде для настроек фильтрации менять и не надо, достаточно просто ползунок влепить, меняющий aniso до max_aniso...<br /><br />А насчет инициализации переменных разрешения и глубины цвета, то в крайнем случае, можно пойти топорным путем, и просто добавить код, который прочешет конфиги на предмет строчек разрешения, но хотелось бы по-правильному...<br /><br />В общем, на повестке дня остаются только два вопроса - смена разрешения (хотя бы при перезапуске, менять как в q2 будет очень муторно, я заглянул как там и уже выпал в осадок), и эта слегка подзадолбавшая лава.... :)
#16
04 декабря 2009 в 18:24
Победил я изменение разрешения, правда самым топорным способом - принудительно гружу их из активного конфига через fopen / fscanf и пересохраняю...<br /><br />Остается проблема с лавов..... плииииз, если кто знает, как это победить, буду очень благодарен!!!
#17
05 декабря 2009 в 21:24
Победил лаву - решение, оказывается, двойное есть....<br /><br />Либо в R_RecursiveWorldNode отрисовывать невидимую область, либо в обработке текстур ставить ловушку типа все текстуры с именем на "*lava" делать непрозрачными.<br /><br />Первое вроде правильное, второе вроде как через жопу... Что делать, в меню выбор давать?<br /><br />Да, и еще - у поверхности лавы пустой указатель на texturechains - может так влепить непрозрачность?
#18
06 декабря 2009 в 08:33
хм а может сделать в настроках/консоли "регулятор прозраности" и если она нулевая,то лава тупо не прозраная,и за ней ниего не прорисовывается
#19
06 декабря 2009 в 08:57
У меня на лаву ловушка, тк я рендерю параллакс сурф с вертекс освещением<br /><br />
void R_RenderBrushPoly (msurface_t *fa)<br />{<br /> int maps;<br /> image_t *image;<br /> qboolean is_dynamic = false;<br /> char *purename;<br /> char noext[MAX_QPATH];<br /> <br /> image = R_TextureAnimation(fa->texinfo);<br /> purename = COM_SkipPath(image->name);<br /> COM_StripExtension(purename, noext);<br /><br /> c_brush_polys++;<br /><br /> image = R_TextureAnimation (fa->texinfo);<br /><br /> if (fa->flags & SURF_DRAWTURB)<br /> { <br /> GL_Bind( image->texnum );<br /><br /> // warp texture, no lightmaps<br /> GL_TexEnv( GL_MODULATE );<br /> qglColor4f( gl_state.inverse_intensity, <br /> gl_state.inverse_intensity,<br /> gl_state.inverse_intensity,<br /> 1.0F );<br /> <br /> if (!strcmp(noext, "brlava") && gl_state.arb_fragment_program)<br /> RenderLavaSurfaces(fa);<br /> else<br /> EmitWaterPolys(fa);<br /><br /> GL_TexEnv( GL_REPLACE );<br /><br /> return;<br /><br /> }<br /> else<br /> {<br /> GL_Bind( image->texnum );<br /><br /> GL_TexEnv( GL_REPLACE );<br /> }
#20
06 декабря 2009 в 10:52
Кстати, у меня чудеса с таким методом происходят.<br /><br />Когда я поставил на входе в EmitWaterPolysReflection (msurface_t *fa) (она тоже влияет на глюки лавы) вот такую ловушку:<br /><br />if (_strnicmp(fa->texinfo->texture->name,"*lava",5))<br /> Con_Printf(&fa->texinfo->texture->name);<br /><br />Мне в консоль тупо ничего не вывело. Закомментил if и мне вывело *lava001 *lava001 и так далее.<br /><br />А вот не лаву выводит "на ура" - и текстуры черепов, и воды, все что с * начинается, всё выводит.<br />Что вообще происходит - не понимаю... Может там пока обрабатывается строка, уже десять раз значение ячейки памяти меняется?