Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also, wenn die Texturn 24x24 sind, dann würden diese nur auf neueren Karten auch wirklich dargestellt werden. Sonst würdest du eine Weiße Fläche erhalten. Und zum Thema GLU. Du benutzt nicht Glu sondern die Textures.pas. Hmmm. Wie sage ich es jetzt? Per default benutzt die Textures.pas aber die Glu. Somit würdest du wieder die Glu benutzen. Wenn auch indirekt. Ich würde dir empfehlen die Texturen auf 32x32 zu vergrößern. Und zwar so, dass du 4 Pixel mehr Rand um die Textur hast.
Zum Thema Texturen. Ja du magst recht haben. So viel Performance wird es mit Sicherheit nicht schlucken. Ich denke aber, dass sich so etwas auf Dauert summiert. Hier ein bisschen dort ein bisschen. Wenn du den Alphakanal gleich mit in der Textur hast macht es die Sache so etwas von Einfach. Der Alphakanl ist ja genau für so etwas überhaupt erfunden wurden. Und so ein bisschen kenne ich mit Texturen auch aus.
PS: Schon mal über einen alternativen Texturenloader nachgedacht, der deine Texturen mit Sicherheit nicht von alleine verändert?
PPS: Flash: Ich kann mir nicht vorstellen, dass ein Treiber die Texturen skaliert und sie so matschig macht. Wenn dann wäre der nicht lange auf dem Markt. Zu recht wenn du mich fragst.
hmm.. daran hatte ich nicht gedacht... 2^x ... ja dann macht das sinn.. und, dass die Textures.pas sich auf die Glu stürzt wusste ich nicht, hab das halt aus dem 2D tut nach gemacht... gott verdammt.. Ich probiers mal aus, den cursor auf 32x32 zu zeichnen.
_________________ ist Ihnen schon mal aufgefallen, dass wenn Sie beim Wort Schlagersängerinnen die ersten 6 Buchstaben streichen, das 'e' durch ein 'f' ersetzen, die nächsten 7 Buchstaben rückwärts lesen und dann ebenfalls elemenieren und zusätzlich die beiden nebeneinanderstehenden n's durch ck ersetzen, das Wort 'ficken' ergibt?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Macht ja nichts. Dafür sind wir ja da.
Aber noch etwas. Die Glu zu benutzen macht in meinen Augen heutzutage keinen Sinn mehr. Es gibt dazu eine Alternative auf Hardwareseite die logischerwiese um ein Vielfaches schneller ist als die glu. Und was schon seit mindestestens 4-6 Jahren unterstützt wird. Davon mal abgesehen machen MipMaps bei einem reinen 2D Cursor sowieso keinen Sinn. Das Einzige was sie bewirken ist sinnlos Speicher zu verbrauchen.
aha... okay ihr hattet recht, dass meine Texturen vermatscht waren, lag daran, dass meine Formel nicht 2^x sondern (2*n)^2 lautete.. nu hab ich ne textur von 32x32 genommen und es sieht wunderbar aus. Danke schön für die hilfe.
Der Fehler ist schon fast peinlich, weil mir das selbe früher bei Half-life models passiert ist...
_________________ ist Ihnen schon mal aufgefallen, dass wenn Sie beim Wort Schlagersängerinnen die ersten 6 Buchstaben streichen, das 'e' durch ein 'f' ersetzen, die nächsten 7 Buchstaben rückwärts lesen und dann ebenfalls elemenieren und zusätzlich die beiden nebeneinanderstehenden n's durch ck ersetzen, das Wort 'ficken' ergibt?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das muss dir nicht Peinlich sein. So etwas passiert jedem mal. Und vor allem passiert so etwas immer dann, wenn irgendwelche Teile selbst versuchen inteligent zu sein und irgendetwas tun ohne, dass davon jemand etwas mitbekommt.
Ich benutze den Textureloader glBitmap.pas und habe auch das Problem, das jeweils am Rand einer Textur das Ganze verschmiert. Weiß einer, ob man das da auch ausstellen kann?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du kannst mit der glBitmap genau so viel einstellen wie mir OpenGL selber auch. Stellt sich nur die Frage was du genau haben möchtest. Am Besten wäre es, wenn du von der entprechenden Stelle mal bitte ein Bild postest. Und sagst was du nicht haben willst. Unter dem Verschmieren kann ich mir nämlich gerade nichts vorstellen.
Das ist noch aus dem Textur-Tutorial. Links, unten, oben sieht man vermutlich nicht so viel, weil die JPEG-Komprimierung das ganze noch verschlimmert, aber der Teil rechts entsteht durch Anwenden von glTranslatef auf die Texturmatrix. Der gewünschte Effekt ist eigentlich, dass bei Ende der Textur nicht verschmiert wird. Ich habe da sogar einen ganzen Pixel Breite am rechten Ende der Textur mit nur weiß. Trotzdem wird das so verschmiert (man könnte es auch als "abrunden" bezueichnen, aber ich will es auf jeden Fall nicht).
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wenn du sie aber wiederholen möchtest setze mal bei der Textur den Warpmodus.
Code:
Textur.SetWrap(GL_REPEAT, GL_REPEAT);
Wenn sie nicht wiederholt werden soll, dann sollte der Wrap auf GL_CLAMP_TO_EDGE eingestellt sein. Was von Hause aus der Fall ist. Dadurch, dass du da selber schon 1 Pixel Rand hast sollte es eigentlich gehen. Nur da denke ich werden dir die MipMaps eine Strich durch die Rechnung machen. Diese berechnen nämlich kleinere Bilder und dadurch würde sich dein Rand wieder mit anderen Pixeln vermischen. Wodurch der Rand wieder zu nicht gemacht werden würde. Du könntest mal ausprobieren ob das deaktivieren der MipMaps darauf einen Effekt hat.
Code:
Texture.MipMap:= mmNone;
Falls das nicht funktioniert oder du MipMaps unbedingt benötigst wäre der TexturBorder noch eine Möglichkeit die funktionieren könnte. Dabei wir OpenGL direkt mitgeteil, dass ein Border existiert allerdings weiß ich nicht genau wie sich das auswirkt. Habe es bisher noch nie gebraucht und kennen niemanden der es je gebraucht hätte. Kann ja aber gleich selber mal was ausprobieren. Bei glTexImage gibt es einen Parameter Border. Das stellt die glBitmap allerdings nicht zur Verfügung. Sollte aber im Bedarfsfall recht schnell nachgerüstet sein.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Da die Lösung ohne MipMaps zwar funktioniert aber nicht unbedingt die Schönste ist habe ich mal ein bisschen rumgespielt. Und dabei ist folgendes raus gekommen. Wie oben erwähnt gibt es einen Parameter namens Border. Aber dieser scheint irgendwie nicht so richtig zu funktionieren. Keine Ahnung wieso. Spielt auch keine Rolle.
Ab OpenGL 1.3 oder der Extension GL_ARB_texture_border_clamp gibt es einen Wrapmode dafür.
Danke, das hat funktioniert. (btw: Der weiße Rand diente nur dazu, das Problem einzugrenzen, am liebsten würd ich das ohne weißen Rand haben, aber so geht's ja auf jeden Fall)
Leider habe ich dann aber festgestellt, dass es mein Problem nicht trifft. Habe der Einfachheit halber dieses Beispiel genommen. Das Problem das ich habe scheint aber doch ein anderes zu sein:
Nach Winners Vorschlag (den Thread kennst du ja) habe ich ein Tileset mit den verschiedenen Texturen aufgebaut. Nun lasse ich diese Texturen jeweils anzeigen, wie in Phoebus Texturen-Tutorial unter "am Fließband".
Leider werden an den Rändern der Texturen eine Art "Übergang" zur nächsten erstellt (die im Tileset folgen würde). Was ich aber nicht möchte.
Screenshot hier. Ich hoffe, man kann es noch erkennen, hatte versehentlich schon als JPG gespeichert, wo ichs eigentlich als BMP haben wollte. In der Mitte, wie es aussieht (hab die "map" mal etwas auseinander genommen, nicht wundern), rechts der dazugehörige Ausschnitt aus dem Tileset.
Du musst dann zwischen den Tiles 2 Pixel abstand lassen, und an den Textturrändern einen. Dadurch entsteht um jedes Tile ein 1 Pixel breiter Ramen. Jeder dieser Pixel musst du in der Farbe des nächstgelegenen Pixels des Tiles einfärben. Bei den Texturkoordinaten darfst su jedoch nur das eigentliche Tile auswählen, dann wird in die farbe des benachbarten Pixels übergeblendet, der die selbe farbe wie der eigentliche Pixel hat. Somit ist die Überblendung nicht sichtbar.
Also wenn ich das jetzt richtig verstanden habe, ist es nicht möglich, Bilder ohne sanften Übergang zu skalieren?
Beispiel:
* Ich habe ein Schachbrettmuster (2 weiße, 2 schwarze Felder). Dieses Vergrößere ich nun, je nachdem, wie der Benutzer reinzoomt.
* Ich möchte die weißen Flächen transparent machen.
Ergebnis:
* Die schwarzen Flächen haben einen Farbverlauf ins Weiße und gehen dann in die Transparenzfarbe über (da Weiß ja Transparent ist).
Unter Windows kein Problem. Auch nach dem Skalieren ist Schwarz = Schwarz, an jeder Stelle des Bildes.
In OpenGL ist nun aber Schwarz = Farbverlauf.
_Zwar_ sieht das ansich ganz nett aus, _aber_ leider habe ich die Vorgaben dass die Bilder auf keinen Fall in ihren Farben verändert werden durfen. Wie erledige ich das nun also?
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.