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

Aktuelle Zeit: Fr Jul 18, 2025 12:27

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Verzerrtes Polygon...
BeitragVerfasst: Fr Feb 22, 2008 23:17 
Offline
DGL Member

Registriert: Fr Feb 22, 2008 18:00
Beiträge: 10
Ich versuche jetzt schon seit mindestens einer Stunde verzweifelt ein einfaches 5-Eck auf den Bildschirm zu kriegen: es ist immer verzerrt:

meine Render routine:
Code:
  1.  
  2. procedure TForm1.Render;
  3. begin
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.  
  6.   glMatrixMode(GL_PROJECTION);
  7.   glLoadIdentity;
  8.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  9.  
  10.   glMatrixMode(GL_MODELVIEW);
  11.   glLoadIdentity;
  12.  
  13.   glTranslatef(0, 0, -5);
  14.  
  15.   glBegin(GL_POLYGON);
  16.     glColor3f(0.9,0.9,0.9);
  17.     glVertex3f(-2,  1.8, 0);
  18.     glVertex3f( 2,  1.8, 0);
  19.     glVertex3f( 2,    0, 0);
  20.     glVertex3f( 0,  1.7, 0);  //Hier ist das Problem...
  21.     glVertex3f(-2,    0, 0);
  22.   glEnd;
  23.  
  24.   SwapBuffers(DC);
  25. end;
  26.  


Das sollte meiner Meinung nach ein Polygon folgender Form zeichnen:
Bild
Ich kriege aber das: (Verzerrt?)
Bild

Bei
Code:
  1. glVertex3f( 0,  1.7, 0);
als 4. Punkt siehts wie erwartet aus, aber alles andere macht totalen Müll!!

Wenn man jetzt diesen Y-Wert ändert (per Tastendruck etc.) dann sieht man das es von -1 is 1 reibungslos funktioniert, aber ab 1 und größer totalen Käse macht.

Kann mir jemand helfen??

lG Green


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 23, 2008 01:34 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Das Polygon ist nicht konvex. Du müsstest es in 2 konvexe Teilstücke teilen.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 23, 2008 09:43 
Offline
DGL Member
Benutzeravatar

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

OpenGL versucht dein Polygon in Dreiecke zu tesselieren.
Sieht aus, als hätte OpenGL dein Polygon aus den Dreiecken
((-2, 1.8, 0), ( 2, 1.8, 0), ( 2, 0, 0)) und (( 0, 1.7, 0), (-2, 0, 0), (-2, 1.8, 0))
zusammengesetzt.
Da dein Polygon nicht konvex ist, geht das dann natürlich schief (im wahrsten Sinne des Wortes).
In solch einem Fall muss man probieren, sein Polygon selbst in Dreiecke zu zerlegen :

Probier mal

Code:
  1.  
  2. glBegin(GL_TRIANGLE_STRIP);
  3. glColor3f(0.9,0.9,0.9);
  4. glVertex3f(-2, 0, 0);
  5. glVertex3f(-2, 1.8, 0);
  6. glVertex3f( 0, 1.7, 0);
  7. glVertex3f( 2, 1.8, 0);
  8. glVertex3f( 2, 0, 0);
  9. glEnd;
  10.  


Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 23, 2008 11:07 
Offline
DGL Member

Registriert: Fr Feb 22, 2008 18:00
Beiträge: 10
Danke für die antworten,

aber was heisst Konvex?
Das Problem ist das das ganze Dynamisch passieren soll und daher schwierig ist selbst zu zerlegen. Würden Quads denn theoretisch auch gehen? also in dem Fall in 2 Quads?

lg Green


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 23, 2008 11:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Green hat geschrieben:
aber was heisst Konvex?


konvexe und konkave Polygone :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 23, 2008 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Im glu-Abteil gibt es Funktionen zur Tesselierung. Das könnte dir da helfen.

Edit: das würde dann zB so aussehen (C++ Code)
Der Code da kann auch Polygone mit Löchern darstellen

In der Header-Datei:

Code:
  1. //Grenz-Eckpunkte
  2. VertexVector m_borderVertices;
  3.  
  4. //Loops für die Löcher
  5. std::vector<VertexVector> m_holes;


Vertexvector ist einfach ein dynamisches Feld was dVertexe enthält (x,y,z-Punkte mit Datentyp double)


cpp-Datei:

Code:
  1. void CPolygon::drawTesselation() const
  2. {
  3.     typedef void (__stdcall *TessFn)();
  4.  
  5.     if (m_id)
  6.     {
  7.         glCallList(m_id);
  8.         return;
  9.     }
  10.  
  11.     m_id = glGenLists(1);
  12.     glNewList(m_id,GL_COMPILE);
  13.     //Tess-Objekt anlegen und Callbacks setzen
  14.     GLUtesselator* pTess = gluNewTess();
  15.     gluTessCallback(pTess,GLU_TESS_BEGIN,reinterpret_cast<TessFn>(glBegin));
  16.     gluTessCallback(pTess,GLU_TESS_END,glEnd);
  17.     gluTessCallback(pTess,GLU_TESS_VERTEX,reinterpret_cast<TessFn>(glVertex3dv));
  18.  
  19.     //
  20.     gluTessBeginPolygon(pTess,0);
  21.  
  22.     //Rand
  23.     gluTessBeginContour(pTess);
  24.     for(unsigned int i = 0;i < m_borderVertices.size();++i)
  25.     {
  26.         gluTessVertex(pTess,
  27.                       const_cast<double*>(&m_borderVertices[i].x),
  28.                       const_cast<double*>(&m_borderVertices[i].x));
  29.     }
  30.     gluTessEndContour(pTess);
  31.  
  32.     //Löcher
  33.     for(unsigned int i = 0;i < m_holes.size();++i)
  34.     {
  35.         gluTessBeginContour(pTess);
  36.         for(unsigned int j = 0;j < m_holes[i].size();++j)
  37.         {
  38.             gluTessVertex(pTess,
  39.                           const_cast<double*>(&m_holes[i][j].x),
  40.                           const_cast<double*>(&m_holes[i][j].x));
  41.         }
  42.         gluTessEndContour(pTess);
  43.     }
  44.  
  45.     gluTessEndPolygon(pTess);
  46.  
  47.     gluDeleteTess(pTess);
  48.  
  49.     glEndList();
  50. }


Du bräuchtest nur die erste Schleife über alle deine Punkte. Das mit den Löchern kann dir egal sein, bin jetzt nur zu faul das anzupassen ;)

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 25, 2008 11:18 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Is jetzt nur ein Schuß ins Blaue, aber die Vertexe (nein, nicht Vertices, siehe www.duden.de) sind im Uhrzeigersinn angegeben. Vielleicht hängt er sich bei der Tesselierung daran auf. Versuch mal das Poly andersrum anzugeben.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 25, 2008 11:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Sidorion hat geschrieben:
Is jetzt nur ein Schuß ins Blaue, aber die Vertexe (nein, nicht Vertices, siehe www.duden.de) sind im Uhrzeigersinn angegeben. Vielleicht hängt er sich bei der Tesselierung daran auf. Versuch mal das Poly andersrum anzugeben.


vertices, siehe http://dict.leo.org/ende?lp=ende&lang=de&searchLoc=0&cmpType=relaxed&sectHdr=on&spellToler=on&search=vertices&relink=on :lol:

@topic:
Das es an der Rückseite hängt, denke ich nicht.

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 25, 2008 12:09 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Jetzt werden wir echt OT. Im Englischen hast Du recht, da heisst es tatsächlich vertices. Da mein Satz aber 'in Deutsch' war, muss ich den deutschen Plural von Vertex und nicht den englischen nehmen. Dieser heisst (auch zu meinem Leidwesen) Vertexe, da sog. Fremdwörter der deutschen, nicht der entlehnten Grammatik unterliegen.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 25, 2008 13:01 
Offline
DGL Member

Registriert: Do Feb 21, 2008 10:49
Beiträge: 55
Wohnort: Dresden
Programmiersprache: FPC/Linux
Sidorion hat geschrieben:
Jetzt werden wir echt OT. Im Englischen hast Du recht, da heisst es tatsächlich vertices. Da mein Satz aber 'in Deutsch' war, muss ich den deutschen Plural von Vertex und nicht den englischen nehmen. Dieser heisst (auch zu meinem Leidwesen) Vertexe, da sog. Fremdwörter der deutschen, nicht der entlehnten Grammatik unterliegen.
man muss aber nicht jeden schwachsinn mitmachen....
wenn die eigene sprache schon so armselig ist, dass man gezwungen wird, wörter aus anderen sprachen zu übernehmen, dann sollte man diese nicht auch noch vergewaltigen. jedes mal, wenn ich sachen wie foto, tipp oder babys (richtig: photo, tip und babies) lese, dann geht mir die galle über. aber jetzt hören wir lieber auf damit, sonst gibts nacher noch ärger. :D

_________________
Gruß McWurscht - sorry für's Posting.

Wer mal meinen bisher erfolgreichsten Erguss in Sachen Web-Programmierung sehen will: RCV


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 26, 2008 09:32 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Schreibt einfach Eckpunkte ;)

_________________
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  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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