![]() |
Страницы (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)
Как добавить полноцветные текстуры в 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.]
Временная зона GMT. Текущее время 23:00. | Страницы (3): [1] 2 3 » Показать все 32 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024