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

Aktuelle Zeit: Fr Jul 18, 2025 00:04

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Dez 26, 2005 23:58 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Ich bin grad dabei Astroids nachzubauen...

Hab da ein Quad auf welches das Schiff gezeichent ist. Wenn ich das jetzt kompiliert, geht es alles wunderbar (2% Auslastung).
Wenn ich jetzt noch ein zweites Quad dazunehm, wo ich einen Asteroiden draufzeichne, ruckelt alles wie blöd und ich hab 50-60 % Systemauslastung...


Ich lade die Bilder schon im OnCreate - Teil, das ist es nicht.



Die Bilder lad ich so ein
Code:
  1. /////////////////
  2.   //Spielerschiff//
  3.   /////////////////
  4.  
  5.   glBindTexture(GL_TEXTURE_2D, main.ship_player);
  6.  
  7.  
  8.   glPushMatrix;
  9.   glTranslatef(1, -5, -5);
  10.  
  11.     //Bewegungen möglich machen
  12.     glTranslatef(main.move_left_and_right, main.move_up_and_down, -5);
  13.  
  14.     glBegin(GL_QUADS);
  15.        glTexCoord2f(0,1);  glVertex3f(0, 0, 0);
  16.        glTexCoord2f(1,1);  glVertex3f(1, 0, 0);
  17.        glTexCoord2f(1,0);  glVertex3f(1, 1, 0);
  18.        glTexCoord2f(0,0);  glVertex3f(0, 1, 0);
  19.     glEnd;
  20.   glPopMatrix;



Die Bilder sind jetzt auch nicht von berauchschender Qualität, das kanns nicht sein.
Kann mir jemand sagen woran das liegt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 00:11 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also das was du gepostet hast sieht absolut unproblematisch aus. Der Fehler muss an anderer Stelle sein. Poste mal bitte deinen kompletten Zeichencode (ohne zu wissen wie viel das jetzt wird). Baust du das Asteroids nach was hier auf der Site vorgestellt wurde, oder komplett neu?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 00:17 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
ich bastel mir das komplett neu....

Okay, hier ist mein Render-Funktion:

Code:
  1. //Rendervorgang
  2. procedure Tmain.Render;
  3. begin
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.  
  6.   glMatrixMode(GL_PROJECTION);
  7.   glLoadIdentity;
  8.   //glViewport(0,0,ClientWidth,ClientHeight);
  9.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  10.    //glOrtho(0,640,0,480, 0,128);
  11.  
  12.  
  13.   glTranslatef(0, 0, -5);
  14.  
  15.   glMatrixMode(GL_MODELVIEW);
  16.   glLoadIdentity;
  17.   glEnable(GL_TEXTURE_2D);
  18.  
  19.  
  20.  
  21.   /////////////////
  22.   //Spielerschiff//
  23.   /////////////////
  24.  
  25.   glBindTexture(GL_TEXTURE_2D, main.ship_player);
  26.  
  27.  
  28.   glPushMatrix;
  29.   glTranslatef(1, -5, -5);
  30.  
  31.     //Bewegungen möglich machen
  32.     glTranslatef(main.move_left_and_right, main.move_up_and_down, -5);
  33.  
  34.     glBegin(GL_QUADS);
  35.        glTexCoord2f(0,1);  glVertex3f(0, 0, 0);
  36.        glTexCoord2f(1,1);  glVertex3f(1, 0, 0);
  37.        glTexCoord2f(1,0);  glVertex3f(1, 1, 0);
  38.        glTexCoord2f(0,0);  glVertex3f(0, 1, 0);
  39.     glEnd;
  40.   glPopMatrix;
  41.  
  42.  
  43.  
  44. //Einen Asteroiden anzeigen
  45. glBindTexture(GL_TEXTURE_2D, main.asteroiden1);
  46.  
  47.  
  48.   glPushMatrix;
  49.   glTranslatef(1, 2, -5);
  50.  
  51.  
  52.     glBegin(GL_QUADS);
  53.        glTexCoord2f(0,1);  glVertex3f(0, 0, 0);
  54.        glTexCoord2f(1,1);  glVertex3f(1, 0, 0);
  55.        glTexCoord2f(1,0);  glVertex3f(1, 1, 0);
  56.        glTexCoord2f(0,0);  glVertex3f(0, 1, 0);
  57.     glEnd;
  58.   glPopMatrix;
  59.  
  60.  
  61.  
  62.  
  63.  
  64. glDisable(GL_TEXTURE_2D);
  65. SwapBuffers(DC);
  66.  
  67.  
  68.  
  69. end;




Mache ich vielleicht bei der Zuweisung etwas falsch?

Zuweisung der Asteroiden Bilds:
Code:
  1.  
  2. tex := IMG_Load('bilder/header2.jpg');
  3.   if assigned(tex) then
  4.   begin
  5.     glGenTextures(1, @asteroiden1);
  6.     glBindTexture(GL_TEXTURE_2D, asteroiden1);
  7.  
  8.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  9.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  10.  
  11.     // Achtung! Einige Bildformate erwarten statt GL_RGB, GL_BGR. Diese Konstante fehlt in den Standard-Headern
  12.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  13.  
  14.     SDL_FreeSurface(tex);
  15.   end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 00:43 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wieso benutzt du nicht direkt die glBitmap.pas? Der Code stammt da jedenfalls her, soweit ich das sehe. Da bist du jedenfalls auf der sicheren Seite. Eigentlich sieht der Code ziemlich normal aus.

Um was für ne GraKa handelt es sich denn hier? Eventuell hatt die nicht genug Speicher für 2 Texturen und lagert eine im HS aus. (Unwahrscheinlich. Aber z.B. bei OnBoard-Chips hat man es mit Konstant niedrigen Frames zu tun)

Eventuell läuft es ja nur bei dir langsam. Du kannst ja mal ne TestExe zippen und hier hochladen. Dann könnens mal paar testen. Aber sag erstmal was du für ne GraKa hast.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 09:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich habe mal dein Code durch Pascal-tags ersetzt. Das kann man besser erkennen.

Flash: Der Code is das nötigste was man tun muss. Und der ist mit Sicherheit nicht aus der glBitmap. Eher aus irgendeinen SDL Sample.

Also ich würde mal sagen, dass dein OpenGL irgendwelche Schmerzen hat. Das ist das typische Schaubild. Die FPS sackt in den Keller oder die CPU-Last steigt. Überprüfe mal ob du beim Rendern irgendwelche Fehler gemacht hast.

Code:
  1. procedure Tmain.Render;
  2. var
  3.   Error: Cardinal;
  4. begin
  5.   // Rendern
  6.  
  7.   Error := glGetError;
  8.   if Error <> 0 then
  9.     Caption := gluErrorString(Error);
  10.  
  11.   SwapBuffer
  12. end;


Außerdem wäre noch interessant wo du renderst. Was und wie wissen wir ja derzeit. Aber es kann mitunter auch sein, dass das so eine komische Windowsgeschichte. Oder, dass du da evtl auch nur nicht auf alles geachtet hast und du so zwielichtige Seiteneffekte hast die sich erst bei 2 Quads richtig bemerkbar machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 11:15 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Du kannst sogar mit keinem Quad 100 Prozent Systemauslastung haben, es kommt darauf an wie deine schleife aussieht.

Code:
  1.  
  2. while (ExitMessage = false) do Render;
  3.  

Ist ein Typisches Beispiel wie du 100 Prozent auslastung bekommen kannst.

Mit einem Timer kannst du das Steuern, oder wenn du einfach die Vert. Sync abwartest( Das führt allerdings zu einem Eckelhaften Spielgefühl! )

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 12:07 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Okay, erst mal danke für eure schnelle antworten....




Zitat:
Außerdem wäre noch interessant wo du renderst.


Ich render auf einem Panel.... Ist das etwa nicht so günstig?


Zitat:
Wieso benutzt du nicht direkt die glBitmap.pas? Der Code stammt da jedenfalls her, soweit ich das sehe. Da bist du jedenfalls auf der sicheren Seite. Eigentlich sieht der Code ziemlich normal aus.


Hab ich auch zuerst benutzt... Da kam aber jedenfalls dauernd die Meldung: Can't use the power of two. Oder so ähnlich..
Da bin ich auf SDL umgestiegen



Zitat:
Eventuell läuft es ja nur bei dir langsam. Du kannst ja mal ne TestExe zippen und hier hochladen. Dann könnens mal paar testen. Aber sag erstmal was du für ne GraKa hast.


RADEON 9600 SERIES mit 128 MB Speicher... Sollte eigentlich langen...

Project: http://rapidshare.de/files/9897606/2D-Shooter.rar.html


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 12:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
100% Auslastung bedeuten doch nur das dein Programm die gesamte zur Verfügung stehenden Rechenzeit belegt. Aber man kann doch trotzdem genauso weiterarbeiten wie vorher. Wenn dann andere Programme mehr benötigen bleibt dann für dein Programm weniger. Das ist völlig in Ordnung und kein gutes Maß für die tatsächlich verwendete Leistung. Sinnvoller ist es die Zeit zu messen die pro Frame benötigt wird.
Ob Panel oder normales Fenster ist egal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 12:27 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Ja schon, das Problem ist nur, es ruckelt wie blöd...... was eigentlich bei nur zwei texturen nicht sein sollte, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 13:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
100% Last sind ja nichts schlimmes. Aber dann hat man IMMER 100%. Also auch, wenn gar nichts gerendet wird. Aber das ist hier ja nicht der Fall. Die Anwendung frisst ja anscheinend nur ein bisschen (zu Begin 2%) und bei einem zusätzlichen Quad dann außergewöhnlich viel mehr und ruckelt.

