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 Mathias,
nun habe ich Dein Beispiel zur Erzeugung einer Texture zur Laufzeit ausprobiert. Es klappt auch ganz gut nur sieht das Ergebnis bescheiden aus:
Schraffur.JPG
Schraffur.JPG (12.61 KiB) 2170 mal betrachtet
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

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 »

Kann ich den Code sehen, von dem 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

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

Re: Animation erstellen

Beitrag von Johannes »

Hoffentlich hilft der Codeschnipsel weiter. Ich verwende einige Variablen um den Zylinder an die Eingaben anzupassen.

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);             
Auch wenn ich die Texture so skaliere, dass es dem Seitenverhältnis meines Rechtecks entpricht wird es nicht besser.

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

Re: Animation erstellen

Beitrag von Johannes »

Wenn ich diese zwei Zeilen

Code: Alles auswählen

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);    
wieder aktiviere sieht das so aus:
Schraffur1.JPG
Schraffur1.JPG (14.46 KiB) 2162 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 »

Irgendwie sieht mir das nach einem Ladefehler der Textur aus.

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);
Wen mit der Skalierung etwas nicht stimmen würde, müssten die Linien doch irgendwie diagonal sein.
Kann man eine Texture auch um einen Winkel drehen?
Das geht auch, man muss einfach mit glMatrixMode auf Textur-Matrix umstellen.
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

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

Re: Animation erstellen

Beitrag von Johannes »

ich hbe das nochmals kontrolliert:

Code: Alles auswählen

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, bit.Width, bit.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, bit.RawImage.Data);
Genau so steht es in meinem Code.
Leider versthe ich Deinen letzten Satz nicht:
PS:Ich sehe wo dein Problem liegen könnte, wen man in Google glTexCoord2f
Wen mit der Skalierung etwas nicht stimmen würde, müssten die Linien doch irgendwie diagonal sein.
Änderungen an der Skalierung zeigen immer senkrechte, verwaschene, Linien.

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 »

Fehler gefunden, Windows und Linux machen etwas anders.

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

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

Re: Animation erstellen

Beitrag von Johannes »

Mit der, von Dir genannten, Korrektur habe ich folgendes Ergebnis:
Schraffur2.JPG
Schraffur2.JPG (12.69 KiB) 2152 mal betrachtet
Mit glScalef(20, 30, 1); sieht das so aus:
Schraffur3.JPG
Schraffur3.JPG (12.56 KiB) 2152 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 »

Jetzt kannst noch etwas anderes und eleganteres probieren .

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();
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,
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

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

Re: Animation erstellen

Beitrag von Johannes »

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!

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 »

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.
Mit der Procedure wird nun mein Bildschirm um Einiges dunkler und mein Zylinder ist unsichtbar.
Das dein BS dunkler wird ist komisch.
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

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

Re: Animation erstellen

Beitrag von Johannes »

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();                                  

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 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

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

Re: Animation erstellen

Beitrag von Johannes »

Hab es probiert: Keine Änderung.

Für heute gebe ich auf ....

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

Re: Animation erstellen

Beitrag von Johannes »

Konnte es doch nicht bleiben lassen. Hab einen Neustart gemacht und jetzt bekomme ich auch ein Ergebnis:
Schraffur4.JPG
Schraffur4.JPG (14.73 KiB) 2150 mal betrachtet
Langsam zweifel ich daran meine Schraffur mittels Textur in OpenGL,brauchbar, erstellen zu können..

Antworten