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

Aktuelle Zeit: Mo Jul 07, 2025 10:53

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



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: glut und performanceverlust
BeitragVerfasst: Di Dez 19, 2006 22:47 
Offline
DGL Member

Registriert: Mi Nov 08, 2006 17:35
Beiträge: 31
Hi,

ich habe folgendes Problem. Ich benutze die Funktionen von GLUT. Also MainLoop usw.Jezt habe ich folgendes Problem. Wenn ich Texturen auf mein Objekt
draufklebe wird meine Performance immer schlechter. Also um so mehr ich an Texturen benutze um so mehr wird mein Prozessor belastet und ich kann mich noch sehr schwer in der Szene bewegen. Die Images lade ich in der Display Funktion mit ilutGLLoadImage.Weiss einer woran das liegen kann?

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 19, 2006 23:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Würde mal spontan behaupten, dass du die Texturen im Renderloop lädst. Das darfst du natürlich nur machen wenn du genau weißt was du tust und wenn sich die Texturen zur Laufzeit updaten sollen. Aber das fällt bei dir wohl raus.

In deinem Fall ist das wohl nicht so. Also solltest du zu begin einfach alle Texturen laden und dann mittel glBindTexture binden wenn du sie benutzen möchtest. Wir haben zu diesem Thema haben wir auch ein Tutorial.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 19, 2006 23:35 
Offline
DGL Member

Registriert: Mi Nov 08, 2006 17:35
Beiträge: 31
Hi,

leider programmiere ich das nicht in Delphi. Sondern in C. Ich weiss nicht wie ich das anstellen soll das er das einmal lädt und dann ich nur noch in der display()
das glBinTexture benutze.

Also im moment mache ich das so das ich in der display den Aufruf mache:

texture=ilutGLLoadImage("dach.bmp");


Und danach die texture in einer NewList verwende.



mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 19, 2006 23:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
hallo,

hast du vielleicht etwas Quelltext parat?

die textur musst du in deiner init()-Methode laden und dann dort an ein neues textur-objekt binden.

das textur-objekt rufst du dann nochmal mit bindtexture in der display funktion auf.

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 00:06 
Offline
DGL Member

Registriert: Mi Nov 08, 2006 17:35
Beiträge: 31
Code:
  1.  
  2. void main(int argc, char** argv)
  3. {
  4. ilInit();
  5.     iluInit();
  6.     ilutRenderer(ILUT_OPENGL);
  7.     glutInit(&argc,argv);
  8.     glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
  9.     glutInitWindowSize(500,500);
  10.     glutInitWindowPosition(100,0);
  11.     glutCreateWindow();
  12.     glutDisplayFunc(display);
  13.     glutReshapeFunc(reshape);
  14.     glutKeyboardFunc(keyboard);
  15.     glutMouseFunc(mouse);
  16.     glutPassiveMotionFunc(mouseMovement);
  17.     glClearColor(0.0, 0.0, 0.0, 1.0);
  18.     glClearDepth(1.0);
  19.     glEnable (GL_DEPTH_TEST); //enable the depth testing
  20.     glEnable (GL_LIGHTING); //enable the lighting
  21.     glEnable (GL_LIGHT0); //enable LIGHT0, our Diffuse Light
  22.     glShadeModel (GL_SMOOTH);
  23.     glEnable(GL_COLOR_MATERIAL);
  24.     glutMainLoop();
  25.  
  26. }// end main

Code:
  1.  
  2. void display( void )
  3. {
  4.      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  5.      glMatrixMode(GL_MODELVIEW);
  6.      glLoadIdentity();
  7.      gluLookAt ..........
  8.      GLuint texture;
  9.     ........
  10.      camera();
  11.  
  12.                               glNewList(BMIT,GL_COMPILE);
  13.                 texture=ilutGLLoadImage("TM.bmp");
  14.                                 glColor3d(1.0,1.0,1.0);
  15.                 glEnable(GL_TEXTURE_2D);
  16.                 glBindTexture(GL_TEXTURE_2D,texture);
  17.                 glPushMatrix();
  18.                 glBegin(GL_TRIANGLES);
  19.                   glNormal3d(1.0,0.0,0.0);
  20.                   glVertex3d(18.375,4.5,5.0);
  21.                   glVertex3d(18.375,2.25,2.5);
  22.                   glVertex3d(18.375,6.75,2.5);
  23.                  
  24.                   glNormal3d(-1.0,0.0,0.0);
  25.                   glVertex3d(6.125,4.5,5.0);
  26.                   glVertex3d(6.125,6.75,2.5);
  27.                   glVertex3d(6.125,2.25,2.5);
  28.                 glEnd();
  29.                    
  30.                 glBegin(GL_QUADS);
  31.                   glNormal3d(0.0,1.0,1.0);
  32.                   glTexCoord2d(0.0,2.0);
  33.                   glVertex3d(18.375,4.5,5.0);
  34.                   glTexCoord2d(0.0,0.0);
  35.                   glVertex3d(18.375,6.75,2.5);
  36.                   glTexCoord2d(2.0,0.0);
  37.                   glVertex3d(6.125,6.75,2.5);
  38.                   glTexCoord2d(2.0,2.0);
  39.                   glVertex3d(6.125,4.5,5.0);
  40.                 glEnd();
  41.                
  42.                 glBegin(GL_QUADS);
  43.                   glNormal3d(0.0,-1.0,1.0);
  44.                   glTexCoord2d(0.0,2.0);
  45.                   glVertex3d(18.375,4.5,5.0);
  46.                   glTexCoord2d(0.0,0.0);
  47.                   glVertex3d(6.125,4.5,5.0);
  48.                   glTexCoord2d(2.0,0.0);
  49.                   glVertex3d(6.125,2.25,2.5);
  50.                   glTexCoord2d(2.0,2.0);
  51.                   glVertex3d(18.375,2.25,2.5);
  52.                 glEnd();
  53.                glPopMatrix();
  54.              glDisable(GL_TEXTURE_2D);
  55.              glEndList();
  56.  
  57.  



Natürlich :lol:

In welcher Init() ??

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 02:51 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Code:
  1.  
  2. int texture;  // irgendwo muss man die textur-ID natürlich speichern. Eine globale Variable um es einfach zu machen.
  3.  
  4. void main(int argc, char** argv)
  5. {
  6. ilInit();
  7.     iluInit();
  8.     ilutRenderer(ILUT_OPENGL);
  9.     glutInit(&argc,argv);
  10.     glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
  11.     glutInitWindowSize(500,500);
  12.     glutInitWindowPosition(100,0);
  13.     glutCreateWindow();
  14.     glutDisplayFunc(display);
  15.     glutReshapeFunc(reshape);
  16.     glutKeyboardFunc(keyboard);
  17.     glutMouseFunc(mouse);
  18.     glutPassiveMotionFunc(mouseMovement);
  19.     glClearColor(0.0, 0.0, 0.0, 1.0);
  20.     glClearDepth(1.0);
  21.     glEnable (GL_DEPTH_TEST); //enable the depth testing
  22.     glEnable (GL_LIGHTING); //enable the lighting
  23.     glEnable (GL_LIGHT0); //enable LIGHT0, our Diffuse Light
  24.     glShadeModel (GL_SMOOTH);
  25.     glEnable(GL_COLOR_MATERIAL);
  26.     texture=ilutGLLoadImage("TM.bmp");   // hier initialisieren, wenn du mehrere Texturen hast bietet sich natürlich
  27.                                     // eine eigene Init-Funktion an. Kannst auch etwas früher initialisieren wenn ich
  28.                                     // mich nicht irre spätestens nach glutCreateWindow();
  29.     glutMainLoop();
  30.  
  31. }// end main

display bleibt gleich nur das ilutGLLoadImage raus.
Code:
  1. void display( void )
  2. {
  3.      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  4.      glMatrixMode(GL_MODELVIEW);
  5.      glLoadIdentity();
  6.      gluLookAt ..........
  7.      GLuint texture;
  8.     ........
  9.      camera();
  10.                               glNewList(BMIT,GL_COMPILE);
  11.                                 glColor3d(1.0,1.0,1.0);
  12.                 glEnable(GL_TEXTURE_2D);
  13.                 glBindTexture(GL_TEXTURE_2D,texture);
  14.                 glPushMatrix();
  15.                 glBegin(GL_TRIANGLES);
  16.                   glNormal3d(1.0,0.0,0.0);
  17.                   glVertex3d(18.375,4.5,5.0);
  18.                   glVertex3d(18.375,2.25,2.5);
  19.                   glVertex3d(18.375,6.75,2.5);
  20.                  
  21.                   glNormal3d(-1.0,0.0,0.0);
  22.                   glVertex3d(6.125,4.5,5.0);
  23.                   glVertex3d(6.125,6.75,2.5);
  24.                   glVertex3d(6.125,2.25,2.5);
  25.                 glEnd();
  26.                    
  27.                 glBegin(GL_QUADS);
  28.                   glNormal3d(0.0,1.0,1.0);
  29.                   glTexCoord2d(0.0,2.0);
  30.                   glVertex3d(18.375,4.5,5.0);
  31.                   glTexCoord2d(0.0,0.0);
  32.                   glVertex3d(18.375,6.75,2.5);
  33.                   glTexCoord2d(2.0,0.0);
  34.                   glVertex3d(6.125,6.75,2.5);
  35.                   glTexCoord2d(2.0,2.0);
  36.                   glVertex3d(6.125,4.5,5.0);
  37.                 glEnd();
  38.                
  39.                 glBegin(GL_QUADS);
  40.                   glNormal3d(0.0,-1.0,1.0);
  41.                   glTexCoord2d(0.0,2.0);
  42.                   glVertex3d(18.375,4.5,5.0);
  43.                   glTexCoord2d(0.0,0.0);
  44.                   glVertex3d(6.125,4.5,5.0);
  45.                   glTexCoord2d(2.0,0.0);
  46.                   glVertex3d(6.125,2.25,2.5);
  47.                   glTexCoord2d(2.0,2.0);
  48.                   glVertex3d(18.375,2.25,2.5);
  49.                 glEnd();
  50.                glPopMatrix();
  51.              glDisable(GL_TEXTURE_2D);
  52.              glEndList();
  53.  
  54.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 07:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
mistirios hat geschrieben:
leider programmiere ich das nicht in Delphi. Sondern in C.

Das spielt doch keine Rolle. Welche OpenGL Befehle wann und wo aufgerufen werden / werden müssen ist doch Sache von OpenGL und das ändert sich doch nicht ob es nun von Pascal oder von C aufgerufen wird. Kar kannst du dann keine Codes eins zu eins übernehmen aber das sollte man sowieso nie. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 10:52 
Offline
DGL Member

Registriert: Mi Nov 08, 2006 17:35
Beiträge: 31
Okay vielen Dank hat jetzt geklapt :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 11:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo mistirios,

ich mache es immer so, dass ich alle initialen OpenGL-Zustände, das Laden von Texturen und das Erstellen von Display-Listen in einer init()-Methode zusammenfasse.
Dann hat man eine schöne übersichtliche main()-Methode ;)

Bei mir würde es so aussehen :

Code:
  1. GLuint texture;
  2.  
  3. void main(int argc, char** argv)
  4. {
  5.     ilInit();
  6.     iluInit();
  7.     ilutRenderer(ILUT_OPENGL);
  8.     glutInit(&argc,argv);
  9.     glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
  10.     glutInitWindowSize(500,500);
  11.     glutInitWindowPosition(100,0);
  12.     glutCreateWindow();
  13.     glutDisplayFunc(display);
  14.     glutReshapeFunc(reshape);
  15.     glutKeyboardFunc(keyboard);
  16.     glutMouseFunc(mouse);
  17.     glutPassiveMotionFunc(mouseMovement);
  18.    
  19.     init();
  20.    
  21.     glutMainLoop();
  22.  
  23. }// end main


Code:
  1. void init (void) {
  2.     //Texture laden
  3.     texture=ilutGLLoadImage("TM.bmp");
  4.        
  5.     //Display-Liste erstellen  
  6.     glNewList(BMIT,GL_COMPILE);
  7.         glColor3d(1.0,1.0,1.0);
  8.         glEnable(GL_TEXTURE_2D);
  9.         glBindTexture(GL_TEXTURE_2D,texture);
  10.         glPushMatrix();
  11.             glBegin(GL_TRIANGLES);
  12.                 glNormal3d(1.0,0.0,0.0);
  13.                 glVertex3d(18.375,4.5,5.0);
  14.                 glVertex3d(18.375,2.25,2.5);
  15.                 glVertex3d(18.375,6.75,2.5);
  16.          
  17.                 glNormal3d(-1.0,0.0,0.0);
  18.                 glVertex3d(6.125,4.5,5.0);
  19.                 glVertex3d(6.125,6.75,2.5);
  20.                 glVertex3d(6.125,2.25,2.5);
  21.             glEnd();
  22.              
  23.             glBegin(GL_QUADS);
  24.                 glNormal3d(0.0,1.0,1.0);
  25.                 glTexCoord2d(0.0,2.0);
  26.                 glVertex3d(18.375,4.5,5.0);
  27.                 glTexCoord2d(0.0,0.0);
  28.                 glVertex3d(18.375,6.75,2.5);
  29.                 glTexCoord2d(2.0,0.0);
  30.                 glVertex3d(6.125,6.75,2.5);
  31.                 glTexCoord2d(2.0,2.0);
  32.                 glVertex3d(6.125,4.5,5.0);
  33.             glEnd();
  34.        
  35.             glBegin(GL_QUADS);
  36.                 glNormal3d(0.0,-1.0,1.0);
  37.                 glTexCoord2d(0.0,2.0);
  38.                 glVertex3d(18.375,4.5,5.0);
  39.                 glTexCoord2d(0.0,0.0);
  40.                 glVertex3d(6.125,4.5,5.0);
  41.                 glTexCoord2d(2.0,0.0);
  42.                 glVertex3d(6.125,2.25,2.5);
  43.                 glTexCoord2d(2.0,2.0);
  44.                 glVertex3d(18.375,2.25,2.5);
  45.             glEnd();
  46.         glPopMatrix();
  47.  
  48.         glDisable(GL_TEXTURE_2D);
  49.     glEndList();    
  50.  
  51.     //initiale OpenGL-Zustände setzen
  52.     glClearColor(0.0, 0.0, 0.0, 1.0);
  53.     glClearDepth(1.0);
  54.     glEnable (GL_DEPTH_TEST); //enable the depth testing
  55.     glEnable (GL_LIGHTING); //enable the lighting
  56.     glEnable (GL_LIGHT0); //enable LIGHT0, our Diffuse Light
  57.     glShadeModel (GL_SMOOTH);
  58.     glEnable(GL_COLOR_MATERIAL);
  59. }


Code:
  1. void display( void )
  2. {
  3.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  4.     glMatrixMode(GL_MODELVIEW);
  5.     glLoadIdentity();
  6.     gluLookAt ..........
  7.    
  8.    ........
  9.     camera();
  10.    
  11.     //Display-Liste aufrufen
  12.     glCallList(BMIT);
  13.    
  14. }


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 11:10 
Offline
DGL Member

Registriert: Mi Nov 08, 2006 17:35
Beiträge: 31
Hi,

das mit den Listen in einer Funktion ablegen habe ich auch schon probiert. Und dann nur noch glCallList(..). Aber kann das sein das das nicht funktioniert?

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 11:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Du musst dann natürlich alle wichtigen Variablen außerhalb deklarieren. Also bei der Erstellung der Texturen bekommst du eine ID mit der du auf die Textur zugreifen kannst. Genauso auch bei dem Befehl glGenLists. Den ich im Übrigen bei dir im Code nicht entdecken kann. Um dann später noch auf die Textur bzw die Liste zugreifen zu können benötigst du dann die ID. Deswegen solche Sachen so abspeichern, dass du später immer noch darauf zugreifen kannst. In deinem Falle genügen globale Variablen.

Code:
  1. GLuint texture;
  2. GLuint BMIT;
  3.  
  4. void init (void) {
  5.   // Texture laden
  6.   texture=ilutGLLoadImage("TM.bmp");
  7.      
  8.   // Display-Liste erstellen  
  9.   BMIT = glGenLists(1);
  10.  
  11.   glNewList(BMIT, GL_COMPILE);
  12.  
  13.   ...
  14. }

Und dann solltest das auch mit den Listen klappen.


Für Später solltest du dir auch mal glDeleteLists und glDeleteTextures anschauen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 11:44 
Offline
DGL Member

Registriert: Mi Nov 08, 2006 17:35
Beiträge: 31
Hiho,

ich sehe ich muss noch viel lernen ;-). Danke nochmal für eure Bemühungen.Lese mich mal durch.

mfg
mistirios


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 15:35 
Offline
DGL Member

Registriert: Mi Nov 08, 2006 17:35
Beiträge: 31
Hi,

habe mal ne frage. Die ilutGLLoadImage() Funktion lädt die die Texture vorher in den Arbeitsspeicher oder wird die direkt übergeben?


mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 16:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Die Textur muss sich mindestens einmal kurz im Arbeitsspeicher befinden. Das ist so von OpenGL mehr oder weniger vorrausgesetzt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 20, 2006 16:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hi,

ich würd sagen, ilutGLLoadImage lädt zuerst das Texturbild in den Arbeitsspeicher.
Danach wird ein Texturobjekt erzeugt und die Texturdaten in den Speicher der Grafikkarte kopiert.
Zum Schluss wird das Bild im Arbeitsspeicher wieder freigegeben (auf der Grafikkarte existiert es dann aber noch).

Viele Grüße
dj3hut1


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


Wer ist online?

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