Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL: Texturen (https://www.delphipraxis.net/44536-opengl-texturen.html)

malo 20. Apr 2005 15:45


OpenGL: Texturen
 
Hi!

Ich will eine Textur einbinden. Diese hab ich bereits mit folgendem Code geladen:

Delphi-Quellcode:
texture1 := auxDIBImageLoadA('./texture/wall.bmp');
  if not Assigned( texture1 ) then
    begin;
      MessageBox(0,'Texturenpfad oder Dateiname falsch!',
                'Fehler beim Laden der Textur!',MB_OK or MB_ICONERROR);
      Halt;
    end;
Klappt auch fehlerlos. Im DelphiGL-Tutorial kommt nun folgender Code:

Delphi-Quellcode:
glGenTextures(1, tex);
Außerdem steht dort, dass Tex eine Variable vom Typ GLuInt sei. Wenn ich Tex jedoch nun als GLuInt deklariere, kommt der Fehler "Inkompatible Typen: PGLunt und Cardinal". Wenn ich Tex als PGLuint deklariere, kommt eine Speicherzugriffsverletzung. Wiß jemand, wie ich die Textur nun generieren kann? :?

brechi 20. Apr 2005 15:50

Re: OpenGL: Texturen
 
tex als GLuInt und dann @tex bei glGenTextures

sniper_w 20. Apr 2005 15:50

Re: OpenGL: Texturen
 
Nun ja.
Ich würde dir freundlich raten, den DGLOpenGL.pas zu downloaden und auch glBitmap.pas.
Dann einfach die Units einbinden, und los geht es.
Wie du mit glBitmap umgehen solltes, steht im Heared der Datei.

EDIT::
So in etwa :
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    myRc,myDc, Box : Cardinal;
    Texture : TglBitmap2D;
  public
    { Public declarations }
    procedure InitGl();
    procedure DeInitGl();
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.InitGl();
begin
 InitOpenGL();
 myDc := GetDC(Handle);
 myRc := CreateRenderingContext(myDc,[opDoubleBuffered],24,16,8,0,0,0);
 ActivateRenderingContext(myDc,myRc);

 glClearColor(0.3, 0.3, 0.3, 0.0);       // Black Background
 glClearDepth(1.5);                      // Depth Buffer Setup
 glEnable(GL_DEPTH_TEST);
 glDepthFunc (GL_LEQUAL);
 glEnable(glTEXTURE_2D);                    // Enable Texture Mapping

 glBitmapSetDefaultFilter(GL_LINEAR,GL_LINEAR); // aus glBitmap.pas

 Texture := TglBitmap2D.Create('FileName.bmp oder tga oder jpg');
// Texture.AssignFromBitmap(temp);
// Texture.BuildMipMaps := False;
 Texture.GenTexture();
end;

procedure TForm1.DeInitGl();
begin
 Texture.Free;
 DeactivateRenderingContext();
 ReleaseDC(Handle,myDc);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 InitGl();
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DeInitGl();
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
            // TODO : Draw Hier

 //glLoadIdentity();
  Texture.Bind(); // bie Bedarf

            // End Drawing
 SwapBuffers(myDc);
end;

procedure TForm1.FormResize(Sender: TObject);
begin//
 if (Height=0) then Height := 1 ;

 glViewport(0, 0, Width, Height);  
  glMatrixMode(GL_PROJECTION);        
   glLoadIdentity();                  
   gluPerspective(60.0, Width / Height, 1.0, 1000.0);  
 glMatrixMode(GL_MODELVIEW);        
  glLoadIdentity();                  

 FormPaint(Self);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key=27 then Close();
end;

end.
Ich hoffe, geholfen zu haben.

malo 20. Apr 2005 15:54

Re: OpenGL: Texturen
 
Zitat:

Zitat von sniper_w
Nun ja.
Ich würde dir freundlich raten, den DGLOpenGL.pas zu downloaden und auch glBitmap.pas.
Dann einfach die Units einbinden, und los geht es.
Wie du mit glBitmap umgehen solltes, steht im Heared der Datei.

Ich nutze bereits dglOpenGL, aber nicht glBitmap.pas. Eventuell schau ich mir demnächst mal glBitmap.pas an, aber jetzt nicht. Ich hab doch schon glaux.pas (bzw. glaux.dll) und textures.pas, das sollte fast schon reichen :mrgreen:

@brechi: Danke, jetzt kommt kein Fehler mehr :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz