Lazarus und OpenGL für Anfänger

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

Lazarus und OpenGL für Anfänger

Beitragvon lzuser » 17. Feb 2011, 19:15 Lazarus und OpenGL für Anfänger

Ich möchte in Lazarus auf einem Formular in ein Rechteck (z.B. Panel ?)
eine Grafik mit OpenGL-Unterstützung anlegen.

Das bei Lazarus mitgelieferte Beispiel lässt sich einwandfrei übersetzen.
Das ist mir aber für den Einsteig zu kompliziert.
Im OpenGL-Tutorial scheitere ich schon bei der Umsetzung des ersten Beispiels
in ein lauffähiges Programm mit einem Formular.
Auf der Sourceforge-Lazarus-CCR-Page gibt es die Quelltexte nicht mehr.

Ich würde mich über ein wenig einfachsten Quelltext mit ein paar
Erläuterungen als Einstieg freuen.
Oder: Wie sollte ich vorgehen?

Vielen Dank für alle Vorschläge.
lzuser
 
Beiträge: 81
Registriert: 20. Jun 2009, 16:00

Beitragvon carli » 17. Feb 2011, 19:47 Re: Lazarus und OpenGL für Anfänger

carli
 
Beiträge: 660
Registriert: 9. Jan 2010, 18:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2 | 
CPU-Target: 64Bit
Nach oben

Beitragvon MAC » 17. Feb 2011, 20:52 Re: Lazarus und OpenGL für Anfänger

erinnert mich mal nen paar einstiegs-quellcode zu verfassen wenn ich zeit hab :)
aber sonst kann ich nur wie carli dgl empfehlen. Hab mir da auch ziemlich viel beigebracht...
Code: Alles auswählen
Signatur := nil;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 14:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon corpsman » 17. Feb 2011, 22:53 Re: Lazarus und OpenGL für Anfänger

guckst du Hier findest du meine Samples zu diesem Thema.
--
Just try it
corpsman
 
Beiträge: 1076
Registriert: 28. Feb 2009, 09:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon ErnstVolker » 18. Feb 2011, 10:17 Re: Lazarus und OpenGL für Anfänger

Hier muß ich auch mal nachfragen:

Die "DGLOpenGL.pas" habe ich mir runtergeladen und in Delphi eingebunden. Das Beispiel aus dem ersten Tutorial habe ich zum Einstieg
rüberkopiert (es war spät und sollt schnell gehen...) und es läuft auch unter Delphi 7.

Dann von Delphi nach Lazarus, aber es funktionierte nicht. Und unter Linux (Ubuntu 10.10) auch nicht. Ich habe momentan nicht den Rechner und die Zeit die Fehlermeldungen
genauer aufzulisten.

Deshalb meine Frage: Wie binde ich die dglOpenGL richtig in Lazarus ein? Muss ich sie vorher von Delphi nach Lazarus umwandeln oder muss ich die Compilerschalter abändern, oder beides?

MfG

Volker
ErnstVolker
 
Beiträge: 216
Registriert: 17. Feb 2009, 11:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon corpsman » 18. Feb 2011, 14:02 Re: Lazarus und OpenGL für Anfänger

Du musst unter Linux wie Windows Lazarus die TOpenGLControl Komponente installieren, dann DGLOpenGL.pas in das Verzeichnis in dem deine Anwendung liegt und z.b. das Sample von meiner HP (2 Posts weiter oben) rein kopieren und starten.

Fertig.

Aber egal wie, etwas Zeit solltest du dir schon nehmen..
--
Just try it
corpsman
 
Beiträge: 1076
Registriert: 28. Feb 2009, 09:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon ErnstVolker » 19. Feb 2011, 22:08 Re: Lazarus und OpenGL für Anfänger

Hallo corpsman,

ich bin jetzt auf Linux und habe versucht "LazOpenGLContext 0.0.1" zu installieren. Ein TOpenGLControl finde ich nicht.

Da kommt beim IDE-Compilieren:

/usr/bin/ld: warning: /home/volker/.lazarus/bin/link.res contains output sections; did you forget -T?
/usr/bin/ld: cannot find -lGL
/usr/lib/lazarus/0.9.28.2/ide/lazarus.pp(129,1) Error: Error while linking
/usr/lib/lazarus/0.9.28.2/ide/lazarus.pp(129,1) Fatal: There were 1 errors compiling module, stopping

Da scheitert's schon mal...

Gruß

Volker
ErnstVolker
 
Beiträge: 216
Registriert: 17. Feb 2009, 11:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon MAC » 20. Feb 2011, 02:25 Re: Lazarus und OpenGL für Anfänger

also TOpenGLControl oder GLScene oder so sind nicht dafür notwendig.
man brauch einfach nur den Header. Der rest "vereinfacht" die arbeit nur (nehm ich mal an - hab es nicht getestet)
Code: Alles auswählen
Signatur := nil;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 14:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon lzuser » 20. Feb 2011, 09:28 Re: Lazarus und OpenGL für Anfänger

ErnstVolker hat geschrieben:Hier muß ich auch mal nachfragen:

Die "DGLOpenGL.pas" habe ich mir runtergeladen und in Delphi eingebunden. Das Beispiel aus dem ersten Tutorial habe ich zum Einstieg rüberkopiert

Ich habe dieses erste Tutorial-Beispiel mit Del6 umgesetzt und es lief sofort.
Dabei habe ich nichts weiter installiert, nur die "DGLOpenGL.pas" in das Programmverzeichnis kopiert.
Dann habe ich das Beispiel nach Lazarus (0.9.28.2 beta-WinXP) kopiert. Auch dort läuft es, bis auf einen Typen-Fehler:
Warum kommt bei Lazarus (bei Del6 nicht) für die folgende Zeile

Code: Alles auswählen
StatusBar.Panels[1].Text:=gluErrorString(glGetError);


für "glGetError" die Fehlermeldung
Incompatible types: got "<procedure variable type of function:DWord;StdCall>" expected "LongWord"

Was muss ich wo ändern, um diesen Typ-Fehler abzustellen?

Vielen Dank eure Hinweise,
vor allem auf die Tutorials!
lzuser
 
Beiträge: 81
Registriert: 20. Jun 2009, 16:00

Beitragvon mse » 20. Feb 2011, 13:09 Re: Lazarus und OpenGL für Anfänger

lzuser hat geschrieben:StatusBar.Panels[1].Text:=gluErrorString(glGetError);

für "glGetError" die Fehlermeldung
Incompatible types: got "<procedure variable type of function:DWord;StdCall>" expected "LongWord"

Vermutlich
Code: Alles auswählen
StatusBar.Panels[1].Text:=gluErrorString(glGetError());
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon ErnstVolker » 20. Feb 2011, 14:39 Re: Lazarus und OpenGL für Anfänger

Hallo,

das Problem mit glGetError hatte ich auch. ()-setzen hinter glGetError hat geholfen, DANKE mse!!

Jetzt habe ich noch das Problem mit:

Code: Alles auswählen
Application.OnIdle := IdleHandler;


Hier kommt die Meldung:
Code: Alles auswählen
unit1.pas(57,36) Error: Wrong number of parameters specified for call to "IdleHandler"


Das Beispiel (Tutorial 1) läuft unter Delphi 7 einwandfrei.

Code: Alles auswählen
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure IdleHandler(Sender: TObject; var Done: Boolean); //Hier die Definition des Prototypen
    procedure Timer1Timer(Sender: TObject);                     
.
.
.


Hier die Form.Create Methode:
Code: Alles auswählen
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;
  Application.OnIdle := IdleHandler; //HIER SCHMECKT ES DEM COMPILER NICHT!!
end;


und hier "IdleHandler":
Code: Alles auswählen
procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
begin
  StartTime:= GetTickCount;
  Render;
  DrawTime:= GetTickCount - StartTime;
  Inc(TimeCount, DrawTime);
  Inc(FrameCount);
 
  if TimeCount >= 1000 then begin
    Frames:= FrameCount;
    TimeCount:= TimeCount - 1000;
    FrameCount:= 0;
    Caption:= InttoStr(Frames) + 'FPS';
    ErrorHandler;
  end;
  sleep(5);
  Done:= false;
end;


Was mache ich falsch?
Wo liegt hier der Unterschied zwischen Lazarus und Delphi?
Vielen Dank für einen Tipp!

Gruß

Volker
ErnstVolker
 
Beiträge: 216
Registriert: 17. Feb 2009, 11:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon mse » 20. Feb 2011, 15:16 Re: Lazarus und OpenGL für Anfänger

ErnstVolker hat geschrieben:Wo liegt hier der Unterschied zwischen Lazarus und Delphi?

FPC benötigt ein zusätzliches "@".
Code: Alles auswählen
Application.OnIdle := @IdleHandler;
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon ErnstVolker » 20. Feb 2011, 18:57 Re: Lazarus und OpenGL für Anfänger

Hallo,
danke für das "@" ! Hat geholfen zum compiliern. Aber es erscheint nur ein Graues Fenster.
Keinerlei Einfärbung, nix.

Gab's dieses Problem auch bei Anderen?

Ich werd' mal das Beispiel von corpsman probieren.

Volker
ErnstVolker
 
Beiträge: 216
Registriert: 17. Feb 2009, 11:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon ErnstVolker » 20. Feb 2011, 19:19 Re: Lazarus und OpenGL für Anfänger

Corpsman's Beispiel funktioniert :D

Ich musste lediglich "ugraphics, uvectormath" auskommentieren.

Danke Danke!!

Jetzt geht's an's Quelltextstudieren...

Volker
ErnstVolker
 
Beiträge: 216
Registriert: 17. Feb 2009, 11:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon lzuser » 20. Feb 2011, 20:14 Re: Lazarus und OpenGL für Anfänger

Code: Alles auswählen
sleep(5);
 Done:= false;


Bisher Lösung über Timer
Jetzt Lösung über IdleHandler

Bei Lazarus und Delphi das gleiche kleine Problem:

Ich gebe Fehlermeldung und Framezahl jeweils in der StatusBar aus
(Bei der Ausgabe über die Caption genauso)
Sobald vor dem Done:=false
ein Sleep(...) steht, wird in der Statuszeile nichts angezeigt
Ohne Sleep(...) funktioniert es.

Irgend eine Idee?
Zuletzt geändert von Lori am 20. Feb 2011, 20:14, insgesamt 1-mal geändert.
Grund: Highlighter
lzuser
 
Beiträge: 81
Registriert: 20. Jun 2009, 16:00

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Multimedia



Wer ist online?

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

porpoises-institution
accuracy-worried