HLFX.Ru Forum Страницы (3): [1] 2 3 »
Показать все 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.]


Временная зона GMT. Текущее время 23:00. Страницы (3): [1] 2 3 »
Показать все 32 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024