Animation erstellen
Re: Animation erstellen
Hallo Mathias,
nun habe ich Dein Beispiel zur Erzeugung einer Texture zur Laufzeit ausprobiert. Es klappt auch ganz gut nur sieht das Ergebnis bescheiden aus: Warum sind die Strichstärken so unterschiedlich?
Wie kommt man zu einer "sauberen" Darstellung? In meinem Beispiel ist die Texture skaliert. (25,25,1)
Kann man eine Texture auch um einen Winkel drehen?
Grüße
Hannes
nun habe ich Dein Beispiel zur Erzeugung einer Texture zur Laufzeit ausprobiert. Es klappt auch ganz gut nur sieht das Ergebnis bescheiden aus: Warum sind die Strichstärken so unterschiedlich?
Wie kommt man zu einer "sauberen" Darstellung? In meinem Beispiel ist die Texture skaliert. (25,25,1)
Kann man eine Texture auch um einen Winkel drehen?
Grüße
Hannes
-
- 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
Kann ich den Code sehen, von dem Rechteck ?
Die Skalierung 25x25 ist fuer einQuadrat ideal, aber nich fuer ein laengliches Rechteck.
Die Skalierung 25x25 ist fuer einQuadrat ideal, aber nich fuer ein laengliches Rechteck.
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
Hoffentlich hilft der Codeschnipsel weiter. Ich verwende einige Variablen um den Zylinder an die Eingaben anzupassen.
Auch wenn ich die Texture so skaliere, dass es dem Seitenverhältnis meines Rechtecks entpricht wird es nicht besser.
Code: Alles auswählen
// --- Textur Aktivieren
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID0);
glBegin(GL_QUADS);
glColor3f(1, 1, 1);
glTexCoord2f(0.0, 0.0);
glVertex3f(ZTA - Hub * 0.75, Hub * 0.5, -0.01);
glTexCoord2f(1.0, 0.0);
glVertex3f(ZTA - Hub * 0.75, -Hub * 0.5, -0.01);
glTexCoord2f(1.0, 1.0);
glVertex3f(ZTA + Hub * 0.75, -Hub * 0.5, -0.01);
glTexCoord2f(0.0, 1.0);
glVertex3f(ZTA + Hub * 0.75, Hub * 0.5, -0.01);
glEnd();
glDisable(GL_TEXTURE_2D);
Re: Animation erstellen
Wenn ich diese zwei Zeilen
wieder aktiviere sieht das so aus:
Code: Alles auswählen
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-
- 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
Irgendwie sieht mir das nach einem Ladefehler der Textur aus.
Hast du diese richtig geschrieben, beachte vor allem GL_RGB8 und GL_BGRA.
Wen mit der Skalierung etwas nicht stimmen würde, müssten die Linien doch irgendwie diagonal sein.
Aber das ist eine deinem Fall nicht nötig, der Fehler ist wo anders.
PS:Ich sehe wo dein Problem liegen könnte, wen man in Google glTexCoord2f
Hast du diese richtig geschrieben, beachte vor allem GL_RGB8 und GL_BGRA.
Code: Alles auswählen
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, bit.Width, bit.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, bit.RawImage.Data);
Das geht auch, man muss einfach mit glMatrixMode auf Textur-Matrix umstellen.Kann man eine Texture auch um einen Winkel drehen?
Aber das ist eine deinem Fall nicht nötig, der Fehler ist wo anders.
PS:Ich sehe wo dein Problem liegen könnte, wen man in Google glTexCoord2f
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
ich hbe das nochmals kontrolliert:
Genau so steht es in meinem Code.
Leider versthe ich Deinen letzten Satz nicht:
Code: Alles auswählen
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, bit.Width, bit.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, bit.RawImage.Data);
Leider versthe ich Deinen letzten Satz nicht:
PS:Ich sehe wo dein Problem liegen könnte, wen man in Google glTexCoord2f
Änderungen an der Skalierung zeigen immer senkrechte, verwaschene, Linien.Wen mit der Skalierung etwas nicht stimmen würde, müssten die Linien doch irgendwie diagonal sein.
-
- 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
Fehler gefunden, Windows und Linux machen etwas anders.
So müsste es unter Windows gehen.
So müsste es unter Windows gehen.
Code: Alles auswählen
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, bit.Width, bit.Height, 0, [color=#FF0000][b]GL_BGR[/b][/color], GL_UNSIGNED_BYTE, bit.RawImage.Data);
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
Mit der, von Dir genannten, Korrektur habe ich folgendes Ergebnis:
Mit glScalef(20, 30, 1); sieht das so aus:
-
- 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
Jetzt kannst noch etwas anderes und eleganteres probieren .
Somit hat du immer die gleiche Schraffur, egal wie gross das Rechteck ist.
Dies funktioniert auch, wen das Objekt unförmig ist, zB. ein Kreis, oder das drehende "C" wie in meinem obigen Textur-Demo.
Dabei kannst du die Textur-Skalierung weglassen und dafür den Const Faktor ändern.
Ich kann mir vorstellen, das du in deiner Animation die Zylindergrösse zur Laufzeit ändern willst, und somit bleibt die Schraffur immer gleich,
Code: Alles auswählen
procedure gl(x, y, z: single);
const
Faktor=0.3;
begin
glTexCoord2f(x * Faktor, y * Faktor);
glVertex3f(x, y, z);
end;
glBegin(GL_QUADS);
gl(ZTA - Hub * 0.75, Hub * 0.5, -0.01);
gl(ZTA - Hub * 0.75, -Hub * 0.5, -0.01);
gl(ZTA + Hub * 0.75, -Hub * 0.5, -0.01);
gl(ZTA + Hub * 0.75, Hub * 0.5, -0.01);
glEnd();
Dies funktioniert auch, wen das Objekt unförmig ist, zB. ein Kreis, oder das drehende "C" wie in meinem obigen Textur-Demo.
Dabei kannst du die Textur-Skalierung weglassen und dafür den Const Faktor ändern.
Ich kann mir vorstellen, das du in deiner Animation die Zylindergrösse zur Laufzeit ändern willst, und somit bleibt die Schraffur immer gleich,
Zuletzt geändert von Mathias am So 3. Apr 2016, 23:17, insgesamt 1-mal geändert.
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
Das sieht sehr elegant aus aber leider funktioniert es bei mir nicht. Bei der Constanten hat sich ein Tipfehler beim Namen eingeschlichen.
Außerdem braucht die procedure "gl" x,y und z als Variablen. OK das hab ich korrigiert.
Mit der Procedure wird nun mein Bildschirm um Einiges dunkler und mein Zylinder ist unsichtbar.
Es tut mir leid wenn ich Dir soviel Mühe mache!
Außerdem braucht die procedure "gl" x,y und z als Variablen. OK das hab ich korrigiert.
Mit der Procedure wird nun mein Bildschirm um Einiges dunkler und mein Zylinder ist unsichtbar.
Es tut mir leid wenn ich Dir soviel Mühe mache!
-
- 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
Die Tippfehler habe ich korrigiert.
Das Z ist natürlich bei dir wichtig, bei meiner Demo hatte es nur eine Ebene, da spielt es keine Rolle.
Könnte am glColor3f(1, 1, 1); unterhalb von GL_Begin liegen.
Das Z ist natürlich bei dir wichtig, bei meiner Demo hatte es nur eine Ebene, da spielt es keine Rolle.
Das dein BS dunkler wird ist komisch.Mit der Procedure wird nun mein Bildschirm um Einiges dunkler und mein Zylinder ist unsichtbar.
Könnte am glColor3f(1, 1, 1); unterhalb von GL_Begin liegen.
Code: Alles auswählen
glBegin(GL_QUADS);
glColor3f(1, 1, 1);
gl(ZTA - Hub * 0.75, Hub * 0.5, -0.01);
gl(ZTA - Hub * 0.75, -Hub * 0.5, -0.01);
gl(ZTA + Hub * 0.75, -Hub * 0.5, -0.01);
gl(ZTA + Hub * 0.75, Hub * 0.5, -0.01);
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
Das glColor ist bei mir nicht vorhanden:
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);
gl(ZTA - Hub * 0.75, Hub * 0.5, -0.01);
gl(ZTA - Hub * 0.75, -Hub * 0.5, -0.01);
gl(ZTA + Hub * 0.75, -Hub * 0.5, -0.01);
gl(ZTA + Hub * 0.75, Hub * 0.5, -0.01);
glEnd();
-
- 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
Es sollte bei dir rein. Vielleicht hattest du irgendwo vorher eine dünklere Farbe verwendet.
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
Hab es probiert: Keine Änderung.
Für heute gebe ich auf ....
Für heute gebe ich auf ....
Re: Animation erstellen
Konnte es doch nicht bleiben lassen. Hab einen Neustart gemacht und jetzt bekomme ich auch ein Ergebnis:
Langsam zweifel ich daran meine Schraffur mittels Textur in OpenGL,brauchbar, erstellen zu können..