![]() |
Показать все 32 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Как добавить полноцветные текстуры в Gold Source (https://hlfx.ru/forum/showthread.php?threadid=4007)
Как добавить полноцветные текстуры в Gold Source
Где можно найти тутор или другую информацию по добавлению 32-битных текстур в Gold Source
__________________
[XDaemon dev.]
Если для обычного ХЛ, то действующий пример можно увидеть здесь:
http://www.moddb.com/mods/half-life...ld-singleplayer
Текстуры в вадах делаются равномерно-серыми (чтобы не создавать эффект наложения), а заменяющие их HD-текстуры (в формате TGA) подставляются методом подстановки detail-текстур. Для каждой карты создаётся одноимённый _detail.txt, в котором прописывается размещение и параметры наложения текстур. Основная папка для размещения detail-текстур - gfx, но можно положить их в любую папку внутри gfx, указав это в _detail.txt. И текстуры подставляются 24-битные, обычный полноцвет, а не 32-битные (с альфаканалом).
В _detail.txt общим списком через табуляцию указываются имя исходной текстуры в ваде, путь и имя TGA-текстуры, масштаб текстуры по ширине и высоте.
Для включения детальных текстур в игре используется консольная команда r_detailtextures 1, доступна только в Steam-версии ХЛ.
В Ксаше автоматически подставляются текстуры, имеющие одинаковое имя с исходным именем текстуры, без дополнительных конфигурационных файлов. Текстуры кладутся в папку materials\common\ (для применения данных текстур к любым картам), или materials\имя_карты\ (для применения данных текстур к конкретной карте). Текстуры для декалей размещаются в папке materials\decals\. Текстуры для моделей - в папке materials\models\имя_модели\ (для каждой отдельной модели свой отдельный набор текстур). Текстуры должны быть в формате TGA. Для транспарентных текстур (имеющим прозрачность) следует использовать 32-битные TGA с альфа-каналом. Остальные текстуры - 24-битные.
Для включения HD-текстур в игре используется консольная команда host_allow_materials 1 (или просто зайти в меню видеоопций и поставить галочку на пункте "Allow materials"), после чего следует перезапустить игру.
Действующий пример использования HD-текстур под Ксашем - Quake Remake + пак текстур QRP:
http://www.moddb.com/games/quake-re...v10-sfx-archive
http://www.moddb.com/mods/quake-rem...hd-textures-v10
TGA занимает много места, если бы формат PNG или DDS
__________________
[XDaemon dev.]
avegamer Юзай трините (Trinity Renderers), там dds.
__________________
Base Defense on Steam, ModDB
Вот выкладываю загрузчик CrazyRussian, кидать в клиентку.
Формат TGA.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
PLut DDS бесполезен. Он не робит
а что означает gEngfuncs.GetEntityByIndex(0) в сравнении с gEngfuncs.GetEntityByIndex(1)
__________________
[XDaemon dev.]
avegamer gEngfuncs.GetEntityByIndex(0) возвращает мир
__________________
-Brain is dead-
То есть что-бы определить текстуры для мира нужно использовать
model_t *world = gEngfuncs.GetEntityByIndex(0)->model
а текстуры для модели --
cl_entity_s *view = gEngfuncs.GetViewModel() ???
__________________
[XDaemon dev.]
avegamer ViewModel это руки с пушкой
__________________
-Brain is dead-
А каким образом определить текстуры энтити
__________________
[XDaemon dev.]
Что-то получилось, но нужно проверить. Спасибо FiEctro
Пока что только tga и world-текстуры
Делал так:
новый файл gl_texloader.cpp
//**************************************
#include "hud.h"
#include "cl_util.h"
#include "com_model.h"
#include <windows.h>
#include <gl/gl.h>
#include <gl/glext.h>
#pragma warning(disable:4018)
#pragma pack(push,1)
void UploadWorldHDTextures(void);
typedef struct
{
byte identsize; // size of ID field that follows 18 byte header (0 usually)
byte colourmaptype; // type of colour map 0=none, 1=has palette
byte imagetype; // type of image 0=none,1=indexed,2=rgb,3=grey,+8=rle packed
short colourmapstart; // first colour map entry in palette
short colourmaplength; // number of colours in palette
byte colourmapbits; // number of bits per palette entry 15,16,24,32
short xstart; // image x origin
short ystart; // image y origin
short width; // image width in pixels
short height; // image height in pixels
byte bits; // image bits per pixel 8,16,24,32
byte descriptor; // image descriptor bits (vh flip bits)
} TGA_HEADER;
#pragma pack(pop)
int glLoadTga(char* name,int dest)
{
// Длина файла и буфер для него
int len;
byte*buff=gEngfuncs.COM_LoadFile(name,5,&len); // Грузим файл
int width,height; // Размеры картинки
TGA_HEADER hdr; // Заголовок файла
if (!buff) // Если буфер=0, то файл не найден
{
return 0;
}
// Копируем заголовок в отдельную переменную
memcpy(&hdr,&buff[0],18);
width=hdr.width;
height=hdr.height;
// Предполагаем, что у нас 24-битная картинка
int type=GL_RGB;
int bpp;
// Проверяем это
switch(hdr.bits)
{
case 24:
bpp=3;
break;
case 32:
type=GL_RGBA;
bpp=4;
break;
default:
gEngfuncs.Con_Printf("glLoadTga(): file %s has unsupported bpp num: %d !\n",hdr.bits);
return -1;
}
int imgsize=width*height*bpp;
byte temp;
// Преобразуем BGR в RGB
for(int i=18; i<int(imgsize); i+=bpp)
{
temp=buff[i];
buff[i]=buff[i+2];
buff[i+2] = temp;
}
byte*oldbuff=(byte*)malloc(imgsize);
memcpy(oldbuff,&buff[18],imgsize);
int dest_offset=18;
for(i=height-1;i>=0;i--)
{
byte*src_line=&oldbuff[width*bpp*i];
memcpy(&buff[dest_offset],src_line,width*bpp);
dest_offset+=width*bpp;
}
free(oldbuff);
static unsigned int iRet;
glBindTexture(GL_TEXTURE_2D, dest); // Делаем её текущей
// настраиваем тип маппинга
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glHint( GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST );
glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, type,width,height,0, type, GL_UNSIGNED_BYTE, &buff[18]);
gEngfuncs.COM_FreeFile(buff);
return dest;
}
void UploadWorldHDTextures()
{
model_t*world=gEngfuncs.GetEntityByIndex(0)->model;
char file_path[512];
memset(&file_path[0], 0, 512);
for(int i=0;i<world->numtextures;i++)
{
sprintf(file_path, "textures/%s.tga",world->textures[i]->name);
glLoadTga(file_path,world->textures[i]->gl_texturenum);
}
}
//***********************************************
В файле tri.cpp добавить
extern void UploadWorldHDTextures(void);
и в функции void DLLEXPORT HUD_DrawTransparentTriangles( void ) добавить
UploadWorldHDTextures();
__________________
[XDaemon dev.]
Классно только что если TGA будет RLE? Или что если видеокарта не поддерживает GL_GENERATE_MIPMAP_SGIS?
Небольшие изменения.
После extern void UploadWorldHDTextures(void); ещё нужно добавить
bool HDTexturesLoaded = false;
а в функции void DLLEXPORT HUD_DrawTransparentTriangles( void ) вместо
UploadWorldHDTextures(); вставить следующее
if ( !HDTexturesLoaded )
{
UploadWorldHDTextures();
HDTexturesLoaded = true;
}
Не знаю, но почему-то работает только в сингле
__________________
[XDaemon dev.]
Где-то я видел уже этот код...
__________________
-Brain is dead-
Да вы ерундой занимаетесь, например.
Вы поглядите какой сложный код в официальной реализации ксаша.
Чтобы учитывать натурально любую засаду или глупость маппера.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я понимаю что это ерунда. Но я уже сделал загрузку "png" и теперь не могу понять, как разрешать загрузку новых текстур при смене карты. Может через сервер...
__________________
[XDaemon dev.]
avegamer Нет, походу не через сервер.
Если сделать только:
В файле tri.cpp добавить
extern void UploadWorldHDTextures(void);
и в функции void DLLEXPORT HUD_DrawTransparentTriangles( void ) добавить
UploadWorldHDTextures();
То он будет жрать ФПС, НО всегда будут загружаться новые текстуры.
А если второй способ попробовать, то не жрёт фпс и не загружает новые текстуры.
Спасибо, поржал )
Хак с детайл-текстурами - это первый бред, что тоже пришёл мне в голову когда-то.
Кстати, клиент может загружать ТГА и без детейлов - см. код overview. TriAPI вам в руки. Слабо сделать это без команд OpenGL?
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
А что с тем кодом который написал СР? У меня на энтитиях и с чанжлевелами работало всё, единственное в мульте не проверял.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
>>Я вон даже хд-декальки на триапи сделал. Слабо?
Не слабо. Это те же параллельные спрайты. RS это может.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
~ X ~
Да делай хоть спрайтами, хоть моделями.
Главное, чтобы выполнялись три условия:
1) декали правильно ездили вместе с бмоделями
2) декали клипались вдоль краёв брашей
3) декали сохранялись в сейв.
В хлфх 0.7 всё это было.
__________________
XaeroX да ты их сам чтоле клипал? )
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Разумеется, сам. По алгоритму Sutherland–Hodgman.
А что, в клиентском апи внезапно появилась функция ClipDecalToSurface?
__________________
XaeroX дык я думал ты просто текстуру туда другую затолкал и ога
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Не, нифига. Если бы я так сделал - как бы они в режиме директ3д работали? А они работают!
__________________
Ну всмысле Draw_DecalIndex возвращает же по имени, можно будет при загрузке составить таблицу реплейсментов...
ну я бы так делал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Таблица реплейсментов, безусловно, есть.
Но подменять текстуру нельзя, т.к. в софтваре она реализована одним образом, в опенгл другим (самым простым, надо сказать), в д3д - третьим.
Поэтому декаль фактически наносится заново и рисуется через триапи с использованием SpriteTexture. А халфовская - визуально отключается (но если поставить квар хд-декалей в 0 - то снова включается).
Хитрая система, в общем. Как и весь хлфх 0.7. Стал бы я в 2013 году примитив кодить?
__________________
А, я совсем про софтвар позабыл.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 06:24. | Показать все 32 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024