Animation erstellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Mathias
Beiträge: 6912
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 »

Wahrscheinlich stimmt mit der Z-Position noch etwas nicht, das man das weisse Rechteck nicht sieht.
Ansonsten sieht sie doch gut aus, oder ?
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 »

Da sind wir aber verschiedener Meinung. Ich finde es nicht gut. Diese ausgefransten Linien gefallen mir gar nicht.
Vor "OpenGL" sah das so aus:
Schraffur5.JPG
Schraffur5.JPG (12.54 KiB) 2283 mal betrachtet

Mathias
Beiträge: 6912
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 »

Diese ausgefransten Linien gefallen mir gar nicht.
Was meinst du damit ?
Die schwarze Umrandung der Schraffur ?
Oder meinst du, weil die Linien der Schraffur nicht schön 45° sind ? Hast du immer noch glScalef für die Textur eingebaut ?
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 »

Ohne scale sieht das so aus:
Schraffur6.JPG
Schraffur6.JPG (11.14 KiB) 2281 mal betrachtet
Mit scale (30,20,1):
Schraffur7.JPG
Schraffur7.JPG (14.03 KiB) 2281 mal betrachtet
Was meinst du damit ?
Die schwarze Umrandung der Schraffur ?
Der Unterschied sollte deutlich zu sehen sein. Eine Umrandung habe ich ja nicht.
Außerdem ist, nur mit scale !, dieser komische Effekt wieder da. Mein Bildschirm wird um Einiges dunkler.
Bin jetzt am Überlegen eine andere Lösung zu suchen.

Der Anhang von meinem letzten Post zeigt wie ich es gerne hätte.

Mathias
Beiträge: 6912
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 »

Außerdem ist, nur mit scale !, dieser komische Effekt wieder da.
Dann lasse das scale weg und ändere den Faktor.

Code: Alles auswählen

procedure gl(x, y, z: single);
const
  Faktor=0.3; // zB. 5.0
begin
  glTexCoord2f(x * Faktor, y * Faktor);
  glVertex3f(x, y, z);
end; 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6912
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 »

Du hattest recht, die Schraffur sieht komisch aus, mit folgendem Filter sollte es auch bei dir verschwinden.
Aber das mit dem Faktor würde ich trotzdem ändern.

Code: Alles auswählen

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
 
//    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
Dateianhänge
Zwischenablage-1.jpg
Zwischenablage-1.jpg (8.84 KiB) 2281 mal betrachtet
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 »

Nun sieht das schon etwas besser aus. Ideal finde ich das aber immer noch nicht.
Vor Allem ist dieser Effekt mit dem dunklen Bildschirm wieder da.
Ich habe aber keine "Color-Anweisung" finden können die das verursachen könnte.
Man erkennt das recht gut am grauen Hintergrund innerhalb der schraffierten Flächen.
das sollte eigentlich weiss sein.
Schraffur8.JPG
Schraffur8.JPG (14.04 KiB) 2281 mal betrachtet
Das ist jetzt der komplette Code der mit der Texture zu tun hat:

Code: Alles auswählen

procedure TSteuerung.FormCreate(Sender: TObject);
begin
  SWWG := 0;
  SWWB := 30;
  InitOpenGL;
  OpenGLControl1.MakeCurrent;
  ReadExtensions;
  ReadImplementationProperties;
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LESS);
  glGenTextures(1, @textureID0);
  glBindTexture(GL_TEXTURE_2D, textureID0);
  bit := CreateBitmap;
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, bit.Width, bit.Height,
    0, GL_BGR, GL_UNSIGNED_BYTE, bit.RawImage.Data);
  bit.Free; // Temporäre Bitmap wieder frei geben.
  glGenerateMipmap(GL_TEXTURE_2D);
  quadricParam := @gluNewQuadric;
  TBSpeed.Position := 30;
  Winkel := 0;
  VOR := True;
  BtVor.Caption := 'rückwärts';
  DoubleBuffered := True;
end;                                                    

Code: Alles auswählen

