Hi,
ich will meine Texturen strecken, bekomme aber immer nur verpixelte Ergebnisse. Wie kann ich das umgehen?
Ich hab z.B. eine Textur mit den Ausmaßen 128*128. Strecke ich diese auf eine Fläche von z.B. 640*480 dann ist das Ergebnis eine stark verpixelte Textur. Ich hätte aber gerne das die Inhalte gleich bleiben und z.B. eine Linie die auf der Texture 2 Pixel breit ist auf dem Bildschirm nachher auch 2 Pixel breit ist und nur die Elemente wie die ebene Fläche in der Mitte der Texture sich wiederholen.
hm. Aus deiner Beschreibung kann man so ohne weiteres keine eindeutigen Schlüsse ziehen.
Gehe aber davon aus, dass du bei der Generierung deiner Texturen nicht angegeben hast, dass sie linear interpoliert werden sollen, falls ein Texel nicht einem Pixel entspricht.
Ansonsten, wenn du Texturen skalieren willst, könntest du gluScaleImage verwenden. Ist zwar nicht das schnellste, lässt sich aber leicht implementieren.
Zu deinem Beispiel muss ich sagen: Was hast du erwartet? Wenn du eine 128er Textur auf 640 hochskalierst, wird das Ergebnis immer verpixelt sein. Da helfen nur Vektorgrafiken. Und die kann OpenGL nicht verarbeiten. Sprich: Du musst die Vektorgrafik vorher laden und in der gewünschten Größe rastern. Das kannst du dann als Textur verwenden.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Naja, ich bin halt davon ausgegangen das es mit relativ wenig Aufwand zu bewerkstelligen ist.
Zb. in UT2004 sind einige Menugrafiken nur 128*128 groß. Später im Spiel sind diese aber nicht verpixelt wenn man sie bei 1024*768 gestreckt darstellt.
Also bei UT2004 besteht das Menü ja nicht aus einer einzigen Textur, sondern aus verschiedenen Texturen. Von diesen Texturen werden manche gestreckt (z.B. der Hintergrund), manche werden aber in ihrer ursprünglichen Größe belassen und dank glOrtho pixelgenau und absolut scharf gezeichnet.
Du suchst also eigentlich eine GUI und keine Möglichkeit, Texturen zu skalieren
Man kann übrigens diese Menütexturen auch ganz gut in einer einzigen unterbringen. Nur muss man dann die Texturkoordinaten entsprechend setzen.
Was du als erstes suchtest wäre eine perfekte Skalierung. Sowas gibt es nicht und wird es in näherer Zukunft auch nicht geben. Denn da müsste der Computer wissen, welcher Teil der Textur für was zuständig ist. Du bräuchtest also eine Datenbank mit gespeicherten Mustern und eine Bilderkennung. Außerdem noch ein Modul, was die daraus gewonnenen Daten in OpenGL richtig umsetzt. Ich kann dir versichern, das ist kein geringer Aufwand ^^
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Doch, ich suche eine Möglichkeit meine Texturen zu strecken, da ich derzeit an einer GUI Lib für mein Projekt arbeite.
Sonst kann ich ja zb. keine Grafiken nutzen die einen Bevel Effekt habe. Das würde ja derbst daneben aussehen wenn aus einem 2px Bevel plötzlich 20 oder mehr werden würden.
@UT2004: ja, das sind verschiedene Texturen, aber wie schon gesagt sind einige halt gestreckt. Und diese ist eben nur 128*128 groß im Original Format. Ansonsten könnte ich genauso gut eine große Textur erstellen und die runterscalieren, aber in dem Falle wäre sie nur nutzbar sofern sie wieder groß scaliert genutzt wird.
Also wieso nimmst du nicht einfach von einer Textur verschiedene Teil? Den Rand der Textur zeichnest du unskaliert, den Mittelteil dagegen skalierst du so, wie du ihn brauchst. Das ist eigentlich die gängige Methode, um sowas zu machen.
Stichwort: Texturkoordinaten
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Das Problem ist dabei bloß das ich im Vorfelde nicht weiß wie die Texture aussieht. Es soll nach möglichkeit generisch sein. Spätestens dann funktioniert es nicht mehr. Ich hatte schon daran gedacht das ich Pixel für Pixel durchgehe und dann den aktuellen mit dem letzen Vergleiche und entscheiden lasse wie dann weiter gezeichnet wird, aber scheint mir nicht der richtige Ansatz zu sein. Es muss doch eine generische Möglichkeit geben, oder nicht?
Du musst vorher aber wissen, wo in der Textur die einzelnen Elemente sind. Du kannst doch nicht erwarten, dass der Algorithmus selbstständig erkennt, wo in der Textur z.B. ein Button ist und wo dessen Begrenzungen sind bzw. wie breit sein Rand ist etc... Sowas definiert man selbst. Entweder in ner seperaten Datei oder hardgecodet im Programm. Schau dir mal Lossy eX GUI an. (Gut, die ist noch nicht fertig, aber es gibt schon ne Demo)
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Die der GUI Elemente schon. Aber wie schon gesagt. Nehme Texture x und lass sie als Background oder ein andere großes ELement anzeigen und sie wird im Stretched Mode nicht verpixeln.
//edit: @bild machen: ich versuch eins aufzutreiben. hier an diesem PC hab ich kein UT -.-
Was meinst du mit verpixelt? Jedes digitale Bild, was du vergrößerst, wird verpixeln. Ob du willst oder nicht. Das lässt sich nicht verhindern. Nur die Ausmaße, wie stark man das sieht, lassen sich mit aufwändigen Algorithmen teils stark beschränken und dadurch lässt sich die Qualität steigern. Perfekt ist das aber nicht Aber fast ^^
Nebenbei: Ich hab ja hier auch den UnrealED 3.0. Ist ja nicht so, dass ich mich damit nicht auskennen würde Ich schau mal, was du mit dem stretched meinst ^^
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
ah gut. Dann öffne diesen mal. Öffne den Texture Editor und wähle das Package mit den GUI Texturen aus. Unter NewDesign oder so ähnlich gibt es eine Texture namen Design99.
Die hat die Maße 128*128 und man sieht diese oft im GUI menu von UT.
Das Stretched Attribute ist nur innerhalb von UnrealScript verfügbar.
ah gut. Dann öffne diesen mal. Öffne den Texture Editor und wähle das Package mit den GUI Texturen aus. Unter NewDesign oder so ähnlich gibt es eine Texture namen Design99. Die hat die Maße 128*128 und man sieht diese oft im GUI menu von UT.
Das Stretched Attribute ist nur innerhalb von UnrealScript verfügbar.
Boah... Weißt du eigentlich, was du da von mir verlangst? Mein Rechner ist saulahm ^^ Das dauert ein paar Minuten, bis der UnrealED hochgefahren ist Hab ihn gerade offen gehabt und nach der erfolglosen Suche nach dieser stretched-Property wieder zugemacht ^^ Mach ich's halt nochmal
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.