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

Aktuelle Zeit: Do Jul 17, 2025 19:07

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 11:19 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

so hab ich mir das eigentlich auch gedacht und auch so verstanden.
Allerdings weiss ich manchmal nicht genau was ich falsch mache ?
So teste ich solange herum bis es funktioniert. Das hat auch einen sehr guten lerneffekt :-)

Also ich hatte z.B. folgendes probiert

Code:
  1.  
  2. var
  3.   Texture : array[0..2] of TglBitmap2D; // tag, nacht und wolkentexture als globale variablen
  4. .
  5. .
  6. .
  7. procedure inittextures; // wird beim starten des programms, also nur einmal aufgerufen
  8. var
  9.   Stream : TResourceStream;
  10. begin
  11. // alle drei texturen laden
  12.   Stream := TResourceStream.CreateFromID(hInstance,5,RT_RCDATA);
  13.   Texture[0] := TglBitmap2D.Create;
  14.   Texture[0].LoadFromStream(stream);
  15.   Stream.Free;
  16.   Stream := TResourceStream.CreateFromID(hInstance,6,RT_RCDATA);
  17.   Texture[1] := TglBitmap2D.Create;
  18.   Texture[1].LoadFromStream(stream);
  19.   Stream.Free;
  20.   Stream := TResourceStream.CreateFromID(hInstance,7,RT_RCDATA);
  21.   Texture[2] := TglBitmap2D.Create;
  22.   Texture[2].LoadFromStream(stream);
  23.   Stream.Free;
  24.  
  25. // erste Texture ( day ) binden
  26.  
  27.   Texture[0].GenTexture;
  28.   Texture[0].Bind();
  29.  
  30.   glBindTexture(GL_TEXTURE_2D, texture[0].TextureID);
  31.  
  32.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  33.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  34.  
  35.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_linear);
  36.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_linear);
  37.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_modulate);
  38. end;
  39.  
  40. // texture wechseln
  41. procedure TForm1.rbNightClick(Sender: TObject);
  42. begin
  43.   Texture[1].GenTexture;
  44.   Texture[1].Bind();
  45.  
  46.   glBindTexture(GL_TEXTURE_2D, texture[1].TextureID);
  47.  
  48.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  49.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  50.  
  51.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_linear);
  52.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_linear);
  53.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_modulate);
  54. end;
  55.  
  56. // Texture mit wolken
  57. procedure TForm1.rbPathfinderClick(Sender: TObject);
  58. begin
  59.   Texture[2].GenTexture;
  60.   Texture[2].Bind();
  61.  
  62.   glBindTexture(GL_TEXTURE_2D, texture[2].TextureID);
  63.  
  64.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  65.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  66.  
  67.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_linear);
  68.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_linear);
  69.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_modulate);
  70. end;
  71.  
  72. // Texture Day
  73. procedure TForm1.rbPathfinderClick(Sender: TObject);
  74. begin
  75.   Texture[0].GenTexture;
  76.   Texture[0].Bind();
  77.  
  78.   glBindTexture(GL_TEXTURE_2D, texture[0].TextureID);
  79.  
  80.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  81.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  82.  
  83.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_linear);
  84.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_linear);
  85.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_modulate);
  86. end;
  87.  
  88. procedure TForm1.FormDestroy(Sender: TObject);
  89. begin
  90.   DeactivateRenderingContext;
  91.   DestroyRenderingContext(RC);
  92.   ReleaseDC(Handle, DC);
  93.  
  94.   Texture[0].Free;
  95.   Texture[1].Free;
  96.   Texture[2].Free;
  97. end;
  98.  


Geht aber nicht oder mach ich da noch irgendwas falsch ?

Ich denke ich hab das so gemacht wie du geschrieben hast, also
1. Alle texturen laden
2. Texturen je nach wahl erstellen und binden

oder ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 11:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was geht denn nicht? Wie äußert es sich denn? Wobei ich da schon eine gewisse Ahnung habe. Die Texturen sind zwar geladen und deren Daten befinden sich im Clientspeicher der Klassen aber sie werden erst richtig erstellt, wenn du GenTextures aufrufst. Das solltest du nach möglichkeit nur ein mal tun. Am Sinnvollsten wäre es da, wenn du das in der Methode InitTextures nach dem Laden aus dem Stream bereits tust.

Dann aber noch eine Anmerkung. Du erstellst die Texturen mit MipMaps weist OpenGL aber an diese dann nicht zu verwenden. Da die Instanz der glBitmap das OpenGL bereits mitteilen muss wäre es wohl das Sinnvollste wenn du den Instanzen das setzten würdest. Das geht entweder Individual mit der Methode SetFilter oder mit der globalen Methode glBitmapSetDefaultFilter. Danach werden alle Instanzen der glBitmap nicht mehr mit GL_LINEAR_MIPMAP_LINEAR / GL_LINEAR gefüttert sondern mit dem was du glBitmapSetDefaultFilter übergeben hast. Außerdem solltest du di eigenschaft MipMap auf mmNone stellen. Dafür gibt es aber noch kein Default.