Schlagt mich (virtuell), wenn ich das falsch verstanden habe. ;-)

glBitmap und Fehlermeldung: Hmm. Ich kenne die Unit ein bisschen und wenn die moppert, dann hat es meist auch einen triftigen Grund (hoffe ich). Kann es sein, dass die Meldung in etwas so lautet? "TglBitmap2D.GenTexture - Rendercontex dosn't support non power of two texture." Wenn ja (und darauf tippe ich mal), dann ist deine Texturgröße keine Potenz von 2. In der aktuellen Version der glBitmap wird OpenGL 2.0 noch nicht unterstützt. Außerdem bräuchtest du dann auch einen recht aktuellen ATI Treiber um solche Texturen benutzen zu können.

Ich könnte mir gut vorstellen, dass sich OpenGL an deiner Textur verschluckt. Speziell wenn diese nicht vollständig erzeugt wurde.
Versuche es doch mal ohne das Binden der zweiten Textur? Und überprüfe mal ob OpenGL dir einen Fehler zurückgibt. Code war oben.

[edit] Aber Lars hat schon recht du solltest auf jeden Fall die Zeit zum Rendern messen und diese als Maß benutzen. Das ist wesentlich sicherere um feststellen zu können ob es langsamer läuft oder nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 13:40 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Lossy eX hat geschrieben:
glBitmap und Fehlermeldung: Hmm. Ich kenne die Unit ein bisschen und wenn die moppert, dann hat es meist auch einen triftigen Grund (hoffe ich). Kann es sein, dass die Meldung in etwas so lautet? "TglBitmap2D.GenTexture - Rendercontex dosn't support non power of two texture." Wenn ja (und darauf tippe ich mal), dann ist deine Texturgröße keine Potenz von 2. In der aktuellen Version der glBitmap wird OpenGL 2.0 noch nicht unterstützt. Außerdem bräuchtest du dann auch einen recht aktuellen ATI Treiber um solche Texturen benutzen zu können.



Stimmt, das war die Fehlermeldung. Ich wandel mal die Bilder in ein Format um das 2^n*2^n enspricht, und schau obs geht

Edit:\\ Okay, es ist warscheinlich, das es am falschen Format liegt, weil ich bin jetzt an einem etwas älteren PC und dort zeigt er mir überhaupt keine Texturen mehr an, sondern nur weiße Quadrate :P
Ich glaube das es daran liegt

Lossy eX hat geschrieben:
Ich könnte mir gut vorstellen, dass sich OpenGL an deiner Textur verschluckt. Speziell wenn diese nicht vollständig erzeugt wurde.
Versuche es doch mal ohne das Binden der zweiten Textur? Und überprüfe mal ob OpenGL dir einen Fehler zurückgibt. Code war oben.


Also, OpenGl gibt keine Fehlermeldung zurück.
Wie meinst, ich soll das mal ohne Binden der 2.Textur probieren? Versteh grad net ganz was ich probieren soll..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 13:43 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Na du bindest doch die zweite Textur, oder etwa nicht? O_o
Code:
  1. Textur1.Bind;
  2. Draw_Quad;
  3. glTranslatef(2, 0, 0);
  4. Textur2.Bind;
  5. Draw_Quad;

Kommentier das Textur2.Bind; einfach mal aus ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 13:57 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Ach so :D

Das hab ich auch schon probiert, sieht dann so aus, das ich statt meinen Asteroiden mein Raumschiff in Groß habe und es trotzdem ruckelt, genauso wie als wenn ich den asteroiden einlad.

Ich probier jetzt mal die Bilder in das passende Format zu bringen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 14:08 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
DANKE GOTT, es geht...


Hab einfach die Bilder als Potenz von 2 abgespeichert und jetzt geht alles wunderbar.


Vielen Danke für eure Hilfe. :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 27, 2005 15:40 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Siehste. Die glBitmap is gar net so doof. Wenn die mosert hats Gründe. ;)

Hatte auch mal das Problem mit den weißen Quads. War haar genau das selbe. Aber schön, dass dir geholfen ist. :)

_________________
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  [ 15 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.015s | 16 Queries | GZIP : On ]