Animation erstellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo,

für die erhaltenen Ratschläge möchte ich mich bedanken.
Ich habe mich an das Beispiel von Mathias gehalten um etwas probieren zu können. Leider funktioniert das bei mir nicht.
Andere Beispiele aus verschieden Tutorials zeigen ebenfalls nur ein leeres Fenster mit einem schwarzen Balken unten links.
Ich habe den Header benutzt den Mathias vorgeschlagen hat.

Zuerst habe ich in meinem Project ein neues Form eingefügt. Danach den Header (dglOpenGl.pas) in den Projektordner kopiert.
Schließlich ein OpenGlControl auf das Form gezogen und den Code vom Mathias in meine Unit kopiert.

Code: Alles auswählen

unit Unit5;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, OpenGLContext, Forms, Controls, Graphics,
  Dialogs,ExtCtrls,DGLOpenGL;
 type
 
  { TAnimation }
 
  TAnimation = class(TForm)
    OpenGLControl1: TOpenGLControl;
    procedure FormCreate(Sender: TObject);
    procedure OpenGLControl1Paint(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Animation: TAnimation;
 
implementation
 {$R *.lfm}
 
{ TAnimation }
   procedure TAnimation.FormCreate(Sender: TObject);
begin
  InitOpenGL;
  OpenGLControl1.MakeCurrent;
  ReadExtensions;
  ReadImplementationProperties;
 end;
  procedure TAnimation.OpenGLControl1Paint(Sender: TObject);
begin
  glClearColor(0.8, 0.5, 0.3, 1.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glEnable(GL_DEPTH_TEST);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
 
  glBegin(GL_TRIANGLES);
  glColor3f(1, 0, 0);
  glVertex3f(1, 1, 0);
  glColor3f(0, 1, 0);
  glVertex3f(-1, 0, 0);
  glColor3f(0, 0, 1);
  glVertex3f(1, 0, 0);
  glEnd();
  OpenGLControl1.SwapBuffers;
end;
 
end.
 
Es kommen keine Fehlermeldungen beim Übersetzen.

Danke für Eure Geduld mit mir !

Hannes

Mathias
Beiträge: 6916
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Andere Beispiele aus verschieden Tutorials zeigen ebenfalls nur ein leeres Fenster mit einem schwarzen Balken unten links.
Das mit den schwarzen Balken kann ich nicht nachvollziehen, aber wen ich es so mache wie du scheibst, ist das ganze Form hellbraun.

Etwas habe ich aber vergessen, du muss noch bei den Eigenschaften von OpenGLControl1, AutoResizeViewPort auf True setzen.
Ansonsten kommt definitiv kein Dreieck.
Wen das bei dir dann läuft, zeige ich noch wie, wie man es eleganter mit einem Timer löst, das wirst du sowieso brauchen, wen es animiert werden soll.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,

AutoResizeViewPort ist schon = True. Wenn ich daraus = false mache ändert sich nix.
Ich habe schon einige Zeit investiert aber komme einfach nicht dahinter was ich falsch mache.
Das mit dem schwarzen Balken ist irreführend ! Wenn ich das Programm starte bleibt der Bereich einfach leer (weiß), erst wenn ich das Form vergrößere sehe ich schwarze Bereiche.

Danke Dir

Hannes

Mathias
Beiträge: 6916
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Kompiliere mal meinen Anhang, ich hoffe das es dann geht.

http://mathias1000.bplaced.net/opengltest.zip
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,

Dein Project funktioniert auf Anhieb!
Was läuft bei mir falsch?
Ich schaue mir jetzt mal gründlich den Quellcode von Deinem Beispiel an. Vielleicht komme ich ja dann dahinter.

So langsam schwindet bei mir der Mut mich weiter damit zu befassen. Wie will ich denn eigene Sachen zum Laufen bringen wenn es mir nicht einmal gelingt ein kleines Beispiel laufen zu lassen ?

Nochmals: Danke!

Hannes

Warf
Beiträge: 2119
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Animation erstellen

Beitrag von Warf »

Johannes hat geschrieben:Hallo Mathias,

AutoResizeViewPort ist schon = True. Wenn ich daraus = false mache ändert sich nix.
Ich habe schon einige Zeit investiert aber komme einfach nicht dahinter was ich falsch mache.
Das mit dem schwarzen Balken ist irreführend ! Wenn ich das Programm starte bleibt der Bereich einfach leer (weiß), erst wenn ich das Form vergrößere sehe ich schwarze Bereiche.

Danke Dir

Hannes
Mal so ne ganz dumme Frage, hast du überhaupt einen Call von OpenGLControl1.Invalidate (in Timer oder in Idle), sonst wird der Spaß nie neu gezeichnet

Mathias
Beiträge: 6916
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Mal so ne ganz dumme Frage, hast du überhaupt einen Call von OpenGLControl1.Invalidate (in Timer oder in Idle), sonst wird der Spaß nie neu gezeichnet
Das ist im Beispiel mit TAnimation.OpenGLControl1Paint gemacht. Vielleicht hast du recht und die Methode wurde nur kopiert.
Sie muss natürlich auch im Objectinspector bei OpenGLControl1.OnResize eingetragen sein.
Mit FormCreate das selbe in Grün.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo,

jetzt läuft es endlich so wie es soll. Danke!
Einen Timer brauche ich sowieso. Als nächstes muss ich versuchen zu verstehen wie man mit der Skalierung des Fensters umgeht.
Gibt es eine Quelle welche weitere Möglichkeiten zum Zeichnen (z.B. GL_TRIANGLES oder GL_Quad) erklärt?

Ich wünsche Euch einen schönen Abend

Hannes

Warf
Beiträge: 2119
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Animation erstellen

Beitrag von Warf »

Johannes hat geschrieben:Hallo,

jetzt läuft es endlich so wie es soll. Danke!
Einen Timer brauche ich sowieso. Als nächstes muss ich versuchen zu verstehen wie man mit der Skalierung des Fensters umgeht.
Gibt es eine Quelle welche weitere Möglichkeiten zum Zeichnen (z.B. GL_TRIANGLES oder GL_Quad) erklärt?

Ich wünsche Euch einen schönen Abend

Hannes
So gut wie alles zum Thema OpenGL findest du hier: https://delphigl.com/

In den Tutorials wird auch gut alles erklärt

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Danke für den Link.
Ich zweifle momentan stark daran mein Vorhaben weiter in dieser Richtung voran zu treiben.
Es werden in den Tutorials viele interessante Dinge erklärt die man zur Erzeugung toller grafischer Effekte bei,z.B., Spielen braucht.
Ich brauche das Alles nicht. Ich brauche eine Möglichkeit um die Bewegungsabläufe in einem Hebelsystem sichtbar zu machen. Dazu muss ich ein definiertes Koordinatensystem haben und in der Lage sein mechanische Komponenten wie z.B. Hebel und Räder zu erstellen, deren Größe und Position von Variablen abhängig zu machen und miteinander zu verbinden.
Natürlich ist es reizvoll eine solche, kleine, Animation in guter Qualität zu erhalten aber der Aufwand erscheint mir, als Einsteiger, doch zu gross.
Bisher konnte ich den Tutorials zu OpenGl nicht viele, für mich interessante, Informationen entnehmen. Das mag sicherlich auch an mir liegen.
Ich möchte hier nicht als ewig Fragender DAU angesehen werden.

Vor 14 Tagen habe ich angefangen mich mit "Lazarus" zu beschäftigen. Herausgekommen ist ein kleines lauffähiges Programm welches mir einige Berechnungen durchführt.
Das Speichern und Laden von Projektdaten über Records funktioniert auch (endlich) reibungslos.

Es wird nicht verkehrt sein das Ganze einmal zu überschlafen.

Vielen Dank an Alle die mir geholfen haben

Hannes

Hannes

Warf
Beiträge: 2119
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Animation erstellen

Beitrag von Warf »

Johannes hat geschrieben:Danke für den Link.
Ich zweifle momentan stark daran mein Vorhaben weiter in dieser Richtung voran zu treiben.
Es werden in den Tutorials viele interessante Dinge erklärt die man zur Erzeugung toller grafischer Effekte bei,z.B., Spielen braucht.
Ich brauche das Alles nicht. Ich brauche eine Möglichkeit um die Bewegungsabläufe in einem Hebelsystem sichtbar zu machen. Dazu muss ich ein definiertes Koordinatensystem haben und in der Lage sein mechanische Komponenten wie z.B. Hebel und Räder zu erstellen, deren Größe und Position von Variablen abhängig zu machen und miteinander zu verbinden.
Natürlich ist es reizvoll eine solche, kleine, Animation in guter Qualität zu erhalten aber der Aufwand erscheint mir, als Einsteiger, doch zu gross.
Bisher konnte ich den Tutorials zu OpenGl nicht viele, für mich interessante, Informationen entnehmen. Das mag sicherlich auch an mir liegen.
Ich möchte hier nicht als ewig Fragender DAU angesehen werden.

Vor 14 Tagen habe ich angefangen mich mit "Lazarus" zu beschäftigen. Herausgekommen ist ein kleines lauffähiges Programm welches mir einige Berechnungen durchführt.
Das Speichern und Laden von Projektdaten über Records funktioniert auch (endlich) reibungslos.

Es wird nicht verkehrt sein das Ganze einmal zu überschlafen.

Vielen Dank an Alle die mir geholfen haben

Hannes

Hannes
Das mit den Koordinatensystemen regelt sich bei 2D, da sind Pixel die koordinaten

Ich kann nach wie vor Andorra empfehlen, das vereinfacht das ganze nochmal

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Danke aber heute brauch ich wirklich nix Neues mehr.
Wenn der Frust mal vorbei geht werde ich mich, vielleicht, damit befassen.
Diese Aussage:
Ernsthaft ? Direktes Opengl für nen Einsteiger ?
In GLScene müsste ers nur RAD mässig zusammenklicken.
Warum eigentlich Lazarus und nicht gleich Assembler ?
macht mir meine Entscheidung auch nicht einfacher.
Ev. hätte ich auf meine alten Tage doch Briefmarken sammeln sollen ....

Gute Nacht Forum

Warf
Beiträge: 2119
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Animation erstellen

Beitrag von Warf »

Johannes hat geschrieben:Danke aber heute brauch ich wirklich nix Neues mehr.
Wenn der Frust mal vorbei geht werde ich mich, vielleicht, damit befassen.
Diese Aussage:
Ernsthaft ? Direktes Opengl für nen Einsteiger ?
In GLScene müsste ers nur RAD mässig zusammenklicken.
Warum eigentlich Lazarus und nicht gleich Assembler ?
macht mir meine Entscheidung auch nicht einfacher.
Ev. hätte ich auf meine alten Tage doch Briefmarken sammeln sollen ....

Gute Nacht Forum
Lass dich nicht davon abschrecken, dass OpenGL so groß ist, wenn du dich ein Wenig eingelesen hast z.B. in Andorra kannst du dass ganz einfach. Ich denke du würdest nicht mehr als einen Tag brauchen bis du deine Animationen hinbekommst.

z.B. als kleiner ansporn:

Code: Alles auswählen

AdDraw1.BeginScene;
AdDraw1.ClearSurface(clBlack);
 
with AdDraw1.Canvas do
begin
  Ellipse(0,0, 100, 100);
  Ellipse(200, 0, 300, 100);
  Line(50, 50, 250, 50)
  Release;
end;
 
AdDraw1.EndScene;
AdDraw1.Flip;
Reicht schon um 2 Kreise zu zeichnen und diese mit einer Linie zu verbinden. Und wirklich kompliziert ist das nicht. Du benötigst zwar ein wenig code noch drum herum, aber den Holst du dir einmal aus einem Andorra tutorial und musst ihn wenn überhaupt nur marginal anpassen. Den ganzen komplizierten Kram wie Lichter, Shader, Texturen, etc bennötigst du für dein Vorhaben ja nicht mal, und dafür eignet sich Andorra mit dem Canvas sehr gut, und die einarbeitungszeit geht gegen 0

Oder du könntest über z.B. ein TPaintBox das ganze mit der Canvas Property zeichnen Lassen und durch einen Timer Aktualisieren einfache Animationen lassen sich damit auch machen.

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo,

Deine Einschätzung meine kleine Animation innerhalb eines Tages zu basteln ist wohl sehr optimistisch!
Ich habe mich mal an "Andorra" versucht aber, wie schon befürchtet, bekomme ich das nicht zum Laufen.
Es gibt reihenweise Tutorials im Netz die mir aber nicht weiterhelfen.
Zuerst habe ich mir den aktuellen Download gesucht und nach dem Entpacken einen Ordner "ad2d_451" erhalten.
Darin gibt es auch eine "AndorraOGLLaz.dll". Diese in das Projectverzeichnis zu kopieren reicht nicht aus ?
Eingetragen im Objectinspektor ist sie auch.

Code: Alles auswählen

interface
 
uses
  Classes, SysUtils, FileUtil, OpenGLContext, Forms, Controls, Graphics,
  Dialogs,ExtCtrls,DGLOpenGL,AdDraws,AdClasses,AdTypes;
   type                                       
Ergebnis:
Der Compiler kennt "AdDraws" nicht.
Also wieder im WWW gesucht. Hier http://andorra.sourceforge.net/indexc70 ... azarus1ger ein Tut gefunden und versucht danach vorzugehen.
Das Project "AndorraOGL.lpi" läßt sich nicht übersetzen: "Error: Import library not found for c"
Die Pfadeinstellungen habe ich x-mal kontrolliert und angepasst.

Ein Frustabbau ist nicht in Sichtweite...

Trotzdem Danke

Hannes

Warf
Beiträge: 2119
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Animation erstellen

Beitrag von Warf »

Dieses Beispielprojekt funktioniert bei mir (Laz Trunc, FPC 3.0.0, Windows 10 32 Bit VirtualBox VM) wunderbar.

Du musst die Selbe FPC version verwenden wie die auf der die DLL gebaut wurde, also wenn du fpc 3.0.0 verwendest und 32 Bit kannst du meine kompilierte DLL aus den beispiel problemlos verwenden

Versuch einfach dieses Projekt mit fpc3.0.0 zu kompilieren, musst natürlich die Pfade anpassen
Dateianhänge
TestAd2d.zip
(259.5 KiB) 71-mal heruntergeladen

Antworten