Animation erstellen
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Noch eine kleine Verbesserung:
Man beachte den Farbübergang im Hintergrund.
Man beachte den Farbübergang im Hintergrund.
- Dateianhänge
-
OpenGL_Rad.zip
- (126.54 KiB) 54-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Hallo Mathias,
mir gehen langsam die "Danke" aus!
Eine Frage dazu: Die Togglebox soll doch das Multisampling umschalten, richtig?
Bei mir passiert beim 1. Betätigen nix Sichtbares. Beim 2.Mal wird die Darstellung dann "3d".
Ein Zurückschalten zur normalen Ansicht geht nicht mehr. Das muss ich mir aber erst noch genauer anschauen.
Habe Deine "Räder" erst jetzt entdeckt.
Gibt es so Etwas wie eine Referenz zu OpenGL/GLU welche mir die Möglichkeiten aufzeigt die ich noch nicht kenne ?
Die Aufgabe eine einfache Linie zu zeichnen scheint zu trivial zu sein um sie in einem Tutorial zu finden.
Ich würde mich natürlich freuen Dir etwas für Deine Mühen zurückgeben zu können, halte es aber für unwahrscheinlich.
Jetzt sollte ich aber auch mal wieder etwas tun sonst bist Du mit meinem Projekt schneller fertig..
Beste Grüße
Hannes
mir gehen langsam die "Danke" aus!
Eine Frage dazu: Die Togglebox soll doch das Multisampling umschalten, richtig?
Bei mir passiert beim 1. Betätigen nix Sichtbares. Beim 2.Mal wird die Darstellung dann "3d".
Ein Zurückschalten zur normalen Ansicht geht nicht mehr. Das muss ich mir aber erst noch genauer anschauen.
Habe Deine "Räder" erst jetzt entdeckt.
Gibt es so Etwas wie eine Referenz zu OpenGL/GLU welche mir die Möglichkeiten aufzeigt die ich noch nicht kenne ?
Die Aufgabe eine einfache Linie zu zeichnen scheint zu trivial zu sein um sie in einem Tutorial zu finden.
War das kein Scherz?Du bist ein absoluter Jenie, das habe ich schon seit Monaten gesucht.
Ich wollte dies später mal mit FrameBuffer und ähnlichem lösen.
Manchmal geht etwas sehr einfach.![]()
Ich würde mich natürlich freuen Dir etwas für Deine Mühen zurückgeben zu können, halte es aber für unwahrscheinlich.
Jetzt sollte ich aber auch mal wieder etwas tun sonst bist Du mit meinem Projekt schneller fertig..
Beste Grüße
Hannes
Re: Animation erstellen
Hallo,
ich hatte jetzt ein wenig Zeit mich mit der Umsetzung für mein Vorhaben zu befassen.
Dank der Beispiele von Mathias und ein wenig Recherche im Web fällt es mir immer Leichter
meine kleine Animation per OpenGL zu realisieren.
Viele Probleme die ich mit der alten Lösung hatte haben sich fast von selbst erledigt.
Wenn man mal den Einstieg geschafft hat fängt es richtig an Spaß zu machen.
Sicher werden auch noch Fragen aufkommen aber ich bin jetzt davon überzeugt endlich
die, für mich, richtige Lösung gefunden zu haben.
Danke und Gruß
Hannes
ich hatte jetzt ein wenig Zeit mich mit der Umsetzung für mein Vorhaben zu befassen.
Dank der Beispiele von Mathias und ein wenig Recherche im Web fällt es mir immer Leichter
meine kleine Animation per OpenGL zu realisieren.
Viele Probleme die ich mit der alten Lösung hatte haben sich fast von selbst erledigt.
Wenn man mal den Einstieg geschafft hat fängt es richtig an Spaß zu machen.
Sicher werden auch noch Fragen aufkommen aber ich bin jetzt davon überzeugt endlich
die, für mich, richtige Lösung gefunden zu haben.
Danke und Gruß
Hannes
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Ich habe es gerade mit VB und WinXP getestet, das Verhalten es anderes als mit Linux.Eine Frage dazu: Die Togglebox soll doch das Multisampling umschalten, richtig?
Bei mir passiert beim 1. Betätigen nix Sichtbares. Beim 2.Mal wird die Darstellung dann "3d".
Die Togglebox ist nur für Testzwecke.
Das war kein Scherz, ich habe viel zu weit gesucht.War das kein Scherz?
Das ist so, grafische Sachen zu schreiben finde ich das interessanteste auf dem PC.Wenn man mal den Einstieg geschafft hat fängt es richtig an Spaß zu machen.
OpenGL hat mich schon zur Win98-Zeiten begeistert, im dem DirektX-Zeugs konnte ich nie etwas anfangen.
Ein bisschen Eigenwerbung, was man mit OpenGL alles machen kann.
http://mathias1000.bplaced.net/Windows/ ... zeiger.exe
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Jetzt wird die Fähigkeit von OpenGL erst richtig sichtbar.
Man beachte dir Räder.
Man beachte dir Räder.
- Dateianhänge
-
OpenGL_Rad.zip
- (126.84 KiB) 56-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Hallo Mathias,
ist schon irre was man für Möglichkeiten hat. Ich kenne ja bisher nur wenige davon.
Umso mehr helfen mir Deine Beispiele. Die Farbverläufe sehen gut aus.
Dein Füllstandsanzeiger geht mir nicht aus dem Kopf.Man könnte auf Ideen kommen..
Ich kämpfe momentan mit dem Problem einen animierten Kreisbogen für meine Schwinge/Kulisse
zu erstellen aber auch das wird schon langsam.
Ohne Deine Unterstützung wäre es wohl nix geworden mit meinem Einstieg in OpenGL.
Danke
Hannes
ist schon irre was man für Möglichkeiten hat. Ich kenne ja bisher nur wenige davon.
Umso mehr helfen mir Deine Beispiele. Die Farbverläufe sehen gut aus.
Dein Füllstandsanzeiger geht mir nicht aus dem Kopf.Man könnte auf Ideen kommen..
Ich kämpfe momentan mit dem Problem einen animierten Kreisbogen für meine Schwinge/Kulisse
zu erstellen aber auch das wird schon langsam.
Ohne Deine Unterstützung wäre es wohl nix geworden mit meinem Einstieg in OpenGL.
Danke
Hannes
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Ich kämpfe momentan mit dem Problem einen animierten Kreisbogen für meine Schwinge/Kulisse
Code: Alles auswählen
procedure TForm1.Arc(ri, ra, w: single; aufl: integer);
var
w2: single;
begin
glBegin(GL_QUAD_STRIP);
w2 := 0;
repeat
w2 += aufl;
glVertex3f(cos(w2 / 180 * Pi) * ri, sin(w2 / 180 * Pi) * ri, 0);
glVertex3f(cos(w2 / 180 * Pi) * ra, sin(w2 / 180 * Pi) * ra, 0);
until w2 > w;
w2 := w;
glVertex3f(cos(w2 / 180 * Pi) * ri, sin(w2 / 180 * Pi) * ri, 0);
glVertex3f(cos(w2 / 180 * Pi) * ra, sin(w2 / 180 * Pi) * ra, 0);
glEnd();
end;
// Als Beispiel
if winkel < 180 then begin
glRotatef(winkel / 10, 0.0, 0.0, 1.0);
end else begin
glRotatef(180 / 10 - (winkel / 10 - 180 / 10), 0.0, 0.0, 1.0);
end;
Arc(radR * 1.2, radR * 1.4, 60, 10); // deutet eine Schwinge an
Code: Alles auswählen
until w2 > w;
w2 := 0;
// Sollte so sein:
w2 := w;
- Dateianhänge
-
OpenGL_Rad.zip
- (126.95 KiB) 56-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Warum sieht das Alles bei Dir immer so einfach aus?
Ich hatte mir einen Kreis, zu Fuß, gebastelt und wollte daraus einen Kreisbogen stricken:
Dein Beispiel muss ich mir genauer ansehen.
Ich hatte mir einen Kreis, zu Fuß, gebastelt und wollte daraus einen Kreisbogen stricken:
Code: Alles auswählen
procedure TSteuerung.Schwinge;
var
i, res: integer;
x, y, rd : single;
begin
RES:=360;
rd:=IAA/100;
glLineWidth(3);
glColor3f(0,0,0);
for i := 0 to res -1 do
begin
glBegin(GL_LINE_LOOP);
x :=IAB+ sin(DegToRad(i*360 / res))*rd;
y :=IAC+ cos(DegToRad(i*360 / res))*rd;
glVertex3f(x,Y,-0.03);
end;
glEnd;
end;
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Irgendwie sieht dein Code komisch aus.
RES ist 360 und unten hast du i * 360 / RES.
Anstelle von GL_LINE_LOOP habe ich alles aus Dreiecken und Rechtecken gezeichnet.
RES ist 360 und unten hast du i * 360 / RES.
Anstelle von GL_LINE_LOOP habe ich alles aus Dreiecken und Rechtecken gezeichnet.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Stimmt, sieht komisch aus. RES ist die Anzahl der Liniensegmente von einer vollen Umdrehung = 360°.
Wenn da 360 drin steht kommt natürlich 1 raus, also eine Teillinie für 1° des Kreises.
Ich hätte vielleicht, vor dem Einstellen, einen anderen Wert nehmen sollen.
Es funktioniert aber, auch wenn es nicht so elegant ist wie bei Dir.
Wenn da 360 drin steht kommt natürlich 1 raus, also eine Teillinie für 1° des Kreises.
Ich hätte vielleicht, vor dem Einstellen, einen anderen Wert nehmen sollen.
Es funktioniert aber, auch wenn es nicht so elegant ist wie bei Dir.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Ich habe mir deinen Code nochmal angeguckt, da hat es noch einen gröberen Fehler verbaut.
Das glBegin muss ausserhalb der for-to Schleife sein, so wie das glEnd.
Komisch, das dies überhaupt funktioniert hat.
Code: Alles auswählen
for i := 0 to res - 1 do begin
glBegin(GL_LINE_LOOP);
x := IAB + sin(DegToRad(i * 360 / res)) * rd;
y := IAC + cos(DegToRad(i * 360 / res)) * rd;
glVertex3f(x, Y, -0.03);
end;
glEnd;
Code: Alles auswählen
glBegin(GL_LINE_LOOP);
for i := 0 to res - 1 do begin
x := IAB + sin(DegToRad(i * 360 / res)) * rd;
y := IAC + cos(DegToRad(i * 360 / res)) * rd;
glVertex3f(x, Y, -0.03);
end;
glEnd;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Hallo Mathias,
ich hatte viel ausprobiert und wahrscheinlich vergessen das zu korrigieren.
Erstaunlich, dass dieser Code funktioniert hat. Ich sollte mehr Aufmerksamkeit aufbringen bevor ich hier was einstelle.
Jetzt hab ich mich aus Deinen Beispielen bedient und das gebastelt:
Muss nur noch rausfinden warum das letzte (erste?) Segment nicht gezeichnet wird.
Ansonsten funktioniert das bestens. Außerdem kommt mir "GL_QUAD_STRIP" sehr entgegen.
So hab ich auch gleich die gewünschte Kontur.
Ich hab noch viel zu lernen.
Danke
Hannes
ich hatte viel ausprobiert und wahrscheinlich vergessen das zu korrigieren.
Erstaunlich, dass dieser Code funktioniert hat. Ich sollte mehr Aufmerksamkeit aufbringen bevor ich hier was einstelle.
Jetzt hab ich mich aus Deinen Beispielen bedient und das gebastelt:
Code: Alles auswählen
procedure TSteuerung.Schwinge;
var
Res: integer; // Auflösung
ri,ra :single;
w,w2,wa,we: single;
begin
Res:= 10;
w:= 40 ;//SWWL; // Winkel Schwingenbogen
wa:= 180-(w/2); // Winkel Schwingenbogen Anfang
we:= 180+(w/2); // Winkel Schwingenbogen Ende
ri:= Mathe.RAB-IAA/70; // Radius Schwingenbogen innen
ra:= Mathe.RAB+IAA/70; // Radius Schwingenbogen aussen
glBegin(GL_QUAD_STRIP);
w2 := wa;
repeat
w2 += Res;
glVertex3f(cos(w2 / 180 * Pi) * ri, sin(w2 / 180 * Pi) * ri, 0);
glVertex3f(cos(w2 / 180 * Pi) * ra, sin(w2 / 180 * Pi) * ra, 0);
until w2 = we;
w2 := we;
glVertex3f(cos(w2 / 180 * Pi) * ri, sin(w2 / 180 * Pi) * ri, 0);
glVertex3f(cos(w2 / 180 * Pi) * ra, sin(w2 / 180 * Pi) * ra, 0);
glEnd();
Lager(2); // Mittelpunkt Schwingenkreis
end;
Ansonsten funktioniert das bestens. Außerdem kommt mir "GL_QUAD_STRIP" sehr entgegen.
So hab ich auch gleich die gewünschte Kontur.
Ich hab noch viel zu lernen.
Danke
Hannes
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Ganz einfach, ich habe etwas übersehen.Muss nur noch rausfinden warum das letzte (erste?) Segment nicht gezeichnet wird.

Code: Alles auswählen
w2 += Res;
glVertex3f(cos(w2 / 180 * Pi) * ri, sin(w2 / 180 * Pi) * ri, 0);
glVertex3f(cos(w2 / 180 * Pi) * ra, sin(w2 / 180 * Pi) * ra, 0);
Code: Alles auswählen
glVertex3f(cos(w2 / 180 * Pi) * ri, sin(w2 / 180 * Pi) * ri, 0);
glVertex3f(cos(w2 / 180 * Pi) * ra, sin(w2 / 180 * Pi) * ra, 0);
w2 += Res;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Ich habe die Schwinge noch optimiert, jetzt gibt es eine Start und End-Winkel.
aufl ist, wie viele Sektoren es hat, bezogen auf einen Vollkreis.
Ich würde mich noch angewöhnen, die Variablen der Procedure zu übergeben, anstelle in der Procedure globale Variablen zu verwenden.
Vielleicht brauchst du zwei oder mehrere Schwingen.
aufl ist, wie viele Sektoren es hat, bezogen auf einen Vollkreis.
Ich würde mich noch angewöhnen, die Variablen der Procedure zu übergeben, anstelle in der Procedure globale Variablen zu verwenden.
Vielleicht brauchst du zwei oder mehrere Schwingen.
Code: Alles auswählen
procedure TForm1.Arc(ri, ra, wa, we: single; aufl: integer);
procedure CalcAndDraw(w: single);
var
c, s: single;
begin
c := cos(w / 180 * Pi);
s := sin(w / 180 * Pi);
glVertex3f(c * ri, s * ri, 0);
glVertex3f(c * ra, s * ra, 0);
end;
begin
glBegin(GL_TRIANGLE_STRIP);
repeat
CalcAndDraw(wa);
wa += 360 / aufl;
until wa > we;
CalcAndDraw(we);
glEnd();
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Hallo Mathias,
bei den Parametern des Schwingenbogens bin ich auf externe Variablen angewiesen da diese in einer anderen Unit
berechnet werden. Anfang und Ende mache ich dann selbst. (siehe mein Code-Beispiel)
Danke für die Hilfe mit der Korrektur (Zuerst zeichnen, dann addieren..). Das hat mir einige Zeit gespart.
Jetzt muss ich erstmal einige alte Fehler beheben die durch die Umstellung entstanden sind. Durch den Spaß am
OpenGL hatte ich das etwas verdrängt. Bevor sich nun das Chaos nun zu groß wird muss erst einmal Ordnung geschaffen
werden. Viele alte Variablen werden ja auch gar nicht mehr benötigt.
Dein letztes Beispiel "Arc" ist sehr interessant.
Grüße
Hannes
bei den Parametern des Schwingenbogens bin ich auf externe Variablen angewiesen da diese in einer anderen Unit
berechnet werden. Anfang und Ende mache ich dann selbst. (siehe mein Code-Beispiel)
Danke für die Hilfe mit der Korrektur (Zuerst zeichnen, dann addieren..). Das hat mir einige Zeit gespart.
Jetzt muss ich erstmal einige alte Fehler beheben die durch die Umstellung entstanden sind. Durch den Spaß am
OpenGL hatte ich das etwas verdrängt. Bevor sich nun das Chaos nun zu groß wird muss erst einmal Ordnung geschaffen
werden. Viele alte Variablen werden ja auch gar nicht mehr benötigt.
Dein letztes Beispiel "Arc" ist sehr interessant.
Grüße
Hannes