HLFX.Ru Forum
Показать все 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)


Отправлено avegamer 15-07-2013 в 10:59:

Half-Life Как добавить полноцветные текстуры в Gold Source

Где можно найти тутор или другую информацию по добавлению 32-битных текстур в Gold Source

__________________
[XDaemon dev.]


Отправлено Qwertyus 15-07-2013 в 13:33:

Если для обычного ХЛ, то действующий пример можно увидеть здесь:
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


Отправлено avegamer 15-07-2013 в 16:49:

TGA занимает много места, если бы формат PNG или DDS

__________________
[XDaemon dev.]


Отправлено PLut 15-07-2013 в 16:51:

avegamer Юзай трините (Trinity Renderers), там dds.

__________________
Base Defense on Steam, ModDB


Отправлено FiEctro 15-07-2013 в 17:03:

Вот выкладываю загрузчик CrazyRussian, кидать в клиентку.
Формат TGA.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено pein 15-07-2013 в 17:46:

PLut DDS бесполезен. Он не робит


Отправлено avegamer 15-07-2013 в 19:02:

а что означает gEngfuncs.GetEntityByIndex(0) в сравнении с gEngfuncs.GetEntityByIndex(1)

__________________
[XDaemon dev.]


Отправлено KiQ 15-07-2013 в 19:21:

avegamer gEngfuncs.GetEntityByIndex(0) возвращает мир

__________________
-Brain is dead-


Отправлено avegamer 15-07-2013 в 19:33:

То есть что-бы определить текстуры для мира нужно использовать

model_t *world = gEngfuncs.GetEntityByIndex(0)->model

а текстуры для модели --

cl_entity_s *view = gEngfuncs.GetViewModel() ???

__________________
[XDaemon dev.]


Отправлено KiQ 15-07-2013 в 20:44:

avegamer ViewModel это руки с пушкой

__________________
-Brain is dead-


Отправлено avegamer 15-07-2013 в 20:56:

А каким образом определить текстуры энтити

__________________
[XDaemon dev.]


Отправлено pRoxxx 15-07-2013 в 21:27:

Цитата:
avegamer писал:
А каким образом определить текстуры энтити

А у энтити как бэ и нету текстур, у энтити может быть браш модель, а у браш модели фейсы а вот у фейсов есть идекс в texinfo_t, а от туда в miptex_t если надо имя текстуры. Смерть Кащея в игле, игла в яйце, яйцо в утке, утка в зайце, заяц как бэ в шоке!


Отправлено avegamer 16-07-2013 в 08:15:

Что-то получилось, но нужно проверить. Спасибо 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.]


Отправлено pRoxxx 16-07-2013 в 08:24:

Классно только что если TGA будет RLE? Или что если видеокарта не поддерживает GL_GENERATE_MIPMAP_SGIS?


Отправлено avegamer 16-07-2013 в 08:42:

Небольшие изменения.
После extern void UploadWorldHDTextures(void); ещё нужно добавить

bool HDTexturesLoaded = false;

а в функции void DLLEXPORT HUD_DrawTransparentTriangles( void ) вместо
UploadWorldHDTextures(); вставить следующее

if ( !HDTexturesLoaded )
{
UploadWorldHDTextures();
HDTexturesLoaded = true;
}


Не знаю, но почему-то работает только в сингле

__________________
[XDaemon dev.]


Отправлено KiQ 16-07-2013 в 13:40:

Где-то я видел уже этот код...

__________________
-Brain is dead-


Отправлено Дядя Миша 16-07-2013 в 15:45:

Да вы ерундой занимаетесь, например.
Вы поглядите какой сложный код в официальной реализации ксаша.
Чтобы учитывать натурально любую засаду или глупость маппера.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено avegamer 17-07-2013 в 20:32:

Я понимаю что это ерунда. Но я уже сделал загрузку "png" и теперь не могу понять, как разрешать загрузку новых текстур при смене карты. Может через сервер...

__________________
[XDaemon dev.]


Отправлено master07 16-10-2013 в 12:10:

avegamer Нет, походу не через сервер.

Если сделать только:

В файле tri.cpp добавить

extern void UploadWorldHDTextures(void);

и в функции void DLLEXPORT HUD_DrawTransparentTriangles( void ) добавить

UploadWorldHDTextures();

То он будет жрать ФПС, НО всегда будут загружаться новые текстуры.

А если второй способ попробовать, то не жрёт фпс и не загружает новые текстуры.


Отправлено ~ X ~ 06-11-2013 в 21:06:

Спасибо, поржал )
Хак с детайл-текстурами - это первый бред, что тоже пришёл мне в голову когда-то.

Кстати, клиент может загружать ТГА и без детейлов - см. код overview. TriAPI вам в руки. Слабо сделать это без команд OpenGL?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Дядя Миша 07-11-2013 в 15:42:

Цитата:
~ X ~ писал:
Слабо сделать это без команд OpenGL?

У нас свой движок - что хотим то и делаем )

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 07-11-2013 в 16:08:

Цитата:
~ X ~ писал:
Слабо сделать это без команд OpenGL?

Не слабо, а лениво!
Я вон даже хд-декальки на триапи сделал. Слабо?

__________________

xaerox on Vivino


Отправлено FiEctro 07-11-2013 в 16:15:

А что с тем кодом который написал СР? У меня на энтитиях и с чанжлевелами работало всё, единственное в мульте не проверял.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено ~ X ~ 07-11-2013 в 20:58:

>>Я вон даже хд-декальки на триапи сделал. Слабо?

Не слабо. Это те же параллельные спрайты. RS это может.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 08-11-2013 в 07:51:

~ X ~
Да делай хоть спрайтами, хоть моделями.
Главное, чтобы выполнялись три условия:
1) декали правильно ездили вместе с бмоделями
2) декали клипались вдоль краёв брашей
3) декали сохранялись в сейв.
В хлфх 0.7 всё это было.

__________________

xaerox on Vivino


Отправлено Дядя Миша 08-11-2013 в 17:18:

XaeroX да ты их сам чтоле клипал? )

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 08-11-2013 в 17:20:

Дядя Миша
Разумеется, сам. По алгоритму Sutherland–Hodgman.
А что, в клиентском апи внезапно появилась функция ClipDecalToSurface?

__________________

xaerox on Vivino


Отправлено Дядя Миша 08-11-2013 в 17:28:

XaeroX дык я думал ты просто текстуру туда другую затолкал и ога

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 08-11-2013 в 17:29:

Дядя Миша
Не, нифига. Если бы я так сделал - как бы они в режиме директ3д работали? А они работают!

__________________

xaerox on Vivino


Отправлено Дядя Миша 08-11-2013 в 17:29:

Ну всмысле 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'


Отправлено XaeroX 08-11-2013 в 17:32:

Таблица реплейсментов, безусловно, есть.
Но подменять текстуру нельзя, т.к. в софтваре она реализована одним образом, в опенгл другим (самым простым, надо сказать), в д3д - третьим.
Поэтому декаль фактически наносится заново и рисуется через триапи с использованием SpriteTexture. А халфовская - визуально отключается (но если поставить квар хд-декалей в 0 - то снова включается).
Хитрая система, в общем. Как и весь хлфх 0.7. Стал бы я в 2013 году примитив кодить?

__________________

xaerox on Vivino


Отправлено Дядя Миша 08-11-2013 в 17:33:

А, я совсем про софтвар позабыл.

Цитата:
XaeroX писал:
Стал бы я в 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