Thema: Delphi glBMP unaufindbar...

Einzelnen Beitrag anzeigen

Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#7

Re: glBMP unaufindbar...

  Alt 5. Okt 2003, 14:11
glbmp verwendet opengl1.2 ? Das ist mir zwar neu, aber nagut:
Es gibt eine Althernative, Texturen zu laden... will man z.b. BMPs und JPEG's laden, dann kann man sich auch ne eigene Prozedur schreiben:


Delphi-Quellcode:
procedure loadtexture(var textur : integer; filename:string);
var
bitmap : tbitmap;
jpg : tjpegimage;

texdata : array[0..262143] of Trgbpoint;
r,g,b : byte;
x,y : integer;
tempint : integer;
xwidth, ywidth : integer;
begin

bitmap := tbitmap.create;

if (ExtractFileExt(filename) = '.jpg') or (ExtractFileExt(filename) = '.jpeg') then
begin
jpg := tjpegimage.Create;
jpg.LoadFromFile(filename);
jpg.CompressionQuality := 100;
 try
 bitmap.assign(jpg);
 finally
 jpg.free;
 end;
end
else
begin
 if ExtractFileExt(filename) = '.bmpthen
 begin
 bitmap.loadfromfile(filename);
 end;
end

xwidth := bitmap.Width;
ywidth := bitmap.Height;


for x := 0 to xwidth-1 do
begin
 for y := 0 to ywidth-1 do
 begin
 tempint := bitmap.canvas.pixels[x,y];
 r := TempInt and $FF;
 g := (TempInt shr 8) and $FF;
 b := (TempInt shr 16) and $FF;
 texdata[((ywidth-1)-y)*xwidth+x, 0] := r;
 texdata[((ywidth-1)-y)*xwidth+x, 1] := g;
 texdata[((ywidth-1)-y)*xwidth+x, 2] := b;
 end;
end;
  
  bitmap.free;

  glGenTextures(1, @textur);
  glBindTexture(GL_TEXTURE_2D, textur);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_linear);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_linear);
  glTexImage2D(GL_TEXTURE_2D, 0, 3, xwidth, ywidth, 0, GL_RGB, GL_UNSIGNED_BYTE, @texdata);
 
end;
Diese Prozedur kann man denn so aufrufen:

loadtexture(tex,'Textur.jpg'); Dabei ist "tex" vom Typ gluint und alles andere verhällt sich genau so, als wenn man die glaux-lib verwendet...
allerdings könnten einige wichtige Prozeduren / Funktionen fehlen, weshalb man sich die extra aus der Opengl32.dll holen muss:
Delphi-Quellcode:
procedure glGenTextures(n: integer; textures: Pinteger); stdcall; EXTERNAL opengl32;
procedure glBindTexture(target: uint; texture: integer); stdcall; EXTERNAL opengl32;
procedure glTexParameteri(target, pname: uint; param: integer); stdcall; EXTERNAL opengl32;
procedure glTexImage2D(target: uint; level, internalformat: integer; width, height: integer; border: integer; format, atype: uint; Pixels:Pointer); stdcall; EXTERNAL opengl32;
(hoffe, es sind nicht zu viele Fehler im Beitrag ... alles auf die schnelle zusammengeschweißt...)

Ps: falls du immernoch eine günstige Delphi-Version > v3 suchst, denn bitte mich per E-Mail ganz freundlich drum, ob ich dir den Dl-Link für die Delphi 6 Personal (war mal gratis) ausgraben kann

Edit: Jippie! Beitrag nummer 100
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat