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

Aktuelle Zeit: Fr Jul 18, 2025 21:01

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Dez 29, 2006 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Hallöle!

Also, ich habe folgenden Code zur Texturerstellung:
Code:
  1.  
  2. Part  := TglBitmap2D.Create;
  3. with Part do
  4. begin
  5.   FreeDataAfterGenTexture := False;
  6.   SetFilter(GL_LINEAR, GL_LINEAR);
  7.   Target := GL_TEXTURE_RECTANGLE_EXT;    {auskommentieren}
  8.   Format := tfCompressed;
  9.  
  10.   AssignFromBitmap(Segment);
  11.   AddAlphaFromBitmap(SegAlpha);
  12.  
  13.   GenTexture(true);
  14. end;
  15.  


Nun habe ich festegestellt, dass meine Texturen immer POT sind,
und wollte daher auf das Texture_Rectangle verzichten. Rendern wollte ich dann so:
Code:
  1.  
  2. MapPart[I].Part.Bind;
  3.  
  4. glBegin(GL_Quads);
  5.   glTexCoord2f(0, 1);
  6.     glVertex2d(MapPart[I].Rect.Left, MapPart[I].Rect.Bottom);
  7.   glTexCoord2f(1, 1);
  8.     glVertex2d(MapPart[I].Rect.Right, MapPart[I].Rect.Bottom);
  9.   glTexCoord2f(1, 0);
  10.     glVertex2d(MapPart[I].Rect.Right, MapPart[I].Rect.Top);
  11.   glTexCoord2f(0, 0);
  12.     glVertex2d(MapPart[I].Rect.Left, MapPart[I].Rect.Top);
  13. glEnd;
  14.  


Nur leider geht das nicht. Es erscheint nichts. Wenn ich aber GL_TEXTURE_RECTANGLE_EXT benutze,
und die Texturkoordinaten anpasse, dann geht alles. Woran kann das liegen?

Außerdem: ein Code-Teil zum Testen zeigt dann auch nichts mehr an.
Code:
  1.  
  2. glColor3f(1, 1, 1);
  3.  
  4. glBegin(GL_LINE_LOOP);
  5.     glVertex2d(MapPart[I].Rect.Left,  MapPart[I].Rect.Bottom);
  6.     glVertex2d(MapPart[I].Rect.Right, MapPart[I].Rect.Bottom);
  7.     glVertex2d(MapPart[I].Rect.Right, MapPart[I].Rect.Top);
  8.     glVertex2d(MapPart[I].Rect.Left,  MapPart[I].Rect.Top);
  9. glEnd;
  10.  


We kann mir helfen? Auch wenn es sicherlich was ganz einfaches ist, ich verzweifle hier noch.

Martok

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 29, 2006 19:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
POT bedeutet, dass beide Seiten der Textur eine Potenz von 2 sind.
RECTANGLE bedeutet, dass beide seiten verschieden lang sind.

Das heißt, du brauchst die Erweiterung, sobald deine Textur nicht Quadratisch, also zwei verschieden lange Seiten hat. Das hat IMHO nichts mit POT zu tun.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 29, 2006 20:08 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
POT heist nicht das es quadratisch sein muss, es muss nur eine 2^n*2^m Textur sein.

Aber auch ohne Textur müsste zumindest ein weisses Quadrat da sein, daher vermute ich den Fehler eher woanders.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 29, 2006 21:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mach mal bitte das Format := tfCompressed; weg. Das sorgt dafür, dass die Textur von der Grafikkarte komprimiert wird. Und diese verlangen meines wissens nach POT. In dieser Kombination hatte ich das allerdings noch nie getestet. Allerdings wundert es mich selber ein bisschen warum du nichts siehst.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Dez 29, 2006 22:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Ähm, ja. Können wir auf meine Frage zurückkommen ;)

Martok hat geschrieben:
Nun habe ich festegestellt, dass meine Texturen immer POT sind,
und wollte daher auf das Texture_Rectangle verzichten.


64*64 finde ich ist sehr POT....

Und ohne Compressed hatte ich auch schon versucht.

EDIT: Es gehen nur Texturen, die als Rectangle erzeugt wurden. Alle 'normalen' gehen nicht. Aber am seltsamsten finde ich, dass nichtmal einfache Linien hinterher gehen.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 29, 2006 23:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Kann es sein, dass bei den Linien dann noch die Textur aktiv ist? Oder es könnte sein, dass der Alphakanal frei dreht. Entferne mal den Alphakanal und Teste das mal ohne.

Aber sonst finde ich das ziemlich suspekt. Zur Not poste mal die Bild. Evtl liegts ja daran. Bzw kann ich an den Codefragmenten so jetzt auch einen Fehler entdecken. Aber das wird sicherlich auch nicht der ganze Code sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 30, 2006 01:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Also, mit Lossy's Hilfe ist dieses Problem gelöst. Und zwar liegt das Problem nicht im bisher gezeigten Code, sondern davor. Vor dem Rendern des gezeigten Map-Objekts passiert noch etwas: die Spielfiguren werden gerendert. Das sieht so aus:
Code:
  1. procedure TLemmingsVisObject.Render;
  2. begin
  3.   FTexture.Bind;
  4.  
  5.   glPushMatrix;
  6.     glTranslatef(FPos[0], FPos[1], 0);
  7.     glTranslatef(-FOffs.X, -FOffs.Y, 0);
  8.  
  9.     glBegin(GL_QUADS);
  10.       glTexCoord2f(0, 0);                            glVertex2d(0, 0);
  11.       glTexCoord2f(FTexture.Width, 0);               glVertex2d(FTexture.Width, 0);
  12.       glTexCoord2f(FTexture.Width, FTexture.Height); glVertex2d(FTexture.Width, FTexture.Height);
  13.       glTexCoord2f(0, FTexture.Height);              glVertex2d(0, FTexture.Height);
  14.     glEnd;
  15.   glPopMatrix;
  16.   FTexture.UnBind;  { <--------- das hat gefehlt }
  17. end;


Wie ich schon in den Code kommentiert habe: die Textur wird nicht wieder Un-ge-Bindet. Damit war sowohl das Target Rectangle (für die Lemminge) als auch das neue Target GL_TEXTURE_2D aktiv. Das hat der TMU wohl nicht geschmeckt, und sie hat sich krank gemeldet.

Was sowohl Lossy als auch ich komisch finden: es gibt keinen Fehlercode, obwohl man das erwarten würde.

Also: Traue nie den Fehlercodes, irgendwas ist immer....

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 03, 2007 14:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Da is aber noch was komisch. Und zwar gibst du als Texturkoordinate Texture.width an. Das funktioniert aber nur bei Rectangle-Gedöns. Bei den normalen Texture_2D muss der wert zwischen 0 und 1 liegen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 03, 2007 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Das stimmt sogar so. Dieser Teil (Lemming) ist als Rectangle zu zeichnen. Nur eben vor den 'normalen' POT-Texturen(Map-Ausschnitte).

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.010s | 15 Queries | GZIP : On ]