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

Aktuelle Zeit: Fr Jul 18, 2025 11:15

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 2 Fragen ...
BeitragVerfasst: So Sep 14, 2003 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Ich arbeite im Moment ein Hauptmenü im orthogonalen Modus aus und schaffe es im Moment nicht, eine Textur über ein Quad zu spannen :oops:
Entdeckt jemand einen Fehler in folgenden Quellcode oder hab ich was vergessen ?:
Code:
  1.  
  2. procedure MainMenue();
  3. begin
  4. glMatrixMode(GL_PROJECTION);
  5. glLoadIdentity;
  6. glOrtho(0, form1ClientWidth, form1ClientHeight, 0, -1, 10);
  7. glMatrixMode(GL_MODELVIEW);
  8. glLoadIdentity;
  9. glColor3f(1.0,1.0,1.0);
  10. glEnable(GL_TEXTURE_2D);
  11. glBindTexture(GL_TEXTURE_2D,texture[1]);
  12. glBegin(GL_QUADS);
  13. glTexCoord2i(0,0); glVertex2i(0,0);
  14. glTexCoord2i(0,1); glVertex2i(0,20);
  15. glTexCoord2i(1,1); glVertex2i(1152,20);
  16. glTexCoord2i(1,0); glVertex2i(1152,0);
  17. glEnd;
  18. {//Projektionsmatrix wiederherstellen
  19. glMatrixMode(GL_PROJECTION);
  20. glPopMatrix();
  21. //Modelview Matrix wiederherstellen
  22. glMatrixMode(GL_MODELVIEW);
  23. glPopMatrix();
  24. glPopAttrib();}
  25. end;
  26.  

Also Textures[1] ist mit einem Bitmap mit 1152 x 20 belegt. Im Moment komme ich nicht auf den Fehler.

Ich wollte Abfragen, ob Textures[1] belegt ist. Dazu habe ich folgenden Code verwendet :
Code:
  1. glGet(GL_TEXTURE_2D_BINDING,texture[1]);

Das dumme an der Geschichte ist nur, dass der Befehl glGet zwar in der MS-OpenGL-Hilfe steht aber in der OpenGL12.pas nicht implementiert ist. Gibts dazu eine Alternative ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 14, 2003 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also glGet gibt es nicht. Es gibt entweder ein glGetIntegerv, glGetString, glGetFloatv oder glDoublev. Die Typen werden allerdings weggelassen, weil das immer auf auf den Abfragewert ankommt. z. B.: Bei der TexturenGröße macht ein String, Float oder Double ja wenig Sinn.

Zu deiner Textur. Wird die Fläche überhaupt angezeigt? Wenn ja dann gehe ich doch mal davon aus, dass deine Textur nicht gültig ist.
Wenn du ein ganz normales Array verwendest, dann ist in der Regel das erste Element das mit der 0. (texture[0]). Wenn dein Quad allerdings nicht mal angezeigt wird, dann solltest du Backfaceculling deaktivieren und wenn es dann da ist, dann solltest du deine Punktreihenfolge ändern. Ich kann dir das jetzt aus dem Kopf auch nicht so genau sagen wie es sein muss.

PS: Es ist nicht gut, wenn du bei jedem Frame in den Ortho Modus wechselst. Es genügt vollkommen dies beim OnResize des Fensters zu erledigen. (geht schneller ;) )

PPS: Die Texturengröße kann auf einigen Karten auch Probleme machen. und zwar genau dann wenn die Karten nur maximal 1024x1024 können. Es würde sich dabei anbieten, dass du dein Bild in der Mitte durchsägst (oder mehr Teile) und in dem Bild untereinander klebst. Dann müsstest du das mit zwei (oder mehr) Quads zeichen. Ach ja. Laut Spezifikation können die Karten gar keine Texturen die die nicht n² sind. Ist erst jetzt in OpenGl1.5 drin. Inoffiziell machen sie das aber schon. Es bietet sich also an, dass die das Menü in eine n² Textur zerlegst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 14, 2003 17:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Hiho !

Hab den Fehler gefunden. Ich hab mal wieder die Texturen vor einem gültigen Rendercontext geladen und deswegen war´s Banane. Habs jetzt behoben und es funzt. (Danke @ SoS ... schön langsam wirkts *gg*)


Zitat:
Zu deiner Textur. Wird die Fläche überhaupt angezeigt? Wenn ja dann gehe ich doch mal davon aus, dass deine Textur nicht gültig ist.

Da tut sich bei mir die Frage auf, wie man eine Textur auf Ihre Gültigkeit prüft. Die Textures.pas gibt ja grundsätzlich false zurück, egal ob es geladen wurde oder nicht. Kann man das zum Bleistift mit glGetIntegerfv(texture[0]) machen ?

Ich verwende Ortho und 3D gleichzeitig, also lässt sich meiner Meinung nach es sich nicht vermeiden, frameweise zu wechseln oder gibt es hierfür auch eine Lösung ?


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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 | 16 Queries | GZIP : On ]