#1
15 ноября 2010 в 12:59
Здравствуйте, уважаемые квакеры! я уже давно сижу на этом форуме, но вот только ейчас решил зарегиться. я души не чаю в ку2, но в технической части ещё плоховато разбираюсь. но поэтому я здесь. в данный момент я и ещё несколько человек задумались над созданием игры на двиге ку2,задумка серьёзная, но людей, как обычно не хватает. я пока только начал изучать программирование (но исходники прочитал уже давно) и мне нужна помощь знающих людей, которые помогут мне разобраться в коде и предложат решения в трудных (а порой и не очень) ситуациях. хотелось бы заодно перенять опыт, так сказать)<br /><br />за основу мы взяли 3.23, там уже есть некоторые простые изменения, но при этом не сильно изменен рендерер и проч. я не ставлю целью сделать очень крутую графику как в q2xp или bers@q2, но, естественно, некоторые улучшения произвести всё же нужно. первое что я попытался сделать, это включить tga текстуры, это выглядело самым простым. банально заменив в glmodel.c <br />
if (next > 0)<br /> out->next = loadmodel->texinfo + next;<br /> else<br /> out->next = NULL;<br /> Com_sprintf (name, sizeof(name), "textures/%s.wal", in->texture);<br />на<br />
if (next > 0)<br /> out->next = loadmodel->texinfo + next;<br /> else<br /> out->next = NULL;<br /> Com_sprintf (name, sizeof(name), "textures/%s.tga", in->texture);<br />текстуры подключились, но при этом в игре не масштабировались, а рисовались в реальном размере. :-<br />текстуры подключились, но при этом в игре не масштабировались, а рисовались в реальном размере. :-[<br />подскажите пожалуйста, как правильно прикрутить 24-32 битные текстуры?
#2
15 ноября 2010 в 18:18
Здравствуй k-sys.<br /><br />Советую почаще заглядывать в сурсы движков, которые уже умеют это. ;)<br />Смотрим в q2bers функцию Mod_LoadTexinfo:<br />
if (next > 0)<br /> out->next = loadmodel->texinfo + next;<br /> else<br /> out->next = NULL;<br /> ...<br /> Com_sprintf (name, sizeof(name), "textures/%s", in->texture); /// Berserker: грузим любую графику, а не только WAL<br /> out->image = GL_FindImage (name, it_wall, false, 0, false, 3);<br /> ...<br /> if (out->image->filetype != file_wal)<br /> out->flags |= SURF_NEWTEX;<br /><br />флаг SURF_NEWTEX - признак того, что текстура новая и требуется пересчёт текстурных координат.<br />Далее копай GL_BuildPolygonFromSurface, где новые текстуры масштабируются.<br />Короткое пояснение: если текстура из textures/e1u2/ (например), то берётся инфа о размерах старой текстуры, чтоб вычислить масштаб новой. См. код, думаю разберешся ;D<br /><br />
#3
16 ноября 2010 в 10:06
текстуры подключились, но при этом в игре не масштабировались, а рисовались в реальном размере. <br />подскажите пожалуйста, как правильно прикрутить 24-32 битные текстуры?<br />Смасштабировать загружемую текстуру очень просто.<br />Надо считать размер ориг wal текстуры и применить его на хайрез<br /><br />
Mod_LoadTexinfo<br />--------------<br /><br /> for (i = 0; i < count; i++, in++, out++) {<br /><br />---------------<br /><br />// grab original texture size for override textures<br /> Com_sprintf(name, sizeof(name), "textures/%s.wal", in->texture);<br /> out->image = GL_FindImage(name, it_wall, false);<br /><br /> if (!out->image) {<br /> // failed to load WAL, use default<br /> Com_Printf("Couldn't load %s\n", name);<br /><br /> out->image = GL_FindImage("pics/noimage.tga", it_pic, false);<br /><br /> if (!out->image)<br /> out->image = r_notexture;<br /><br /> // no normal/glow map<br /> continue;<br /> }<br /> <br /> // get file name without path<br /> purename = COM_SkipPath(in->texture); <br /><br /> // check if we have something to override with<br /> Com_sprintf (name, sizeof(name), "overrides/%s.tga", purename);<br /> image = GL_FindImage(name, it_wall, false);<br /> <br /> if (!image) {<br /> Com_sprintf (name, sizeof(name), "overrides/%s.dds", purename);<br /> image = GL_FindImage(name, it_wall, false);<br /> }<br /><br /> // scale override texture size<br /> if (image) {<br /> image->width = out->image->width;<br /> image->height = out->image->height;<br /><br /> // use override instead of WAL<br /> out->image = image;<br /> }<br /><br />---------------------<br />