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

Aktuelle Zeit: Fr Jul 18, 2025 08:10

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Jan 11, 2009 03:15 
Offline
DGL Member

Registriert: So Jun 01, 2008 16:06
Beiträge: 31
Wohnort: Nürtingen
Ich schnitt das Thema hier bereits als "kleinere Frage" an.
Nun bin ich doch soweit, dass ichs brauch..

Sofern ich das verstanden hab, muss das so aussehen o,o
Code:
  1. //bei FormCreate:
  2. Textur.LoadFromFile('gfx\4ele.dds');
  3. Textur.GenTexture;
  4. Textur.Bind; //brauche ich das überhaupt, wenn ich mehrere Texturen hab und eh immer ne andere laden muss??
  5.  
  6. //bei ApplicationEventsIdle:
  7. glBindTexture(GL_TEXTURE_2D, ID);
  8. //hier dann der Rendervorgang des Objekts mit dieser Textur
  9. glBindTexture(GL_TEXTURE_2D, andere ID);
  10. //etc.


Ist das an sich richtig?
(jaja, da gabs nen anderen Code, irgendwas mit Load.2dtexture in einem Wort halt und dann ID. ist aber letztendlich dasselbe..)

Die eigentliche Frage: Wie finde ich heraus, welche ID meine Textur eben bekam?
(Das peinliche ist, dass ich atm bei meiner 2. Textur bin.
d.h. es ist echt nicht viel. Aber ohne müsste ich 2 völlig nicht zusammengehörige Objekte zusammenwurschteln und das will ich eig ned, damit die Überisicht erhalten bleibt.)

Ich hoff mal auf baldige Antwort.

[ edit: ]
Des ist jetzt keinen neuen Post wert, aber vielen Dank, es hat geklappt ^^
Immer:
Code:
  1. var
  2. Texture1, Texture2 {etc}: TGLBitmap2D; // soviele Texturen, wie man halt hat. Gern auch sinnvoll benennen.
  3.  
  4. // bei FormCreate (zB)
  5. Texture1 := TglBitmap2D.Create; // Instanz erstellen
  6. Texture1.LoadFromFile('gfx\Tex1.dds'); // und Datei laden
  7. Texture1.GenTexture; // an OpenGL übergeben
  8.  
  9. Texture1 := TglBitmap2D.Create;
  10. Texture1.LoadFromFile('gfx\Tex2.dds');
  11. Texture1.GenTexture;  //und das halt sooft, wie nötig =)
  12.  
  13. // beim Rendern dann
  14. Textur1.Bind;
  15. {Alle Objekte mit Textur1}
  16.  
  17. Textur2.Bind;
  18. {etc..}
Ich weiß, es in dem Thread nun etwas doppelt. Aber ich habe nach solchen Beispielen selbst gesucht und suche, was anderes anbelangt immernoch. Ich seh auch keinen pädagogischen Fehler darin, sowas reinzustellen, damit andere damit rumspielen können ^^

_________________
blub.. ? oo''


Zuletzt geändert von ecth am So Jan 11, 2009 19:50, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 11, 2009 09:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Moin,

mit der glBitmap ist das recht einfach: Texture1.Bind() bindet die Textur1. Texture2.Bind() bindet die nächste, die erste wird dann beim Rendern vernachlässigt.
Willst du wieder mit der ersten Textur arbeiten, einfach Texture1.Bind() aufrufen.
Deswegen musst du nach .GenTexture() auch nicht .Bind() aufrufen.

Willst du aber die ID haben, einfach Texture1.ID auslesen.

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 11, 2009 16:25 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Genau so ist das.
Irgendwann solltest du dir einen Texturmanager schreiben.
Der sollte dann solche sachen können:

- setTexturePath() //Setzt den Pfad zu den Texturen auf der Platte
- loadTexture(name) //lädt eine Textur ohne sie zu binden
- bindTexture(name, load) //bindet eine Textur. Mit dem zweiten parameter kannst du angeben ob die Textur geladen werden soll falls sie noch nicht geladen wurde.
- freeTexture(name) //wirft die Texture wieder weg.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 13, 2009 14:39 
Offline
DGL Member

Registriert: So Jun 01, 2008 16:06
Beiträge: 31
Wohnort: Nürtingen
Wenn ich ein Spiel schreibe, bei dem es nur eine Welt gibt, dann kann ich ja alle Texturen laden und behalten, solange ich sie benutze, oder?
Es lohnt kaum, bei jedem Rendervorgang Texturen zu laden und freizulassen. Nur beim Betreten neuer Level o.Ä.

Wie auch immer, nun habe ich ein neues Problem -.-

Ich habe eine 3. Textur.
Ich erstelle 3 Texturvariablen, lade alle 3 und binde sie nacheinander, wenn ich sie brauch.

Nun sagt der mir bei der 3. "TglBitmap.GenTexture - Rendercontext dosn't support non power of two texture." -.-
Ich dachte, es liegt an der Beschaffenheit der Textur, der Datei selbst. Habe Tausende neue erstellt, ohne Alpha und sowas. Alles durchprobiert. Wenn ich die 2. Textur als 3. geladen habe, dann gehts. Wenn ich die 3., die ja nie wollte als 1. lade, kommt der Fehler schon da. Ich dachte, vllt ists Photoshop und hab ne Paint-Bitmap erstellt. Die ging auch ned Oo
Irgendwie scheint es fast so als würde Delphi keine Dateien annehmen, die später erstellt wurden als Tag X ôo
Jetzt, wo ich das geschrieben hab, wollte ich das testen: eine 3. Datei, die früher erstellt wurde nimmt er an und macht kein Mucks =)

Kann mir wer sagen, wo das Problem ist? .__.
Ich benutz .dds Dateien weil sie vonvornherein von TglBitmap erkannt wurden und Alpha-Channels verstehen was bei nem 2D-Spiel eig Pflicht ist, wenn man heute trotz 2D etwas optisch Ansprechendes schaffen will.
.tga hab ich vorsichtshalber auch ausprobiert aber es tut einfach nix -.-

Oder brauch ich n anderen Texturloader?

_________________
blub.. ? oo''


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 13, 2009 14:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein, dein Problem ist, dass eine deiner Texturkanten eine Länge hat, die keine Power-Of-Two-Größe ist (wie auch die Fehlermeldung sagt). Power Of Two ist z.B. 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 usw...

Einige Grafikkarten können keine Texturen verarbeiten, die diese Kriterien nicht erfüllen.

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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] 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.

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