![]() |
Показать все 109 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Телевизор в ХЛ (https://hlfx.ru/forum/showthread.php?threadid=1040)
Телевизор в ХЛ
Недавно я узнал про AviKit. Эта вещь позволяет воспроизводить avi-файлы внутри игр. Есть даже мод для ХЛ, телик работает по принципу монитора в Xash. Но сорцев мода нету. Я прошу всех заинтересованных помочь в разработке исходников. [Или XaeroX'a выложить то, что он по этому поводу делал ]
Здесь можно скачать мини-мод и исходники демок авикита:
http://randomnine.wootfu.com/project.php?p=18
>> принципу монитора в Xash
Нифига не по принципу мониторов ...
Т.к. ксаш рисует на текстуру , авкит же рисует просто плоскость .... Но впринципе можно сделать и для текстуры , сделайте в движке "второй монтор" и заставьте на него проецировать ролик ...
Кстати там демокарта глючная ... Юзайте мою ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Итак, вопрос: как сделать, чтобы энтитя считывалась непосредственно клиентской длл и все её параметры тоже?(естественно, на сервере она уже закреплена за классом)
Я считаю так же как в спирите спрайты на поверхности брашей ?! Это можна присобачить впринципе, но. Есть пару "но"
Вот, поднял старую тему, не плюсуйте плз, мне нужно несколько советов:
1. откуда лучше вызывать загрузку видеоролика?
(Предполагаю, что это Hud_Init)
2. откуда вызвать обновление видеотекстуры(смена кадров) и что за переменную можно использовать в качестве времени воспроизведения?(Hud_Redraw, Hud_Think, CalcRefdef)
3. И есть ли способ не использовать fmod для воспроизведения звука? Или лучше можно ли подгрузить уже загруженную дллку фмода от MP3 плеера, чтобы музыка не остановилась и был звук из ролика?
-CJ- ну хватит уже с умным видом нести фигню
Ну эксперты кругом, куда ни плюнь!
Ku2zoff делай по принципу видеотекстур в ку3.
и вся недолга.
Добавлено 17-03-2008 в 20:11:
1. видеоролики грузить не нужно, они потоком проигрываются, можешь выполнять инициализацию по мессаге.
2. Обновлять из калкрефдеф
3. Вряд ли
Дядя Миша по принципу видеотекстур из ку3? Я исходники глянул, чуть голову не сломал, решил больше в них не возвращаться(пока не закончу мод для ХЛ) Но всё-таки гляну как там сделано. Вообще я за основу взял монитор из ксаша. Я на него проецировал произвольные текстуры, вообще от фонаря взятые. Например детальную текстуру(но как в паранойе у меня всё равно не получилось )...
Придётся ещё качать статик либы фмода...
>>Придётся ещё качать статик либы фмода...
да ты его динамически подключи, в чем проблема-то?
а в кутри очень просто сделано и очень разумно, просто чтобы разобраться нужно время, загляни в cl_video.c
Дядя Миша Ты дату поста смотрел ?
хотя насчет плоскости всеже вохзможно я прав , т.к. в хамере даже задаётся его разрешение ....
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
-CJ- у глупости, равно как и у правды не выходит срок (С)
а если ты не понимаешь что такое плоскость и как она образована - это не моя вина.
А сорьки, не cl_video.c а cl_cin.c
code:
void Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data, bool dirty) { int i, j; qglFinish(); GL_Bind(0); qglTexImage2D (GL_TEXTURE_2D, 0, gl_tex_solid_format, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data ); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); R_SetGL2D(); qglColor4fv(gl_state.draw_color); qglBegin(GL_QUADS); qglTexCoord2f( 0.5f / cols, 0.5f / rows ); qglVertex2f (x, y); qglTexCoord2f((cols - 0.5f) / cols , 0.5f / rows ); qglVertex2f (x+w, y); qglTexCoord2f((cols - 0.5f) / cols, (rows - 0.5f) / rows ); qglVertex2f (x+w, y+h); qglTexCoord2f(0.5f / cols, ( rows - 0.5f )/rows ); qglVertex2f (x, y+h); qglEnd(); }
code:
void R_NewScreenRenderPass( void ) { if (m_pCurrentScreen) { glBindTexture(GL_TEXTURE_2D, m_pCurrentScreen->texture); if(m_pCurrentScreen->color == 0 && !g_HardwareShaderCapable)//support for old video cards glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE8, 0, ScreenHeight - VIEWPORT_SIZE, VIEWPORT_SIZE, VIEWPORT_SIZE, 0); else glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, ScreenHeight - VIEWPORT_SIZE, VIEWPORT_SIZE, VIEWPORT_SIZE, 0); } }
Дядя Миша ты хочешь сказать, что они вызывают glTexImage2D для загрузки кадра текстуры? Кармак что, с перепоя этот код писал? Для кого glTexSubImage2D придумали...
А фмод - он и так загрузится один раз, и все глобальные параметры будут общие. Если ты конечно его как дллку грузишь (динамически или статически - не важно, главное что не либу).
__________________
XaeroX знаешь у меня на 9800 порою glBegin\glEnd работает быстрее чем VBO, поэтому я промолчу про glTexSubImage.
>>поскольку телевизор не требует отдельного прохода
??? я не знал. Вообще хорошо бы чтоб и монитор не требовал, а зеркало только осталось. fmod я загружу динамически, без статик либов, чтоб кашу в коде не делать. Я ещё не смотрел можно ли ставить ролик на паузу. Хотя если там за время ролика считается время аудиопотока, то логично будет рассудить, что если аудио на паузе, то и кадр остановится.
Проблема в размере видеороликов. Если делать их со сжатием, то придётся вместе с модом устанавливать видеокодек.
>>Вообще хорошо бы чтоб и монитор не требовал
ну а как ты будешь рисовать два разных места за один проход?
Телевизор - другое дело, тебе надо всего лишь отрисовать содержание авишки.
Итак, бродя по просторам инета, я наткнулся на код. Это код для ХЛ, код прорисовки видеотекстуры, в нём использован авикит. Но это только отрывок. Вот он:
1 | // Only setup the avi if it's actually a video screen |
2 |
3 | if (isVideoScreen && replacement[0] != '\0') { |
4 | char *error_msg = NULL; |
5 | long xres = 0; |
6 | long yres = 0; |
7 | float duration = 0.0f; |
8 |
9 | movie = new AVIKit( absolute_replacement, false ); |
10 | if (movie->getError( &error_msg ) != AVIKIT_NOERROR) { |
11 | gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Error opening %s: %s\n", absolute_replacement, error_msg ); |
12 | delete movie; |
13 | break; |
14 | } |
15 | movie->getVideoInfo( &xres, &yres, &duration ); |
16 | gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Opened %s: %ld x %ld (%f secs)\n", replacement, xres, yres, duration ); |
17 | gEngfuncs.Con_DPrintf( "Video screen at (%d %d %d), with extents (%d %d %d)\n", |
18 | (int)origin[0], (int)origin[1], (int)origin[2], |
19 | (int)extents[0], (int)extents[1], (int)extents[2] ); |
20 |
21 | // Create the OpenGL texture |
22 | GLuint texnum; |
23 | glGenTextures( 1, &texnum ); |
24 |
25 | if (!AddComplexAvi( movie, texnum, origin, angles, extents, &error_msg )) { |
26 | gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Error adding movie: %s\n", error_msg ); |
27 | delete movie; |
28 | } |
29 | } else if (isVideoScreen) { |
30 | gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Video screen didn't have a movie specified!\n" ); |
31 | } |
32 |
33 | //Setting up the texture: |
34 |
35 | movie->getVideoInfo( &data->width, &data->height, &data->total_length ); |
36 | glEnable( GL_TEXTURE_2D ); |
37 | glBindTexture( GL_TEXTURE_2D, data->texture_index ); |
38 | glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
39 | glTexImage2D( GL_TEXTURE_2D, 0, 3, data->width, data->height, 0, GL_RGB, GL_UNSIGNED_BYTE, tmpbuffer ); |
40 |
41 | //Updating the texture each frame: |
42 |
43 | // Calculate the frame needed |
44 | int frame = i->movie->getVideoFrameNumber( i->current_time ); |
45 |
46 | // If the frame has changed, re-upload it |
47 | if (frame != i->current_frame) { |
48 | i->current_frame = frame; |
49 | i->movie->getVideoFrame( (char*)i->buffer, frame ); |
50 |
51 | // If the video isn't a power of two on all sides, we need to resize it... <img src="images/smilies/frown.gif" border="0" alt=""> |
52 | if (i->resized_buffer) { |
53 | gluScaleImage( GL_RGB, i->realwidth, i->realheight, GL_UNSIGNED_BYTE, i->buffer, i->width, i->height, GL_UNSIGNED_BYTE, i->resized_buffer ); |
54 | // ... and update the OpenGL texture ... |
55 | glEnable(GL_TEXTURE_2D); |
56 | glBindTexture( GL_TEXTURE_2D, i->texture_index ); |
57 | glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, i->width, i->height, GL_RGB, GL_UNSIGNED_BYTE, i->resized_buffer ); |
58 | } else { |
59 | // ... and update the OpenGL texture ... |
60 | glEnable(GL_TEXTURE_2D); |
61 | glBindTexture( GL_TEXTURE_2D, i->texture_index ); |
62 | glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, i->width, i->height, GL_RGB, GL_UNSIGNED_BYTE, i->buffer ); |
63 | } |
64 | } |
65 |
66 | // If this is a complex movie, draw the polygons |
67 | if (i->texture_type == AVI_TEXTURE_USER) { |
68 |
69 | glEnable( GL_TEXTURE_2D ); |
70 | glBindTexture( GL_TEXTURE_2D, i->texture_index ); |
71 | glDisable( GL_BLEND ); |
72 | glBegin( GL_QUADS ); |
73 |
74 | // Top left |
75 | glColor3f( 1.0f, 1.0f, 1.0f ); |
76 | glTexCoord2f( 0.0f, 1.0f ); |
77 | glVertex3f( i->vertexes[0].x, i->vertexes[0].y, i->vertexes[0].z ); |
78 |
79 | // Bottom left |
80 | glColor3f( 1.0f, 1.0f, 1.0f ); |
81 | glTexCoord2f( 0.0f, 0.0f ); |
82 | glVertex3f( i->vertexes[1].x, i->vertexes[1].y, i->vertexes[1].z ); |
83 |
84 | // Bottom right |
85 | glColor3f( 1.0f, 1.0f, 1.0f ); |
86 | glTexCoord2f( 1.0f, 0.0f ); |
87 | glVertex3f( i->vertexes[2].x, i->vertexes[2].y, i->vertexes[2].z ); |
88 |
89 | // Top right |
90 | glColor3f( 1.0f, 1.0f, 1.0f ); |
91 | glTexCoord2f( 1.0f, 1.0f ); |
92 | glVertex3f( i->vertexes[3].x, i->vertexes[3].y, i->vertexes[3].z ); |
93 |
94 | glEnd(); |
95 | } |
>>А если мне надо нарисовать две разных авишки на одной карте?
да хоть сто! ты ведь берешь картинку из видеофайла.
>>Значит и у монитора можно ограничиться одним проходом
Xash сам регулирует кол-во проходов в зависимости от кол-ва мониторов в непосредственной видимости игрока.
Например на карте Breakable Demo при непосредственной видимости 3х мониторов делается 4 прохода.
>>да хоть сто! ты ведь берешь картинку из видеофайла.
Точно! Что же я несу! Проходы нужны для извлечения картинки из игрового экрана, а в видеофайле кадр уже есть.
Ku2zoff не в игровом экране дело.
Представь себе ДВА места, которые никоим образом не видны друг из друга. Как же их можно нарисовать иначе, если не за два раза?
Итак, сегодня я полночи провозился с авикитом. В результате при инициализации рендера(в самом конце загрузки) игра повисает и завершается только диспетчером задач. Но прогресс уже есть: играется звук из ролика, чего раньше не было. Вызвал я это дело из V_CalcRefdef. Может надо инициализировать авишку чуть пораньше, например из Худ_ВидИнит, а обновление вызывать из КалкРефдеф? А то я всё из Рефдефа вызвал.
Ku2zoff да забрось ты этот глючный авикит, лучше с нуля написать декомпрессор или использовать виндовый.
Дядя Миша с нуля у меня написать не получится, если использовать виндовый, то мне надо найти исходники... Ещё немного подумаю, не хочется всё бросать, ведь только начал понимать как авикит работает(и как фмод работает)
Добавлено 20-03-2008 в 17:07:
Итак, прогресс налицо. Ролик нормально открывается, воспроизводится и ставится на паузу(если это можно назвать паузой). Но слышен только звук - ОпенГЛ текстура не генерируется. Но думаю с этим можно разобраться.
ну значит нарисовал неверна!
я к чему говорил-то: авикит дллка, да плюс sdl, да еще fmod а ни дохрена ли мусора ради проигрывания видео?
Дядя Миша а sdl обязательно надо? Мож из-за того, что я его отцепил ничё и не работает?
Ku2zoff я уже и не помню. Посмотри мод для хл - есть он там или нету?
Дядя Миша sdl в моде нет, как я понял, он нужен для создания окна и управления сценой - движения камеры и т.п.
Ku2zoff ну значит что-то неверно сделал. Может вертексы у тебя не в том порядке обходятся.
>>я к чему говорил-то: авикит дллка, да плюс sdl, да еще fmod а ни дохрена ли мусора ради проигрывания видео?
Дядя Миша я решил авикит не использовать. Т.К. он действительно глючный. Нашёл статью некоего Джеффа Молофи(Jeff Molofee aka NeHe) Всё тоже самое, тока мусора нету. Используется виндовый видео декомпрессор. Правда, в примере нет проигрования звука, но это не суть важно, его можно воспроизводить через фмод, который уже подключен к спириту Killar'oм.
Ku2zoff что-ни день - удивительные открытия у тебя
совет тебе дам добрый - не юзай асм из этой статьи, GL_BGR будет вполне достаточно, просто тутору уже лет 6-7.
Есть какие-либо новости по этому делу ?
А то мне очень бы пригодилась возможность проигрывать видео на весь экран при загрузке игры, при загрузке карты или при вызове из энтити.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64 да бери вон в ксаше есть поддержка видеотекстур.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
для начала надо создать видео в формате roq.
Потом создаем шойдер кутришный для нашего видио:
какой-нить файлик с именем .shader (впрочем можно добавить в те, что уже лежат в папке scripts, это без разницы).
Сам шойдер будет выглядеть примерно вот так:
1 | DRKMTL_SCRN3//это имя нашей текстурки на карте |
2 | { |
3 | { |
4 | videoMap video01.roq // видеофайл с таким |
5 | // названием следует положить в папку media |
6 | } |
7 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мда.
Это совсем не то, ладно попытаюсь сам реализовать то, что мне надо.
Мне просто нужно проигрывание видео не на "телевизоре", а в самой игре.
То Есть как в конце Episode I, но все равно спасибо.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64 сделай камеру чётко по центру чтобы нельзя было бошкой вертеть и воспроизводи видео
Угу, только еще ведь надо думать как имплементировать q3 шейдеры в клиент half-Life
гм
А как же звук ?
Или мне его отдельным файлом загружать ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Завтра продолжу мучить AviKit.
Эх, вот бы еще добыть поддерживаемый им Avi файл.
Пока нашел один с поддержкой видео, о звуке речь и не идет.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Хм.. AviKit... Дек он вроде в Arrangement реализован. И в исходниках валяется. Гляньте в них, может там есть ответы на все вопросы.
__________________
Не оружие убивает людей... А С++
Jackass То что валяется в исходниках - не значит что реализован.
__________________
Base Defense on Steam, ModDB
Плут.. я же код аранджемента не смотрел досконально. Может быть там это реализовано... не знаю...
__________________
Не оружие убивает людей... А С++
void CHud :: VidInit( void ) |
m_pVideoRen = new CVideo( "\\media\\Valve.avi" ); |
m_pVideoRen->DrawVideo( ); |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Подправил код, а толку 0, не рендерит
Добавлено 10-08-2010 в 19:26:
Нашел OpenSource движок с поддержкой видео
http://sigelengine.googlecode.com/svn/trunk/Video.cpp
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
тем временем СразуРашшен уже расковырял авикит и смотрит в своем убийце кризиса онемэ:
http://pix.academ.org/img/2010/08/1...d32eb72fbde.jpg
осталось только прикрутить звук и разобраться с тормозами.
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
CrazyRussian, поделишься с общественностью кодом ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Осталось для чистоты протестировать видео с размерами степени двойки.
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
CrazyRussian, с общественность кодом делиться не собираешься ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
CrazyRussian, правильно ли я понял ?
code:
model_t *world = gEngfuncs.GetEntityByIndex(0)->model; texture_t* tex = (texture_t*)world->textures; for (int i = 0; i < world->numtextures; i++) { LoadAviForTexture( tex[i] ); }
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
доводите до конца)
Угу, потом каждый кадр надо вызывать RefreshBspAvis. Текстуры называть avi@xxxxxxxx где 8 символов после avi@(прям как в dos) - название авишки.
И вот это ололо:
//glGenTextures(1,(GLuint*)&tex->gl_texturenum); |
tex->gl_texturenum=1; |
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Дядя Миша
Не знаю, у меня ничего не тормозило.
Я, правда, использовал не сам ави-кит, а свой код написал на его основе, но тем не менее. Хотя не помню - это ж 6 лет прошло, не меньше.
__________________
XaeroX
Выложил бы народу. А то как видишь, тормозит у всех.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ок, теперь такой вопрос.
Можно ли вместо Z_Malloc использовать обычный malloc ?
Или же придется использовать код из кваки ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Скинь нормальный CPP файл, потому, что в том, что ты прилепил вообще части кода не хватает.
Приведу пример:
1 | for(int i=0;i |
2 | { |
3 | avi_tex->audio_buff[i]=(byte*)Z_Malloc(sample_rate*channels* bps*is16bit ? 2:1); |
4 | avi_tex->timeoffsets[i]=0; |
5 | } |
for(int i=0; i < avi_tex->num_channels; i++ ) |
long NumVideoFrames( ) { return video_frames; }; |
1 | model_t *world = gEngfuncs.GetEntityByIndex(0)->model; |
2 |
3 | texture_t** tex = (texture_t**)world->textures; |
4 |
5 | for (int i = 0; i < world->numtextures; i++) |
6 | { |
7 | LoadAviForTexture( tex[i] ); |
8 | } |
1 | int R_FrameTime() |
2 | { |
3 | return 1; |
4 | } |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Если видео не со степенями двойки, то на многих старых видюхах будет белый экран, а на некоторых новых - ощутимые тормоза. Надо либо рескейлить текстуру на лету (это медленно!), либо использовать rectange texture (это православно), либо выводить лишь фрагмент текстуры со степенями двойки, а фрагмент этот обновлять через glTexSubImage2D (это максимально совместимо).
__________________
avi_tex->Avi=new AVIKit(VA("data/textures/video/%s.avi",vidname)); |
avi_tex->Avi=new AVIKit(VA("%s/textures/video/%s.avi",gEngfunc.pfnGetGameDirectory(),vidname)); |
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
CrazyRussian, вот, это уже совсем другое дело.
Ладно, с этим разобрался.
В консоли теперь при загрузке карты сообщение:
Loading avi valve/media/valve.avi - 361 frames,Audio: 44100 Hz 4 bps 2 channels 16bit
но рендерить не хочет
Короче пока сделал так:
в tri.cpp в начале файла добавил
bool g_blReplaceTexture = true; |
1 | if( g_blReplaceTexture ) |
2 | { |
3 | model_t *world = gEngfuncs.GetEntityByIndex(0)->model; |
4 |
5 | texture_t** tex = (texture_t**)world->textures; |
6 |
7 | for (int i = 0; i < world->numtextures; i++) |
8 | { |
9 | LoadAviForTexture( tex[i] ); |
10 | } |
11 |
12 | g_blReplaceTexture = false; |
13 | } |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
видео должно играться со скоростью 25 кадров в секунду.
А ресемплинг на лету - не такой уж и медленный, если видео не сильно большого разрешния, например 320х200
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ок. ну тогда скиньте мне что ли валидный Avi файл, так как valve.avi из HL2DM похоже не подходит.
Добавлено 11-08-2010 в 18:17:
Нет. видео файл нормальный, я уже хз в чем дело, но видео не работает.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64
Лови, кусочек онемешки которой я тестировал код - http://rghost.ru/2319781
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
CrazyRussian, ок теперь вижу результат.
Правда несколько отрицательный.
Экран стал белого цвета, при использовании моих файлов он оставался черным
int f = tex->Avi->getVideoFrameNumber(tex->frame/25);
по прежнему возвращает 0.
очень странно.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64 дай угадаю, R_FrameTime написал вот так:
1 | int R_FrameTime() |
2 | { |
3 | return pparams->frametime; |
4 | } |
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
хм
Так вот, эксперименты показали следующее.
если в функции LoadAviForTexture, перед glTexImage2D поставить return;
ТО изображение рендерится, НО из далека экран кажется черным, изображение видно только в близи и под определенным углом и то оно лишь частично отображается.
Если же не использовать return и дать запустить glTexImage2D. то экран становится белым.
есть подозрения на карту.
Добавлено 11-08-2010 в 18:58:
Добавил в код
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
fire64 откуда ты запускаешь рендеринг видео?
не из HUD_Redraw ли?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, я обновляю кадр из V_CalcRefdef
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша А как будет по-хорошему?
__________________
Base Defense on Steam, ModDB
из HUD_Redraw, я жы написал выше.
Ну вы же на весь экран видио рисуете или нет?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Давайте уже определимся. Если мы рисуем видео на весь экран - какой же это телевизор? Это просто интро-ролик.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так я пока и использовал код CrazyRussian, так что у меня тоже на брашах.
Завтра FMOD буду приделывать.
Что касается Intro ролика, то либо потом сам код переделаю, либо же сделаю так что бы камера была направленна на браш с видео.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
уфф. Если надо видио на брашах - вон в ксаше есть. я жы писал.
Хватить халфу мучать )
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Такой вопрос, что лучше использовать для воспроизведения звука ?
FMOD или SDL ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
как мне кажется - лучше ставить ambient_generic и делать синхронизацию с видео,а со всякими фмодами гемороя over 9000.
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
fire64 использование двух дллок для вопроизведения звука в одном приложении - это всегда нехорошо.
А SDL - он вообще не для того был писан.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну это понятно. Я, собсна, так и делал.
А вот чтобы с синхронизацией - это не так уж просто.
__________________
Немного переделал код CrazyRussian, убрал кастомные функции, добавил воспроизведение звука через FMOD.
Синхронизация не работает
п.с.
CrazyRussian, не используй статичные пути для видео, используй gEngfuncs.pfnGetGameDirectory().
п.п.с.
Надеюсь никому не надо объяснять как подключать код, хотя в теме это и так было несколько раз описано.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64
Лучше, когда допишите, оформите в виде тутора.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Какие кодеки понимает AviKit ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64
Любые.
Главное, чтобы они были правильно установлены в винде.
__________________
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64 так я это писал хрен знает когда. Возможно дело было в винде или видеокарте. В любом случае стоит перепроверить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Divx кодек он точно не держит.
Добавлено 12-08-2010 в 14:56:
Поправка, все нормально, просто в настройках конвертера было установлено неправильное расширение.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64 ну вот видишь. Старые истины порой нуждаются в перепроверке. А вообще я с вас удивляюсь - ну скока можно этот дибилизер писать?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Удалил код обновления CrazyRussian.
Вернул код из примеров, синхронизация видео и звука исправно работает.
Добавил закрытие FMOD'а.
Теперь код полностью рабочий ( кажется ).
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Тутор о интеграции и юзабельности для нубаков напишите?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Немного оффтоп, но мне пришла мысль, а можно ли добавить поддержку VTF текстур ?
Я думаю, что да.
За основу можно взять все тот же код для AviKitа.
Короче грузим vtf файл, потом в VTFLib конвертируем изображение в bitmap и рендерим его вместо кадра из видео.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64 а у тебя есть описалово VTF формата?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
fire64
Зачем тебе VTF, если есть TGA/JPG/PNG/etc?
__________________
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Я подал идею как подружить сорцовский хаммер с первой халфой - если народ не может прикрутить туда подержку вадов, пусть прикрутят .vtf в халфу и радуются.
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
fire64 это можно БЫЛО сделать на базе хлфх, но просто я и представить себе не мог, что кого-то заинтересует этот сомнительный узкоспециализированный формат. А конвертеров VTX->чтототамщё навалом.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
ну так зря я что ли три года возился и.т.д.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
.vtf прикрутить еще пол беды, а вот материал систем - %).
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну в первой хл тоже есть свой материал систем. =)
__________________
Владелец восьмиструнного монстра Schecter Omen-8 Vintage White (VWHT)
Бывал на концертах этих групп: Rashamba, 7000$, Louna, Molecul, Project Revolution, Headsource, Digimortal и многих других. Куча автографов.
Я член возлагаю на сраный геймдев.
Временная зона GMT. Текущее время 20:38. | Показать все 109 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024