Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Okt 20, 2021 14:16

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Texturen
BeitragVerfasst: Do Sep 30, 2010 16:37 
Offline
DGL Member

Registriert: So Aug 01, 2010 17:29
Beiträge: 28
Hallo,
warum führt dieser Code immer nur zu einem schönen blauen Hintergrund?
Code:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses  DGLOpenGL, Windows, Classes, SysUtils, FileUtil, LResources, Forms, Controls,
  Graphics, Dialogs, ExtCtrls, ComCtrls, Buttons, SDL, SDL_Image;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Timer1:  TTimer;
    procedure FormDestroy(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
    StartTime, TimeCount, FrameCount: cardinal; //FrameCounter
    Frames, DrawTime: cardinal; //& Timebased Movement
    procedure SetupGL;
  public      { Public-Deklarationen }
    DC: HDC;  //Handle auf Zeichenfläche
    RC: HGLRC;//Rendering Context

    { public declarations }
  end;

var
  i:     integer = 0;
  Form1: TForm1;
  texid: gluint;

const
  NearClipping = 1;
  FarClipping  = 1000;

implementation

uses gl, glu, glut;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeactivateRenderingContext;
  DestroyRenderingContext(RC);
  ReleaseDC(Handle, DC);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;

  glTranslatef(0, 0, -5);

    glBindTexture(GL_TEXTURE_2D,texid);

    glBegin(GL_QUADS);
        glTexCoord2f(0,0); glVertex3f(-1,-1,0);
        glTexCoord2f(0,1); glVertex3f(-1,1,0);
        glTexCoord2f(1,1); glVertex3f(1,1,0);
        glTexCoord2f(1,0); glVertex3f(1,-1,0);
    glEnd;

  SwapBuffers(DC);
end;

procedure TForm1.FormResize(Sender: TObject);
var
  tmpBool: boolean;
begin
  glViewport(0, 0, ClientWidth, ClientHeight);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth / ClientHeight, NearClipping, FarClipping);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  //IdleHandler(Sender, tmpBool);
end;

procedure InitTextures;
 var tex : PSDL_Surface;
begin
  tex := IMG_Load('bilder\gras18.jpg');
  if assigned(tex) then
  begin
    glGenTextures(1, @TexID);
    glBindTexture(GL_TEXTURE_2D, TexID);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    // Achtung! Einige Bildformate erwarten statt GL_RGB, GL_BGR. Diese Konstante fehlt in den Standard-Headern
    glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
    glEnable(GL_TEXTURE_2D);
    SDL_FreeSurface(tex);
      //ShowMessage('HI');
end;
end;

procedure TForm1.SetupGL;
begin
  glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  WindowState := wsMaximized;

   InitTextures;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  DC := GetDC(Handle);
  if not InitOpenGL then
    Application.Terminate;
  RC := CreateRenderingContext(DC, [opDoubleBuffered],
    32, 24,
    0, 0, 0, 0);
  ActivateRenderingContext(DC, RC);
  SetupGL;
end;

initialization
  {$I unit1.lrs}

end.


P.S. im Anhang ist das Bild "Gras18"


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 16:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7772
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Weil dein Quad im Uhrzeigersinn erstellt wird? Damit siehst du es von hinten. Und da du Backface Culling an hast, wird das einfach nicht angezeigt. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 16:53 
Offline
DGL Member

