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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2008, 22:58   #1
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию OpenGL и трансформирование

Юзаю OpenGl. И стала проблема как имеющийся ( ширина, высота ,формат пиксла и битовые данные в памяти ) вывести на экран зжатые как бы код приведен ниже... но это только если просточетырех угольник сделать и вывести...а мне надо так картинку выводить.

TGdipDIB - это мой класс... ну просто битовые данные и все в формате 32 бита.

Код:
procedure SetDCPixelFormat(dc: HDC);
var
  pfd: TPixelFormatDescriptor;
  nPixelFormat: Integer;
begin
  FillChar (pfd, SizeOf(pfd), 0);
  with pfd do
  begin
    nSize:= sizeof(pfd);
    nVersion:= 1;
    dwFlags:= PFD_DRAW_TO_WINDOW or
    PFD_SUPPORT_OPENGL or
    PFD_DOUBLEBUFFER;
    iPixelType:= PFD_TYPE_RGBA;
    cColorBits:= 16;
    cDepthBits:= 64;
    iLayerType:= PFD_MAIN_PLANE;
  end;
  nPixelFormat:= ChoosePixelFormat(DC, @pfd);
  SetPixelFormat(DC, nPixelFormat, @pfd);
end;

var
  Bmp: TGdipDIB;
  RC: HGLRC;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Bmp := TGdipDIB.Create(200, 400);
  Bmp.Fill($FFFFFFFF);

  SetDCPixelFormat(Canvas.Handle);

  RC := wglCreateContext(Canvas.Handle);
  wglMakeCurrent(Canvas.Handle, RC);

  glViewport(0,0,Width,Height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;               
  gluPerspective(60.0,Width/Height,1.0,30.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glTranslatef(0.0,0.0,-3.6);
  glClearColor(0.0,0.0,0.0,0.0);
  glShadeModel(GL_FLAT);
  glEnable(GL_DEPTH_TEST);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  wglMakeCurrent(0, 0);
  wglDeleteContext(RC);
  Bmp.Free;
end;                     

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, 1.0);
    glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0);
    glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
    glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
  glEnd;
  glFlush;
  glDisable(GL_BLEND);
  SwapBuffers(Canvas.Handle);
end;
Рисуется как надо, только как заменить полученный белый четырехугольник на свой DIB ?
Думаю юзать текстуры... но может все таки есть прямой вывод битовых данных...

Последний раз редактировалось BOBAH13; 05.10.2008 в 23:03.
BOBAH13 вне форума Ответить с цитированием
Старый 06.10.2008, 00:03   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Все как обычно всем спасибо
BOBAH13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D и OpenGl Dj_smart Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 29.10.2017 11:31
OpenGL Witaliy Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 01.05.2008 21:05
OpenGL prizrak1390 Свободное общение 2 07.04.2008 13:43
OpenGL Nbveh Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 25.10.2007 18:56