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

Aktuelle Zeit: Fr Jul 04, 2025 14:38

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Okt 27, 2008 15:27 
Offline
DGL Member

Registriert: Sa Dez 30, 2006 17:01
Beiträge: 22
Wohnort: NRW/Fröndenberg
Hi!
Hab länger nichts mehr mit OpenGL gemacht und habe nun ein relativ einfaches Problem mit 2D Dreiecken in OpenGL. Ist zwar in C++ geschrieben, aber OpenGL ändert sich da ja kaum:
Code:
  1.  
  2. void Render() {
  3.     glClearColor(255, 255, 255, 0);
  4.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  5.  
  6.     glMatrixMode(GL_PROJECTION);
  7.     glLoadIdentity();
  8.     glViewport(0,0,GetWidth(),GetHeight()); //Height/Width ist Größe des Fensters
  9.     glOrtho(0,GetWidth(),0,GetHeight(),0,1);
  10.  
  11.     for (int i = 0; i <= 10; ++i) triangles[i].Draw(); //triangles ist ein array aus Objekten von meinen Dreiecken (Position mit Sicherheit verschieden)
  12.  
  13.     glFlush();
  14.     SwapBuffers();
  15. }
  16.  
  17. void Triangle2D::Draw() const {
  18.     glColor3d(255,0,0);
  19.     glTranslated(xKoord, yKoord, 0);
  20.     glRotated(45, 0,0,1);
  21.     glScaled(size,size,0);
  22.  
  23.     glBegin(GL_TRIANGLES);
  24.         glVertex2d(-1,-1);
  25.         glVertex2d(2,0);
  26.         glVertex2d(-1,1);
  27.     glEnd();
  28. }


Problem: Ich sehe immer nur ein Dreieck! Array wird korrekt gefüllt und OpenGL sieht für mich nun auch nicht falsch aus...
[/code]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 27, 2008 16:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hallo.

Du befindest dich beim Zeichnen in der Projektionsmatrix. Das sollte aber normal die ModelviewMarix sein.
Code:
  1.   glViewport(0,0,GetWidth(),GetHeight()); //Height/Width ist Größe des Fensters
  2.   glOrtho(0,GetWidth(),0,GetHeight(),0,1);
  3.  
  4.   glMatrixMode(GL_MODELVIEW);
  5.   glLoadIdentity();
  6.  
  7.   // zeichnen


Und beim Zeichnen der Dreiecke setzt du jedes Mal die Skalierung, Rotation und Transformation. ABER die vorherigen Werte sind noch erhalten und werden mit den Neuen verrechnet. Besonders dürften dort glTranslate und glScale ins Gewicht fallen. Was du dort machen könntest wäre ein sichern/wiederherstellen der Matrix. glPushMatrix sichert sie und glPopMatrix stellt sie wieder her. Allerdings für ein einzelnes Dreieck solch einen Aufwand zu betreiben finde ich persönlich doch zu extrem. Da wäre es vermutlich besser, wenn du die Dreieckspunkte vorher berechnest und dann beim Zeichnen nur noch diese übergibst. Evtl gibt es da aber auch noch andere Lösung. Dazu müsstest du uns aber genau sagen was du machen willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 27, 2008 17:01 
Offline
DGL Member

Registriert: Sa Dez 30, 2006 17:01
Beiträge: 22
Wohnort: NRW/Fröndenberg
Hi!
Danke erstmal, Fehler gefunden und ausgemerzt ;)

Mit speichern/zurücksichern ist wirklich etwas rechenintensiv, gerade wenn ich mal mehr als 10 Dreieck ( > 50) haben werde. Also zum Programm ist eigentlich nicht viel weiter zu sagen, in der Render() Funktion werden alle Dreiecke gezeichnet und in meiner main-Funktion quasi bewegt. Also so:
- Erschaffe Dreiecke // Konstruktor
- Für jedes Dreieck: Dreieck.Bewege() // main-Loop
- Render() // von main-Loop gerufen
- Für jedes Dreieck: Dreieck.Zeichne()

Man könnte sich hier den einen Durchlauf sparen, aber das fällt ja jetzt erstmal kaum ins Gewicht.

Edit: Habe mal einen neuen Thread dazu aufgemacht, weil ich dachte, dass das Thema nicht mehr so ganz zur Überschrift passt (viewtopic.php?p=66304)


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 » Einsteiger-Fragen


Wer ist online?

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