Тема: OpenGL в Delphi 7
Показать сообщение отдельно
  #2  
Старый 06.02.2011, 18:37
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Неужели никто не знает ответа..............я уже весь гугл облазил но ничего не нашел вот что я пытаюсь сделать:
Код:
procedure TForm1.BitmapToGLBitmap(ABitmap: TBitmap; var PicData: pointer);
 type TADataC = array[0..2] of GLuByte;
      TADataW = array of TADataC;
      TAData = array of TADataW;

      TRGBArray = array[0..0] of TRGBTriple;
      PRGBArray = ^TRGBArray;

 var AData: TAData;
     x, y: integer;
     col: PRGBarray;
     r, g, b: byte;
begin
 if (ABitmap.Width = 0) or (ABitmap.Height = 0) then
  begin
   PicData:= nil;
   exit;
  end;
 SetLength(AData, ABitmap.Width);
 for x:= 0 to ABitmap.Width - 1 do
   SetLength(AData[x], ABitmap.Height);
 ABitmap.PixelFormat:= pf24bit;
 for y:= 0 to ABitmap.Height - 1 do
  begin
   col:= ABitmap.ScanLine[y];
   for x:= 0 to ABitmap.Width - 1 do
    begin
     r:= col[x].rgbtRed; g:= col[x].rgbtGreen; b:= col[x].rgbtBlue;
     AData[x][y][0]:= r;
     AData[x][y][1]:= g;
     AData[x][y][2]:= b;
    end;
  end;
 PicData:= AData;
end;

.....

procedure TForm1.FormDblClick(Sender: TObject);
begin
 if OD1.Execute then
  begin
   Pic.LoadFromFile(OD1.FileName);
   doDraw;
  end;
end;

procedure TForm1.doDraw;
 var b: TBitmap;
     ImPointer: Pointer;
begin
 doQuard(1);
 if Pic.Graphic <> nil then
  begin
   b:= TBitmap.Create;
   b.Assign(Pic.Graphic);
   BitmapToGLBitmap(b, ImPointer);

   glEnable(GL_ALPHA_TEST);

   glEnable(GL_DEPTH_TEST);
   glEnable(GL_COLOR_MATERIAL);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
   glEnable(GL_BLEND);
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

   glRasterPos2d(nX, nY);
   glPixelZoom(Abs(2 * nX / Pic.Graphic.Width), Abs(2 * nY / Pic.Graphic.Height));
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
   glDrawPixels(Pic.Graphic.Width, Pic.Graphic.Height, GL_RGB,
                GL_UNSIGNED_BYTE, ImPointer); //<-вот здесь сильно ругается
   SwapBuffers(DC);
   b.Free;
  end;
end;
__________________
APPLICATION.TERMINATOR
Ответить с цитированием