Ganz genau genommen könntest du den Filter so wie er ist auch lassen und nur MipMap auf mmNone stellen. Ich stelle ja fest, dass keine MipMaps gewünscht sind und ändere die Filterung dann automatisch auf GL_LINEAR, da du sonst keine Textur sehen würdest.

Das geht für den Wrap im übrigen auch. glBitmapSetDefaultWrap Das ist aber auch nur eine Einstellung. Diese hat keinen Einfluss auf die Texturdaten wie es bei MipMaps der Fall ist.

Würde als Code in etwa so aussehen. Der Aufruf von glBind und glTexParameteri wären dann überflüssig, da diese Einstellungen durch die glBitmap getätigt wurden und erhalten bleiben.
Code:
  1. procedure inittextures; // wird beim starten des programms, also nur einmal aufgerufen
  2. var
  3.   Stream : TResourceStream;
  4. begin
  5.   glBitmapSetDefaultWrap(GL_REPEAT, GL_REPEAT, GL_REPEAT);
  6.   glBitmapSetDefaultFilter(GL_LINEAR, GL_LINEAR);
  7.  
  8.   // alle drei texturen laden
  9.   Stream := TResourceStream.CreateFromID(hInstance,5,RT_RCDATA);
  10.   Texture[0] := TglBitmap2D.Create;
  11.   Texture[0].LoadFromStream(stream);
  12.   Texture[0].MipMap := mmNone;
  13.   Texture[0].GenTexture;
  14.   Stream.Free;
  15.  
  16.   Stream := TResourceStream.CreateFromID(hInstance,6,RT_RCDATA);
  17.   Texture[1] := TglBitmap2D.Create;
  18.   Texture[1].LoadFromStream(stream);
  19.   Texture[1].MipMap := mmNone;
  20.   Texture[1].GenTexture;
  21.   Stream.Free;
  22.  
  23.   Stream := TResourceStream.CreateFromID(hInstance,7,RT_RCDATA);
  24.   Texture[2] := TglBitmap2D.Create;
  25.   Texture[2].LoadFromStream(stream);
  26.   Texture[2].MipMap := mmNone;
  27.   Texture[2].GenTexture;
  28.   Stream.Free;
  29.  
  30.   // erste Texture ( day ) binden
  31.  
  32.   rbPathfinderClick(Self);
  33.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_modulate);
  34. end;
  35.  
  36.  
  37. // texture wechseln
  38. procedure TForm1.rbNightClick(Sender: TObject);
  39. begin
  40.   Texture[1].Bind();
  41. end;
  42.  
  43.  
  44. // Texture mit wolken
  45. procedure TForm1.rbPathfinderClick(Sender: TObject);  // Methodename ist gleich
  46. begin
  47.   Texture[2].Bind();
  48. end;
  49.  
  50.  
  51. // Texture Day
  52. procedure TForm1.rbPathfinderClick(Sender: TObject); // Methodename ist gleich
  53. begin
  54.   Texture[0].Bind();
  55. end;
  56.  
  57.  
  58. procedure TForm1.FormDestroy(Sender: TObject);
  59. begin
  60.   // nach Möglichkeit vorher, da die OpenGL Texturen nach DestroyRenderingContext wohl schon nicht mehr existieren.
  61.   Texture[0].Free;
  62.   Texture[1].Free;
  63.   Texture[2].Free;
  64.  
  65.   DeactivateRenderingContext;
  66.   DestroyRenderingContext(RC);
  67.   ReleaseDC(Handle, DC);
  68. end;


Ich weiß allerdings gerade nicht wie das mit glTexEnvi aussieht. Es kann sein, dass diese Einstellungen an der Textureinheit der Grafikkarte Kleben und deswegen nicht bei jeder Textur neu gesetzt werden muss. Es kann aber auch, dass diese an der Textur kleben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 12:11 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

danke für die ausführliche Antwort !

Allerdings kommen zwei Fehler, ich weiss wiedermal nicht wieso, denn ich denke mal du kennst di eBefehle etwas besser als ich :-)

Also 1. glBitmapSetDefaultWrap(GL_REPEAT, GL_REPEAT, GL_REPEAT);
und 2. gibts Texture[x].MipMap; nicht ????

Das hab ich das letzte mal ja schonmal versucht als Du ( glaube ich ) mir das vorgeschlagen hattest.
Habs aber damals auch nicht gefunden ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 12:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
STF-DIR hat geschrieben:
Allerdings kommen zwei Fehler, ich weiss wiedermal nicht wieso, denn ich denke mal du kennst di eBefehle etwas besser als ich :-)

Sag mir mal bitte genau was für Fehler dabei kommen. Das ist normal vollkommen Okay und so kann ich mir gerade überhaupt nicht vorstellen was das für Fehler sein sollen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 12:26 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

hab das jetzt erstmal auskomentiert und so versucht :

