HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Получение текстуры
в tri.cpp
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



Получение текстуры

Задача такова. Я хочу сделать камеру на оружии ( типа, в прицеле снайперской винтовки виден мир ).
Для этого творю следующие непотребства:

C++ Source Code:
1
cl_entity_t *viewent;
2
viewent = gEngfuncs.GetViewModel();
3
if (!viewent->model->name) return;
4
studiohdr_t *vm = (studiohdr_t*)IEngineStudio.Mod_Extradata(viewent->model);
5
char pri[255];
6
gEngfuncs.pfnConsolePrint(pri);
7
texture_t *ct = (texture_t*)((byte*)vm + vm->texturedataindex);
8
for (int k = 0; k < vm->numtextures; k++)
9
{
10
  if (!stricmp(ct[k].name,"cam_vfind.bmp"))
11
    gEngfuncs.pfnConsolePrint(ct[k].name);
12
}

Чтобы найти текстуру с именем cam_vfind.bmp. Проблема в том, что имена у нектороых текстур пишутся, а у некоторых нет, следовательно, cam_vfind не ищется. Правильно ли я вообще получаю доступ к списку текстур? Делаю это всё в tri.cpp.

Сообщить модератору | IP: Записан
Сообщение: 127988

Старое сообщение 21-11-2013 18:47
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33060
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
domded писал:
C++ Source Code:
viewent = gEngfuncs.GetViewModel();
if (!viewent->model->name) return;

Так нельзя, надо так:
C++ Source Code:
viewent = gEngfuncs.GetViewModel();
if (!viewent->model) return;


Цитата:
domded писал:
Чтобы найти текстуру с именем cam_vfind.bmp.

Зачем искать отдельно? Когда рисуешь - тогда и проверяй.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 127991

Старое сообщение 21-11-2013 19:02
-
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



viewent пробовал. проблема в том, что он всегда не нуловый. прверял даже с выводом в консоль, следовательно, игра виснет, когда пытаюсь получить указатель на список текстур.
я не нашёл в studiomodelrenderer_hardware, где отдельно натягиваются текстуры. поэтому и понёс всё это в hud_drawtransparenttriangles

Сообщить модератору | IP: Записан
Сообщение: 127994

Старое сообщение 21-11-2013 19:36
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33060
Нанёс повреждений: 392 ед.

Рейтинг



Кта не нулловый? А когда у тебя пушки в руках нету чем равен viewent->model? Да ничему.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 127999

Старое сообщение 21-11-2013 20:41
-
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



Почему-то у меня указатель на viewent никогда не равен нуллу, даже если пушки в руках нет. Пишу под чистый хл.
Где конкретно рисуется текстура для модели? В рендерере этого не нашёл.
Попробовал перенести свой код:

C++ Source Code:
1
//are we processing viewmodel?
2
if (m_pCurrentEntity == gEngfuncs.GetViewModel() )
3
{
4
  //gEngfuncs.pfnConsolePrint(m_pCurrentEntity->model->name);
5
  //gEngfuncs.pfnConsolePrint("\n");
6
  char sz[255];
7
  texture_t* tex = (texture_t*)((byte*)m_pStudioHeader+m_pStudioHeader->textureindex);
8
  for (int i = 0; i < m_pStudioHeader->numtextures; i++ )
9
  {
10
    gEngfuncs.pfnConsolePrint(tex[i].name);
11
    gEngfuncs.pfnConsolePrint("\n");
12
  }
13
 
14
}

в StudioRenderFinal_Hardware. И почему-то опять не получается получить нормальные имена текстур - он выводит их не все, хотя те, что выводит - получаются правильные, совпадают с названиями текстур в модели. Некоторые строчки просто получаются равными нулю.
Ещё я заметил, что в туторе по натягиванию видеотекстур в структуре texture_s есть поле gl_texturenum, и уж был нацелился использвоать его для фотографирования экрана и помещения снимка в кам_вфайнд, но возникло огорчение. Почему-то в оригинальной халве его нет. Это нужно подключать полностью параноевский рендерер, я правильно понял?

Отредактировано domded 22-11-2013 в 02:31

Сообщить модератору | IP: Записан
Сообщение: 128012

Старое сообщение 22-11-2013 02:25
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33060
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
domded писал:
Некоторые строчки просто получаются равными нулю.

а у тебя модель не с внешними текстурами?
Цитата:
domded писал:
Это нужно подключать полностью параноевский рендерер, я правильно понял?

Достаточно взять com_model.h из паранои. Он тоже наполовину неправильный, но работать будет.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 128022

Старое сообщение 22-11-2013 09:01
-
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



Нет, все текстуры зашиты в модель, в формате бмп. Из-за чего может быть, что не все имена читаются?

Сообщить модератору | IP: Записан
Сообщение: 128037

