Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2010, 11:17   #11
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

окно мне не важно, ибо это удел пользователя где и как он будет использовать.
таймер аналогично
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды
Demi вне форума Ответить с цитированием
Старый 07.04.2010, 11:41   #12
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

И еще на счет кодировки лучше прочитать в MSDN, там все хорошо описано.
Kostia вне форума Ответить с цитированием
Старый 07.04.2010, 15:19   #13
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

Попытался брать кадры из видео через DirectShow - производительность упала в сотни раз..
Короче оставляю старый метод работы с видео, будем искать причины почему не у всех работает..

Если кому интересно всё дело в кодеках оказалось.
они есть 2-х типов:DirectShow и VFW(Video For Windows)
DirectShow - используются только для воспроизведения, соответственно скорость им не особо нужна..
что собственно и показал мой опыт.. а VFW - кодаки для редактирования видео и показывают очень хорошие скоростные результаты.

В пакетах типа K-lite Mega Codek Pack и т.д. по-умолчанию ставятся DirectShow кодаки, со всеми вытекающими последствиями..
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды

Последний раз редактировалось Demi; 08.04.2010 в 08:52.
Demi вне форума Ответить с цитированием
Старый 09.04.2010, 15:49   #14
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

Небольшой мануал.

Примеры использования:
1 Инициализация
Код:
Код:
 Uses 
  GlEngine
...
 Var
   GLE:TGLEngine;
   im:Cardinal;
   Video:TGLVideo;
....
 GLE:=TGLEngine.Create;
  // Указываем на чём рисуем и каким размером
 GLE.VisualInit(GetDC(Panel1.Handle),Panel1.ClientWidth,Panel1.ClientHeight);
 // Загружаем картинку
 GLE.LoadImage(ExtractFilePath(application.ExeName)+'0.tga',im,false);
// Открываем видео - работает не у всех..
 GLE.OpenVideo(PChar(ExtractFilePath(application.ExeName)+'300divx.avi'),Video);
2 Рисование
Код:
Код:
GLE.BeginRender;
 GLE.SetColor(1,1,1,1); //текущий цвет RGBA
 GLE.SetBKColor(1,1,1); //цвет фона
 gle.PointSize(1); // размер точки
 gle.PointSmooth(true); // сглаживать точки  
 GLE.Point(20,20); // рисуем точку в координатах 20, 20
  GLE.LineWidth(1); //Толщина линии
  GlE.Line(40,20,80,20); // рисуем линию
  GlE.LineGrad(40,200+20,80,200+20,gle.ColorGL(Random,0,0,1),gle.ColorGL(0,0,random,1)); // градиентная линия
Остальное думаю будет понятно и без комментариев
Код:
Код:
 Procedure Bolt(x1,y1,x2,y2:single); // ломаная
  Procedure Arrow(x1,y1,x2,y2, size,angle:single;Solid:Boolean); // стрелка

  Procedure PointSize(Size:single);
  Procedure Point(x1,y1:single);
  Procedure PointSmooth(Enable:Boolean);

  Procedure Triangle(x1,y1,x2,y2,x3,y3:single);
  Procedure TriangleGrad(x1,y1,x2,y2,x3,y3:single;c1,c2,c3:TGLColor);

  Procedure Bar(x1, y1, x2, y2, x3, y3, x4, y4:single);  Overload ;
  Procedure Bar(x1, y1, x2, y2:single);  Overload;
  Procedure BarGrad(x1,y1,x2,y2,x3,y3,x4,y4:single;c1,c2,c3,c4:TGLColor);

  Procedure Ellipse(x,y,r1,r2,AngleRotate:single;n:integer);

  Procedure SetTextStyle(NameFont:string; size:integer);
  Procedure TextOut(x,y:single; text:string);
  Procedure KillFont;

  Procedure SetColor(r,g,b,a:single);Overload;
  Procedure SetColor(color:TGLColor);Overload;
  Procedure SetBKColor(r,g,b:single);
  Procedure SetFill(Mode:TGLFill);

  Procedure DrawImage(x,y,w,h,Angle:single;Center:boolean;Image:GlInt);
  Procedure DrawFrame(x1,y1,x2,y2:single;Center:boolean;var glVideo:TGLVideo);
  Procedure CloseVideo(var glVideo:TGLVideo);

  Procedure FinishRender;
  Procedure VisualDone;
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды
Demi вне форума Ответить с цитированием
Старый 13.04.2010, 22:29   #15
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цитата:
Если кому интересно всё дело в кодеках оказалось.
они есть 2-х типов:DirectShow и VFW(Video For Windows)
DirectShow - используются только для воспроизведения, соответственно скорость им не особо нужна..
что собственно и показал мой опыт.. а VFW - кодаки для редактирования видео и показывают очень хорошие скоростные результаты.

