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

Aktuelle Zeit: Mi Jul 16, 2025 19:43

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit glBMP
BeitragVerfasst: Sa Jan 15, 2005 21:16 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Also ich lade meine Skybox, und danach des Bild des Menüs in Form.Create. Aber dann zeigt er als Skybox Textur
immer des Bild des Menüs an.

Code:
  1. SkyBox := TGLBMP.Create;
  2. Skybox.LoadImage('Weltraum.bmp');
  3. Skybox.GenTexture;
  4.  
  5. Menu1 := TGLBMP.Create;
  6. Menu1.LoadImage('Menü1.bmp');
  7. Menu1.GenTexture;


Ich hab mir überlegt, erst das Menü zu zeichnen, und die Textur dann löschen.
Aber wie geht das?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 15, 2005 22:55 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
wär es einfach möglich, dass du deine texture nicht an den entsprechenden Stellen bindest?

Die Textur löschen würde ansonsten entweder über TGLBMP.free oder direkt über die TextureID mit glDeleteTextures(1, TextureID) gehn


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 10:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also eine Textur wärend dem Zeichnen zu löschen oder zu laden ist unsinnig und äußerst unperformant. Außer du benötigst sie danach NIE wieder. Oder du musst sie danach nicht noch einmal laden. Andernfalls musst du deine Textur vor der Benutzung binden.
Code:
  1. Textur.Bind;
Damit sagst du OpenGL, dass er ab jetzt diese Textur benutzen soll.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 11:25 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Lossy eX hat geschrieben:
Also eine Textur wärend dem Zeichnen zu löschen oder zu laden ist unsinnig und äußerst unperformant. Außer du benötigst sie danach NIE wieder. Oder du musst sie danach nicht noch einmal laden. Andernfalls musst du deine Textur vor der Benutzung binden.
Code:
  1. Textur.Bind;
Damit sagst du OpenGL, dass er ab jetzt diese Textur benutzen soll.


Des hab ich ja gemacht. Aber dann bringt er mir ne Fehlermeldung!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 15:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was denn für eine?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 16:52 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
EAccessViolation!

Und er marktiert mir in der glBMP die Zeile:

Code:
  1. procedure TGLBMP.Bind();
  2. begin
  3.   if TextureID > 0 then  //  <--- hier!
  4.     glBindTexture(GL_TEXTURE_2D, TextureID);
  5. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 17:58 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
so ein Fehler tritt in der Regel auf, wenn das Objekt noch nicht created wurde.
Rufst du den Code vll. schon auf, bevor du die creates für die Texturen aufgerufen hast?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 18:15 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Code:
  1. SkyBox := TGLBMP.Create;
  2. Skybox.LoadImage('Weltraum.bmp');
  3. Skybox.GenTexture;
  4.  
  5. Menu1 := TGLBMP.Create;
  6. Menu1.LoadImage('Menü1.bmp');
  7. Menu1.GenTexture;
  8.  


Des wird im Form.Create aufgerufen, und verwendet wird es im glDraw.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 18:21 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Selbst wenn ich nur eine Textur lad:
Immer wenn ich Skybox.Bind; eingeb:
Bringt er mir nen EAccessViolation.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 19:31 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
worüber wird dein draw denn aufgerufen? kann ja sein, dass das noch vor / während des form.create zum ersten mal passiert (zB, wenn es auf form.paint liegt).

vll. wäre es hilfreich, wenn du etwas von deinem code posten würdest, sonst hat das ein wenig von stochern im nebel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 19:50 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Code:
  1. procedure TGLForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  2. begin
  3. // In die Projektionsmatrix wechseln
  4. glMatrixMode(GL_PROJECTION);
  5. // Identitätsmatrix laden
  6. glLoadIdentity;
  7. // Viewport an Clientareal des Fensters anpassen
  8. glViewPort(0, 0, ClientWidth, ClientHeight);
  9. // Perspective, FOV und Tiefenreichweite setzen
  10. gluPerspective(60, ClientWidth/ClientHeight, 1, 128);
  11.  
  12. // In die Modelansichtsmatrix wechseln
  13. glMatrixMode(GL_MODELVIEW);
  14. // Identitätsmatrix laden
  15. glLoadIdentity;
  16. // Farb- und Tiefenpuffer löschen
  17. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  18.  
  19. glRotatef(XRotation,-1,0,0);
  20. glRotatef(YRotation,0,-1,0);
  21.  
  22. PaintSkyBox;  // Hier zeichne ich
  23.  
  24. ShowText;
  25.  
  26. // Hinteren Puffer nach vorne bringen
  27. SwapBuffers(DC);
  28.  
  29.  
  30. // Windows denken lassen, das wir noch nicht fertig wären
  31. Done := False;
  32.  
  33. // Nummer des gezeichneten Frames erhöhen
  34. inc(Frames);
  35. // FPS aktualisieren
  36. if GetTickCount - StartTick >= 500 then
  37.  begin
  38.  FPS       := Frames/(GetTickCount-StartTick)*1000;
  39.  Frames    := 0;
  40.  StartTick := GetTickCount
  41.  end;
  42.  
  43. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 20:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
probier mal folgendes :
Code:
  1. if Assigned(Texturename) then
  2. begin
  3.      Texturename.bind;   // hier nen brakpoint setzen ...
  4. end;
  5.  


und dann setz mal nen brakpoint an die angegebene stelle. schau mal ob da was wird ...

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 16, 2005 21:26 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Funktioniert.
Ich hab zwar nichts gemacht, außer Delphi neu zu starten, aber egal :D


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.010s | 14 Queries | GZIP : On ]