Code:
  1.  
  2.   //glBitmapSetDefaultWrap(GL_REPEAT, GL_REPEAT, GL_REPEAT);
  3.   glBitmapSetDefaultFilter(GL_LINEAR, GL_LINEAR);
  4.  
  5.   // alle drei texturen laden
  6.   Stream := TResourceStream.CreateFromID(hInstance,5,RT_RCDATA);
  7.   Texture[0] := TglBitmap2D.Create;
  8.   Texture[0].LoadFromStream(stream);
  9.   //Texture[0].MipMap := mmNone;
  10.   Texture[0].GenTexture;
  11.   Stream.Free;
  12.  


Das wechseln geht aber trotzdem nicht ....

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 12:28 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

bei glBitmapSetDefaultWrap ... undefinierter Bezeichner ....
und bei Texture[0].MipMap ... das gibts nicht. Also wenn ich hinter Texture[0] den punkt mache kommt doch das nette Fensterchen was einem die verfügbaren optionen vorschlägt, und da steht nix von MipMap drin.

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 12:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hast du eine aktuelle Version der glBitmap? Link gibts in der Signatur. Ich hatte vor einer Weile mal die Namen umgestellt aber das ist schon ewig und noch länger her.

Warum er deine Texturen nicht wechselt ist mir ein Rätsel. Dazu bräuchte ich ein bisschen mehr Code. Also von dem wo du Renderst. Wobei ich dir wohl auch eher empfehlen würde nicht die Textur in dem rbNightClick zu binden sondern den Index in eine globale oder Klassenvariable zu schreiben und beim Rendern dann die Textur mit dem Index zu Binden. Das ist alle mal sicherere. Und achte bitte darauf, dass danach keine andere mehr bindest sonst ist diese die aktuelle.

Code:
  1. Texture[fTextureIndex].Bind();
  2. Rendern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 13:02 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

jetzt weiss ich auch warum hier auch manches andere nicht ging... toll !
Ich hab, als ich mit OGL angefangen habe, mir das OGLDSK dingsda installieren wollen.
Die neuste version davon läasst sich aber nicht installieren. da kam immer irgendein Fehler.
Deswegen hatte ich die ältere version genommen und da war sicher noch die ältere glBitmap drin .. toll.

Jetzt gehts .. zumindest gibts die beiden Befehle jetzt :-)

Das mit den Texturen wechseln geht immer noch nicht.

Ich hab jetzt die Inittextures so gelassen wie sie ist und direkt in der Render procedure per hand
die einzelnen Texturen probiert, also
Texture[0].Bind();
Texture[1].Bind();
Texture[2].Bind();

Bleibt aber immer das gleiche ergebnis. die Texture ist immer die gleiche, wechselt einfach nciht ???

Ich weiss auch nicht.

Hab derzeit , wie du gesagt hast, ne globale Variable gemacht ( TExIndex ) .
IIIn der Render Procedure , direkt am anfang rufe ich dann

Texture[TexIndex].Bind(); auf.
Der TexIndex wird dann beim Klicken auf die einzelnen Radibuttons gewechselt.
Warum das nicht geht kann ich Dir ech nicht mehr sagen, aber ich geb nicht auf :-)

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 13:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wenn du alle Texturen gleichzeitig bindest dann bleibt nur die Letzte übrig. Du musst dich da für eine entscheiden. Aber geh mal von einer anderen Seite an die Sache. Welche Textur siehst du denn immer? Wenn du das hast dann schaut mal genau wo du diese Textur verwendest.

Das Binden sollte in jedem Fall klappen und ich denke da hast du einfach irgendwo eine Texturbindung vergessen. Benutzt du Displaylisten? Wenn ja schau mal ob du dirt drinnen eine Textur gebunden hast. Das solltest du dann evtl. auslagern. Wenn nicht bitte ich dich mal den Code aus deiner Renderprocedure zu posten und zwar vom Anfang der Procedur bis zum Ende. Es geht schneller sich durch Code durchzuwühlen als sich fehlen Code in seinen Gedanken vorzustellen. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 13:43 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,


so was blödes ... SORRY.

In der Procedure wo die Sphere gezeichnet wird wurde nochmal die Texture gebunden .... toll !!

Naja, das kommt wenn man alles mögliche ausprobiert, dann ist der Code irgendwann ziemlich
zerwurschtelt.

Also nochmals Sorry !

Jetzt gehts mit den blöden schriften weiter, das geht auch noch nicht so richtig.
Sind immer noch keine TextureFonts :-(

Na mal sehen, aber das is ein anderer Thread.

Da hat zwar jemand geantwortet, aber ich weiss wiedermal nicht genau was wohin muss.
Naja, und so geht die Sucherei wiueder los.

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 03, 2006 14:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du Probleme mit dem SDK hast, dann schreib das bitte mal ins Feedbackforum. Fehler können nur dann vond en zuständigen Leuten behoben werden, wenn sie wissen das Fehler existieren.

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


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


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.008s | 16 Queries | GZIP : On ]