Старое сообщение 22-11-2013 11:38
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33060
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
domded писал:
Из-за чего может быть, что не все имена читаются?

руки кревыя?

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 128047

Старое сообщение 22-11-2013 12:56
-
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



это понятно. можете сказать, как правильно рассчитывать смещение до каждой текстурной структуры? или где они рисуются?

Сообщить модератору | IP: Записан
Сообщение: 128057

Старое сообщение 22-11-2013 14:55
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33060
Нанёс повреждений: 392 ед.

Рейтинг



Ты модельку открой в HLMV и там имена посмотри. Потому что код у тебя правильный, там нет проблем.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 128061

Старое сообщение 22-11-2013 15:06
-
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



даже если взять в руки дробовик из оригинальной игры, он пишет мне только название первой текстуры из четырёх (Spas12_Reference.BMP:0), полностью вывод такой ( tex[i]->name, i ):

Spas12_Reference.BMP:0
:1
:2
:3

все мозги себе сломал.

Сообщить модератору | IP: Записан
Сообщение: 128064

Старое сообщение 22-11-2013 15:19
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33060
Нанёс повреждений: 392 ед.

Рейтинг



А почему ты представляешь это в виде texture_t?
Кто тебя такой глупости научил?
Вот же

C++ Source Code:
1
// skin info
2
typedef struct mstudiotex_s
3
{
4
  char		name[64];
5
  int		flags;
6
  int		width;
7
  int		height;
8
  int		index;
9
} mstudiotexture_t;

в нее и преобразовывай, а не в texture_t. Додумался.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 128066

Старое сообщение 22-11-2013 16:05
-
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



смотрел по тутору о добавлении видеотекстур. не додумался как-то, что текстуры моделей хранятся в другом формате.
в mstudiotexture еcть индекс. подскажите, куда он ссылается, где хранятся непосредственно пиксели этой самой текстуры ( я так понимаю, формат w*h*3) ?

Сообщить модератору | IP: Записан
Сообщение: 128070

Старое сообщение 22-11-2013 16:38
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33060
Нанёс повреждений: 392 ед.

Рейтинг



это gl-index загруженной текстуры.

Добавлено 22-11-2013 в 20:50:

Ну то есть как, сначала это индекс на массив пикселей, а потом он перезаписывается как индекс загруженной в видеопамять текстуры.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | IP: Записан
Сообщение: 128071

Старое сообщение 22-11-2013 16:50
-
domded
люби няшного котейку

Дата регистрации: Aug 2013
Проживает: (void)
Сообщений: 146

Рейтинг



Делаю так:

C++ Source Code:
1
//are we processing viewmodel?
2
if (m_pCurrentEntity == gEngfuncs.GetViewModel() )
3
{
4
  //gEngfuncs.pfnConsolePrint(m_pCurrentEntity->model->name);
5
  //gEngfuncs.pfnConsolePrint("\n");
6
  char sz[255];
7
  mstudiotexture_t*tex = (mstudiotexture_t*)((byte*)m_pStudioHeader+m_pStudioHeader->textureindex);
8
  for (int i = 0; i < m_pStudioHeader->numtextures; i++ )
9
  {
10
    if (!stricmp("cam_vfind.bmp",tex[i].name))
11
    {
12
      sprintf(sz,"%s:%i size %i x %i \n",tex[i].name,tex[i].index,tex[i].width,tex[i].height);
13
      gEngfuncs.pfnConsolePrint(sz);
14
      //creating current image of screen
15
      if (glIsTexture(tex[i].index))
16
      {
17
        GLuint worldId;
18
        unsigned char *worldImg = new unsigned char[ScreenWidth*ScreenHeight*3];
19
 
20
        glBindTexture(GL_TEXTURE_RECTANGLE_NV,tex[i].index);
21
        glReadPixels(0,0,ScreenWidth,ScreenHeight,GL_RGB,GL_UNSIGNED_BYTE,worldImg);
22
        glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, tex[i].width, tex[i].height, 0, GL_RGB, GL_UNSIGNED_BYTE, worldImg);
23
        //glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
24
        //glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
25
        delete[] worldImg;
26
      }
27
 
28
    }
29
    //gEngfuncs.pfnConsolePrint("\n");
30
  }
31
  delete[] tex;
32
 
33
}

Изображение в прицеле появляется, но компьютер начинает очень сильно тормозить + оно получается очень растянутое - полосам идёт. Что я делаю не так?

Добавлено 24-11-2013 в 01:59:

Насчёт растяжения разобрался - надо было просто добавить gluScaleImage. А с тормозами вопрос остался. Возможно ли получить пиксели экрана быстрее, чем через glReadPixels?

Сообщить модератору | IP: Записан
Сообщение: 128123

Старое сообщение 23-11-2013 21:59
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 11:07. Новая тема    Ответить
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Получение текстуры
в tri.cpp
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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