function TSteuerung.CreateBitmap: TBitmap;
begin
  Result := TBitmap.Create;
  with
    Result do
  begin
    Width := 16;
    Height := 16;
    with Canvas do
    begin
      Pen.Color := clWhite;
      Pen.Width := 2;
      Brush.Color := clWhite;
      Rectangle(0, 0, Result.Width, Result.Height);
      Pen.Color := clBlack;
      Line(0, 0, Result.Width, Result.Height);
    end;
  end;
end;                                     

Code: Alles auswählen

procedure Tsteuerung.gl(x, y, z: single);
const
  Faktor = 7;
begin
  glTexCoord2f(x * Faktor, y * Faktor);
  glVertex3f(x, y, z);
end;                                                      

Code: Alles auswählen

procedure TSteuerung.Zylinder(Hub, ZTA, KMZM: single);
begin
  // --- Textur Aktivieren
  glEnable(GL_TEXTURE_2D);
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, textureID0);
  glBegin(GL_QUADS);
  glColor3f(1, 1, 1);
  gl(ZTA - Hub * 0.75, Hub * 0.5, 0);
  gl(ZTA - Hub * 0.75, -Hub * 0.5, 0);
  gl(ZTA + Hub * 0.75, -Hub * 0.5, 0);
  gl(ZTA + Hub * 0.75, Hub * 0.5, 0);
  glEnd();
  glBegin(GL_QUADS);
  glDisable(GL_TEXTURE_2D);
  glColor3f(1, 1, 1);
  glVertex3f(ZTA - Hub * 0.7, Hub * 0.3, -0.02);
  glVertex3f(ZTA - Hub * 0.7, -Hub * 0.3, -0.02);
  glVertex3f(ZTA + Hub * 0.7, -Hub * 0.3, -0.02);
  glVertex3f(ZTA + Hub * 0.7, Hub * 0.3, -0.02);
  //Schieberkasten
  glColor3f(0, 0, 0);
  glVertex3f(ZTA - Hub * 0.75, 2 * KMZM - (Hub / 2), 0);
  glVertex3f(ZTA - Hub * 0.75, Hub / 2, 0);
  glVertex3f(ZTA + Hub * 0.75, Hub / 2, 0);
  glVertex3f(ZTA + Hub * 0.75, 2 * KMZM - (Hub / 2), 0);
  glColor3f(1, 1, 1);
  glVertex3f(ZTA - Hub * 0.7, KMZM + Hub / 7, -0.02);
  glVertex3f(ZTA - Hub * 0.7, KMZM - Hub / 7, -0.02);
  glVertex3f(ZTA + Hub * 0.7, KMZM - Hub / 7, -0.02);
  glVertex3f(ZTA + Hub * 0.7, KMZM + Hub / 7, -0.02);
  glEnd();
end;                                                     

Mathias
Beiträge: 6912
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 »

Code: Alles auswählen

 glBegin(GL_QUADS);
glDisable(GL_TEXTURE_2D);
glDisable darf nicht innerhalb von glBegin und glEnd sein.

Wen du diese beiden Zeilen vertauscht, sollte es gut sein.
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 »

Vielen Dank!
Es ist mir etwas unangenehm Dich wegen diesem Fehler bemüht zu haben. Darauf hätte ich wirklich selber kommen können.
Ich habe den Code mehrmals überprüft aber manchmal sieht man den Wald vor Bäumen nicht.

Mathias
Beiträge: 6912
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 »

Es ist mir etwas unangenehm Dich wegen diesem Fehler bemüht zu haben. Darauf hätte ich wirklich selber kommen können.
Dies ist mir auch schon passiert, manchmal sucht man viel zu weit.. :oops:


Die Position des Schiebersteines stimmt immer genauer, aber ist immer noch nicht perfekt.
Dateianhänge
OpenGL_Rad.zip
(137.25 KiB) 75-mal heruntergeladen
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 »

Sehr schade, ich kann das leider nicht anschauen:
haengegestaenge.pas(93,64) Error: Operator is not overloaded: "TPointf" + "TPointf"
Die Position des Schwingensteins mache ich so (x,y,z):

Code: Alles auswählen

