AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit Triangle Strip
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Triangle Strip

Ein Thema von igel457 · begonnen am 28. Okt 2007 · letzter Beitrag vom 29. Okt 2007
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Problem mit Triangle Strip

  Alt 28. Okt 2007, 18:42
Hallo,

in meiner 2D-Engine möchte ich die Möglichkeit geben ein beliebiges Viereck zu zeichnen und eine Textur dort hinein zu verfrachten. Nun habe ich damit versuch einen Text gekippt (so wie bei Krieg der Sterne) auszugeben - doch leider ist das, was dabei herauskommt ein wenig "seltsam". Der Text im zweiten Polygon ist anders gestaucht als im ersten.
Das bedeutet: Ich verstehe schon, warum es so aussieht, allerdings wüsste ich gerne ob ich dieses Problem (außer als Rotation um die X-Achse) lösen kann.
Im Anhang ist ein Screenshot, der mein Problem vielleicht ein wenig verdeutlicht.
Miniaturansicht angehängter Grafiken
problem_119.png  
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

Re: Problem mit Triangle Strip

  Alt 28. Okt 2007, 19:06
Hallo igel457,

vielleicht tritt der Effekt nicht mehr, wenn du das Viereck in möglichst viele Dreiecke aufteilst.

Mfg,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Problem mit Triangle Strip

  Alt 28. Okt 2007, 19:12
Danke für die Antwort,
da könntest du recht haben - allerdings möchte ich diesen Weg eigentlich erstmal vermeiden.

Hier ist mal noch ein wenig Code angehängt:
Delphi-Quellcode:
[...]
    SetLength(vertices, 4);

    vertices[0].Position := AdVector3(FQuad.p[0].x,FQuad.p[0].y, 0);
    vertices[0].Color := FQuad.c[0];
    vertices[1].Position := AdVector3(FQuad.p[1].x,FQuad.p[1].y, 0);
    vertices[1].Color := FQuad.c[1];
    vertices[2].Position := AdVector3(FQuad.p[3].x,FQuad.p[3].y, 0);
    vertices[2].Color := FQuad.c[3];
    vertices[3].Position := AdVector3(FQuad.p[2].x,FQuad.p[2].y, 0);
    vertices[3].Color := FQuad.c[2];

    if FBrush.Texture <> nil then
    begin
      [...]
      if Brush.TextureMode = tmStretchAlign then
      begin
        vertices[0].Texture := AdVector2(0,0);
        vertices[1].Texture := AdVector2(1,0);
        vertices[2].Texture := AdVector2(0,1);
        vertices[3].Texture := AdVector2(1,1);
      end;
    end;

    FMesh.PrimitiveCount := 2;
    FMesh.Vertices := vertices;
    FMesh.IndexBuffer := nil;
    FMesh.Update;
    FMesh.SetMatrix(AdMatrix_Identity);
    FMesh.Texture := FBrush.Texture;
[...]
    FMesh.Draw(bmAlpha, dmTriangleStrip)
Ist also eigentlich recht simpel gehalten.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#4

Re: Problem mit Triangle Strip

  Alt 28. Okt 2007, 23:14
Vierecke werden daran nichts ändern, denn die werden intern auch nur in Dreiecke zerlegt. Das Problem liegt daran, dass diese Darstellung ohne Perspektive statt findet. Und ich weiß nicht genau wie ich das erklären soll. Aber OpenGL weiß nicht wie es die Texturkoordinaten interpolieren soll. Habe mal dein Bild angehangen und eingezeichnet wie in etwas die horizontale Mitte verlaufen müsste.

Abhelfen könntest du das indem du mit Shadern die Texturkoordinaten so berechnest dass sie passen. Oder aber in dem du die Fläche unterteilst. Und zwar würdest du so die Texturkoordinaten mehr oder weniger in eine bestimmte Bahn zwingen. Das Problem würde zwar weiterhin bestehen aber es würde nicht mehr ganz so stark auffallen.

Das zweite Bild ist ein Triangle Fan. Also lediglich 2 Flächen mehr. Allerdings liegt der Punkt genau in der Mitte was den positiven Effekt begünstigt.
Miniaturansicht angehängter Grafiken
triangle_fan_141.png   problem_584.png  
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Problem mit Triangle Strip

  Alt 29. Okt 2007, 15:58
Danke für deine Antwort - ich werde das mal mit dem Fan ausprobieren und dann nochmal bescheid geben.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Problem mit Triangle Strip

  Alt 29. Okt 2007, 16:50
Also die Lösung mit dem Triangle Fan funktioniert soweit, die Verzerrung fällt nicht mehr ganz so arg auf. Ich habe noch einen Screenshot angehängt.
Miniaturansicht angehängter Grafiken
problem2_424.png  
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#7

Re: Problem mit Triangle Strip

  Alt 29. Okt 2007, 21:02
Noch als Anmerkung. Du kannst anstelle des Fans natürlich auch jedes andere Primitiv benutzen. Denn die Unterteilung der Fläche ist der Grund warum es nicht mehr stark auffällt. Und da intern sowieso alles Dreiecke sind spielt es also überhaupt keine Rolle in welcher Form die Dreiecke gezeichnet werden. Sondern eben nur, dass sie gezeichnet werden.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz