Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 20:02

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 46 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 12, 2006 07:55 
Offline
DGL Member
Benutzeravatar

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? :D

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 12, 2006 12:11 
Offline
DGL Member

Registriert: Fr Nov 18, 2005 00:44
Beiträge: 57
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 12, 2006 12:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Macht ja nichts. Dafür sind wir ja da. :-D

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 12, 2006 12:38 
Offline
DGL Member

Registriert: Fr Nov 18, 2005 00:44
Beiträge: 57
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 12, 2006 12:55 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 08, 2006 18:46 
Offline
DGL Member

Registriert: Do Jun 29, 2006 14:28
Beiträge: 19
Ich habe so ein ähnliches Problem.

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 08, 2006 18:54 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 08, 2006 19:34 
Offline
DGL Member

Registriert: Do Jun 29, 2006 14:28
Beiträge: 19
Okay, habs hier hochgeladen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 09, 2006 07:43 
Offline
DGL Member
Benutzeravatar

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:
  1. 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:
  1. 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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 09, 2006 09:17 
Offline
DGL Member
Benutzeravatar

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.

Code:
  1. var
  2.   TempColor: array [0..3] of single;
  3. begin
  4.   ...
  5.   // Wrap einstellen und Textur erstellen
  6.   Texture.SetWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
  7.   Texture.GenTexture;
  8.  
  9.   // Bordercolor auf Weiß stellen
  10.   TempColor[0] := 1;
  11.   TempColor[1] := 1;
  12.   TempColor[2] := 1;
  13.   TempColor[3] := 1;
  14.   glTexParameterfv(Texture.Target, GL_TEXTURE_BORDER_COLOR, @TempColor[0]);


Ich denke mal, da das ganz praktisch und auch sehr sehr klein ist werde ich das in den nächsten Tagen noch als Methode nachrüsten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 09, 2006 13:22 
Offline
DGL Member

Registriert: Do Jun 29, 2006 14:28
Beiträge: 19
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 10, 2006 10:31 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 11, 2006 14:08 
Offline
DGL Member

Registriert: Do Jun 29, 2006 14:28
Beiträge: 19
Ah, vielen Dank!

Edit: Aber da führt echt kein Weg drumherum, oder? Weil, dann käme ich mit meinen bisherigen 1024*1024 nicht mehr aus...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 17, 2007 11:52 
Offline
DGL Member

Registriert: Mo Jul 17, 2006 13:16
Beiträge: 69
Also wenn ich das jetzt richtig verstanden habe, ist es nicht möglich, Bilder ohne sanften Übergang zu skalieren? :shock:

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?

Danke im Vorraus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 17, 2007 19:16 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Wiki hat geschrieben:
GL_NEAREST

Liefert den Wert des Texturelements, welches am nächsten (in Manhattendistanz) zum Zentrum des zu texturierenden Pixels liegt.

Wenn du dann die Mipmaps deaktivierst bzw. nicht hochlädst sollte es funktionieren.
(Die Manhattendistanz ist übrigens die Einer-Norm ;) )

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 46 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]