В пакетах типа K-lite Mega Codek Pack и т.д. по-умолчанию ставятся DirectShow кодаки, со всеми вытекающими последствиями..
Я таки не понял, вы отказались от поддержки видео? Или эта проблема решаться как то в дальнейшем будет?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 14.04.2010, 10:58   #16
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

На данный момент реализовано два метода работы с видео:
1 - через VFW - быстро и красиво
2 - Через DirectShow - медленно но надёжно
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды
Demi вне форума Ответить с цитированием
Старый 15.04.2010, 15:08   #17
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Я бы еще расширил кол-во вариаций вывода квадов с текстурой на экран

Код:
void Draw(TTexture *Texture, float x1, float y1, float x2, float y2);
void DrawRotate(TTexture *Texture, float x1, float y1, float x2, float y2, float a);
void DrawRect(TTexture *Texture, float u1, float v1, float u2, float v2, float x1, float y1, float x2, float y2);
void DrawRotateRect(TTexture *Texture, float u1, float v1, float u2, float v2, float x1, float y1, float x2, float y2, float a);
void DrawExt(TTexture *Texture, float u1, float v1, float u2, float v2, 
			float x1, float y1, float x2, float y2, float ox, float oy, float a);
И, еще, как и через что ты текстуры грузишь. Просто резмеры текстуры должны бать кратны степени двойки, иначе будет бяка(плохое качество или вообще прога не заработает на стареньких компах). Я в таком случае просто создаю тестуру кратную степени двойки и задаю текстурные координаты в соответсвии с текстурой.
Код:
	int x=1, y=1;
	while(x<w)x<<=1;
	while(y<h)y<<=1;
x и y - это новый размер тестуры
w и h - это размер картинки

Про смещение на пол пикселя текстуры не забудь, иначе при сглаживании могут быть глюки.
Код:
	Texture.u = (float)w/(float)x;
	Texture.v = (float)h/(float)y;

	Texture.du = Texture.u-(float)(w-1)/(float)x;
	Texture.dv = Texture.v-(float)(h-1)/(float)y;
А вот так я реализовал вывод текстурированого квада на экран:
Код:
void DrawExt(TTexture *Texture, float u1, float v1, float u2, float v2, 
									 float x1, float y1, float x2, float y2, float ox, float oy, float a)
{
	float dx = (x2 - x1) / 2.0, dy = (y2 - y1) / 2.0;
	float du,dv;
	if(Texture)
	{
		u1 = Texture->u*u1;
		v1 = Texture->v*v1;

		u2 = Texture->u*u2;
		v2 = Texture->v*v2;

		du = Texture->du;
		dv = Texture->dv;
	}
	glPushMatrix();
	glTranslatef(ox+x1,oy+y1,0);
	glRotatef(a,0,0,1);
	glTranslatef(dx-ox,dy-oy,0);

	glBegin(GL_TRIANGLE_STRIP);
		glTexCoord2f(u1+du, v2-dv); glVertex2f(-dx,-dy);
		glTexCoord2f(u1+du, v1+dv); glVertex2f(-dx, dy);
		glTexCoord2f(u2-du, v2-du); glVertex2f( dx,-dy);
		glTexCoord2f(u2-du, v1+du); glVertex2f( dx, dy);
	glEnd();

	glPopMatrix();
}
Еще, прочитай про batching можно будет оптимизировать отрисовку кадра

Уф, пока фсё=)

Последний раз редактировалось Kostia; 15.04.2010 в 15:10.
Kostia вне форума Ответить с цитированием
Старый 15.04.2010, 15:23   #18
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

Спасибо. Натолкнуло на мысли..
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды
Demi вне форума Ответить с цитированием
Старый 15.04.2010, 22:39   #19
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

А сглаживание? Антиальяс? Фильтрация, хотя бы самая простая?
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 16.04.2010, 08:05   #20
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

Сглаживание реализовано через GL_MULTISAMPLE_ARB
соответственно 2х, 4х, 8х, 16х и т.д. всё что поддерживает ваше железо
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды
Demi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить функцию для вычисления значения y=P(x) многочлена для заданного аргумента x KASPEER Помощь студентам 2 12.01.2010 15:03
Насколько можетбыть коротким код для решения задчки для Экселя? saga Microsoft Office Excel 0 04.04.2009 13:35
PopupMenu для формы свое, а для Edit - стандартное Виндоус yaver Общие вопросы Delphi 4 10.11.2008 15:03
Срочно : Требуется поставить запрет для иностранных IP для просмотра сайта. pornodiller Фриланс 2 06.11.2008 22:02
Бесплатный движок для САЙТА на Java Script для Бесплатных Хостингов антигерой HTML и CSS 0 15.04.2007 21:39