Registriert: So Aug 01, 2010 17:29
Beiträge: 28
Jetzt sehe ich ein weißes Viereck :-(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Jetzt sehe ich ein weißes Viereck :-(

D.h. du siehst zu mindest dein Quad, aber mit der Textur stimmt was nicht. Wahrscheinlich ein Problem mit dieser (mir unbekannten) IMG_Load Funktion, bzw. der Übergabe mit glTexImage2D. Von der OpenGL-Seite sieht das gut aus.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:03 
Offline
DGL Member

Registriert: So Aug 01, 2010 17:29
Beiträge: 28
Und was nun machen, damit ich mein Bild auf mein Quad Kriege?

Kann nicht vllt. jemand mal kurz seine Lade und Draw Funktion aus seinem Doku Ordner Posten?
^^Ok, ich weiß, dass ist viel verlangt aber vllt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Kann nicht vllt. jemand mal kurz seine Lade und Draw Funktion aus seinem Doku Ordner Posten?

Würde ich ja glatt machen, aber ich verwende nicht SDL sondern Qt bzw. libPNG zum Laden meiner Texturen. D.h. das würde dich mehr verwirren als dir weiterhelfen.

Ich ziehe mir mal gerade die SDL-Doku rein, Moment... (Edit: Das hat leider nicht weitergeholfen)

_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am Do Sep 30, 2010 17:35, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 23, 2009 04:33
Beiträge: 157
Programmiersprache: Turbo Delphi Pro
Ich habs mal ausprobiert, wenn ich Cullface ausschalte funktionierts bei mir! Entweder stimmt der Pfad zu der Textur bei dir nicht, oder SDL ist nicht korrekt installiert.

Btw, hier mal mein JPeg-Loader, weil ich bei mir SDL aus dem Projekt geworfen habe:
Er benötigt allerdings die unit jpeg in Delphi, was es da äquivalent bei FP gibt: keine Ahnung. Exception-Handling hab ich rausgefworfen, weil ich da noch auf andere Units zugreife, das müsstest du nach belieben einbauen.

Code:
  function loadJPG(ffile: String): Cardinal;
    var
      Texture: Cardinal;
      bm: tBitmap;
      jp: tJPegImage;
  begin
    Texture := 0;
    bm := tBitmap.Create;
    jp := tJpegImage.Create;
        jp.LoadFromFile(ffile);
        bm.Assign(jp);
        glGenTextures(1, @Texture);
        glBindTexture(Texture);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

        glTexImage2D(GL_TEXTURE_2D, 0, 3,
                     bm.Width, bm.Height,0,
                     GL_BGR, GL_UNSIGNED_BYTE,
                     bm.Scanline[bm.height-1]);
      bm.Free;
      jp.Free;
    result := Texture;
  end;

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Zuletzt geändert von Tilman am Do Sep 30, 2010 17:50, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wenn IMG_Load die Datei nicht findet müsste das laut Doku NIL zurückgeben, tut es aber nicht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:42 
Offline
DGL Member

Registriert: So Aug 01, 2010 17:29
Beiträge: 28
Wenn ich glDisable(GL_CULL_FACE);
mache, funktionirt es auch nicht,
es würde aber auch ein bmp gehen.


wobei der Fehler erst hier kommt: BindTexture(Texture);
Fehler: unit1.pas(170,20) Error: Identifier not found "BindTexture"
ist


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 23, 2009 04:33
Beiträge: 157
Programmiersprache: Turbo Delphi Pro
usp sorry, klar ich verwende da eigenen Krempel :oops: aber du musst einfach gl davor schreiben, BindTexture macht nichts anderes als glBindTexture ;)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:49 
Offline
DGL Member

Registriert: So Aug 01, 2010 17:29
Beiträge: 28
unit1.pas(170,31) Error: Wrong number of parameters specified for call to "<Procedure Variable>"

So funktionirt es:
glBindTexture(GL_TEXTURE_2D,Texture);

der nächste Fehler liegt hier:
glTexImage2D(GL_TEXTURE_2D, 0, 3,
bm.Width, bm.Height,0,
GL_BGR, GL_UNSIGNED_BYTE,
bm.Scanline[bm.height-1]);

unit1.pas(178,25) Error: identifier idents no member "Scanline"


Zuletzt geändert von flix am Do Sep 30, 2010 17:58, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 23, 2009 04:33
Beiträge: 157
Programmiersprache: Turbo Delphi Pro
Tja sorry, aber da wirst du schon die Zeile Preisgeben müssen, wenn ich da helfen soll :roll:

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 18:02 
Offline
DGL Member

Registriert: So Aug 01, 2010 17:29
Beiträge: 28
glTexImage2D(GL_TEXTURE_2D, 0, 3,
bm.Width, bm.Height,0,
GL_BGR, GL_UNSIGNED_BYTE,
bm.Scanline[bm.height-1]);

Mit dem Fehler: unit1.pas(79,25) Error: identifier idents no member "Scanline"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Do Sep 30, 2010 18:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 23, 2009 04:33
Beiträge: 157
Programmiersprache: Turbo Delphi Pro
Hm, das ist blöde. In FP scheint TBitmap kein Scanline zu haben. Damit ist mein Texturloader wohl raus, sorry. Aber versuch mal SDL korrekt zu installieren, alle benötigten DLLs in das selbe Verzeichnis wie die Anwendung, vielleicht klappts dann.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturen
BeitragVerfasst: Fr Okt 01, 2010 09:08 
Offline
DGL Member

Registriert: So Aug 01, 2010 17:29
Beiträge: 28
Nein, funktioniert leider immer noch nicht


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.079s | 15 Queries | GZIP : On ]