((cos(SPW / 180 * Pi) * Mathe.RAB), sin(SPW / 180 * Pi) * Mathe.RAB, 0); 
Mathe.RAB ist die Länge der Schwingenstange.(wird berechnet)
SPW/SWSP ist der Winkel der Auslenkung des Schwingensteins:

Code: Alles auswählen

RadToDeg((arcsin(SWSP * sin(90) / st)) * 2); 
st ist die Position (in y) des Schwingensteins. (kommt von einer Trackbar)

P.S. Hab Deinen Post nochmal gelesen. Ich hatte Schwingenstein mit Schieberstein verwechselt.
Nun brauch ich auch noch eine neue Brille...
Sorry

Mathias
Beiträge: 6912
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 »

Sehr schade, ich kann das leider nicht anschauen:
In der Zip ist eine Exe die bei dir laufen sollte. http://mathias1000.bplaced.net/OpenGL_R ... GL_Rad.zip
P.S. Hab Deinen Post nochmal gelesen. Ich hatte Schwingenstein mit Schieberstein verwechselt.
Ich meinte eigentlich schon den Stein bei der Schwinge.
Gibt es überhaupt einen Schieberstein ?
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 »

Einen "Schieberstein" kenne ich so nicht.

Vielen Dank für das ZIP-File. Die exe läuft bei mir auch.

Deinen Code habe ich versucht zu verstehen. Leider komme ich da nicht mehr richtig mit. Dazu trennen uns wohl Welten was die Erfahrung im Programmieren angeht.

Woher kommt der Fehler beim Compilieren? Kann ich, von meiner Seite aus, etwas dagegen tun?

Wenn ich mir Dein Programm anschaue fällt mir folgendes auf:
Der Mittlepunkt des Schwingenkreises (der kleine Punkt) sollte bei 0° und bei 180° das Zentrum des mittleren Lagers des Voreilhebels treffen wenn die Voreilung 0 beträgt. Sonst stimmt die Geometrie nicht.
Wichtig dabei ist auch der Neigungswinkel der Schwinge (ergibt sich aus der Differenz der Positionen von Schwingenlager und Anlenkpunkt (mittleres Lager Voreilhebel).
Bei mir ist da auch noch ein kleiner Fehler drin.
Schau mal, zum Vergleich, in mein Programm . Einfach bei den Eingaben "Voreilung" 0 eingeben.

Mathias
Beiträge: 6912
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 »

Woher kommt der Fehler beim Compilieren? Kann ich, von meiner Seite aus, etwas dagegen tun?
FPC 3.1.1, dort habe sie zu dem einfachen Record von TPointF etliche Funktionen dazu gefügt.
Dazu trennen uns wohl Welten was die Erfahrung im Programmieren angeht.
Ich habe halt vieles in Klassen verpackt, schlussendlich wird das ganze dadurch übersichtlicher.
Bei normaler strukturiert Programmierung, braucht man sehr viele Variablen und somit wird es immer unübersichtlicher.
Wie du vielleicht gehen hast, hat es in den verschiedene Klassen sehr viel privates Zeugs.

Ich habe mir eine Bibliothek für OpenGL 3.3 geschrieben, wen ich die ohne Klassen gemacht hatte, dann hätte ich Null Überblick.
Der Mittlepunkt des Schwingenkreises (der kleine Punkt) sollte bei 0° und bei 180° das Zentrum des mittleren Lagers des Voreilhebels treffen wenn die Voreilung 0 beträgt. Sonst stimmt die Geometrie nicht.
Ich werde mir dies später mal angucken.
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,
bitte verstehe mich nicht falsch. Ich bin sehr dankbar für Deine Unterstützung aber ich habe erst vor einigen Wochen Lazarus installiert und vorher auch kaum mit Pascal zu tun gehabt.
Somit gibt es für mich noch viel zu lernen. Selbst Grundlagen stellen manchmal noch Hürden für mich dar.
Manchmal denke ich, dass ich mein Vorhaben wohl etwas zu blauäugig begonnen habe.
Deine Strategie möchte ich in keinster Weise kritisieren nur fehlt mir halt noch oft der Durchblick dafür.

Ich schau jetzt mal ob ich ein Update auf FPC 3.1.1 fertig bekomme.

Danke für Dein Verständnis

Hannes

Antworten