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

Aktuelle Zeit: Fr Jul 18, 2025 12:25

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glDrawArray()
BeitragVerfasst: Do Okt 06, 2005 18:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Hallo,
ich hab mal eine kleine Frage zu der ich im Forum keine Antwort fand. Ich habe eine geordnete Punktmenge und würde diese gern mit glDrawArray ausgeben. Wenn ich als Mode GL_TRIANGLES wähle sieht mein Objekt aber nicht so aus wie ich mir das vorstelle. Mit GL_POINTS sind die Konturen deutlich und richtig zu erkennen. Jetzt meine Frage in welcher Reihenfolge müssen die Punkte im VertexArray liegen um eine vernünftige Optik mit GL_TRIANGLES zu erzielen?
Meine Absicht ist es, die Oberfläche eines Volumen zu Rendern, die Abstände zwischen den Vertizes sind immer gleich. Die Reihenfolge der Vertizes verläuft nach der ScanConvention (Scheibchenweise).

Ich hoffe jemand kann helfen. cu


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 06, 2005 21:32 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nun...ich denke die Reihenfolge wird die selbe sein wie bei glBegin(GL_TRIANGLES). siehe hier: http://wiki.delphigl.com/index.php/GlBegin

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 06, 2005 21:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Also die Oberfläche mußt du dann schon selber zusammenbauen und die Punkte für die Dreiecke in die richtige Reihenfolge bringen. Bei GL_TRIANGLES werden immer drei aufeinanderfolgende Punkte für ein Dreieck genommen, was bei deiner scheibenweisen Anordnung natürlich nicht funktioniert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: ok ok
BeitragVerfasst: Fr Okt 07, 2005 12:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Ok, so hatte ich mir das schon fast gedacht. Kennt vielleicht einer von euch einen schnellen Algorithmus der Punktmengen trianguliert.?
Wie gesagt die Punktmenge des Objekts liegt scheibchenweise vor (Scan Convention).
Eine Möglichkeit wäre zu jedem Punkt zwei weitere zu Speichern die dann ein Dreieck aufspannen. Doch da die Punkte ein homogenes Netz im Raum bilden würden viele Punkte doppelt gespeichert und der Vertexarray würde unnötig groß. Da aber die Performanz meiner Anwendung nicht in die Knie gehen soll ist das eine schlechte Option. Also falls jemand einen Trangulierungsalgorithmus für beliebige Punktmengen kennt wärs Nett den Ablauf hier preiszugeben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 07, 2005 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Wenn du Punkte nicht doppelt speichern möchtest, dann kann man auch glDrawElements benutzen. Dort gibt man dann eine Liste von Indices in das Punkte Array an. Auch dabei werden die Dreiecke dann aus den Punkten dreier aufeinander folgender Indices zusammengesetzt, aber es kostet zumindest weniger Speicher und ist auch schneller.
Es wird jetzt also nur diese Index-Liste benötigt, um anzugeben aus welchen Punkten die Dreiecke dann bestehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 08, 2005 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 03, 2003 18:38
Beiträge: 33
Hallo,
ja besten dank hab das nun mit glDrawElements realisiert.
den Vertex Array und den Index Array erhalte ich mit Hilfe des MarchingCubes Algorithmus. Ist eine sehr gute Methode um aus Volumendaten Isooberflächen zu erstellen. Dabei wir jedes Volumenelement seperat Trianguliert. Literatur zu der Sache gibt es wie Sand am Meer.

Eine andere Frage brennt mir aber noch auf den Nägeln. Der folgende Code soll also eine Isooberfläche zeichnen.
Code:
  1.  
  2. void CIsoSurface::Draw()
  3. {
  4.     glDisable(GL_LIGHTING);
  5.     glEnableClientState(GL_VERTEX_ARRAY);                           // Vertex Feld einschalten
  6.     glEnableClientState(GL_NORMAL_ARRAY);                              // Normalen Feld einschalten    
  7.     glEnableClientState(GL_COLOR_ARRAY);                            // Farb Feld einschalten
  8.  
  9.     glVertexPointer(3, GL_FLOAT, 0, m_ppt3dVertices);                     // Zeiger auf Vertexdaten richten
  10.     glNormalPointer(GL_FLOAT, 0,  m_pvec3dNormals);                    // Zeiger auf Normalendaten richten
  11.     glColorPointer(4, GL_FLOAT, 0, m_ptempColors);                       // Zeiger auf Farb -Daten richten
  12.  
  13.     glDrawElements(GL_TRIANGLES, m_nTriangles*3, GL_UNSIGNED_INT, m_piTriangleIndices);
  14.    
  15.     glDisableClientState(GL_COLOR_ARRAY);
  16.     glDisableClientState(GL_NORMAL_ARRAY);
  17.     glDisableClientState(GL_VERTEX_ARRAY);
  18.        
  19.     glEnable(GL_LIGHTING);
  20. }
  21.  


das Funktioniert auch soweit. Was ich aber nicht verstehe ist, warum muss ich das Licht ausschalten um die Oberfläache farbig zu bekommen.?
Eigentlich soll die Oberfläche den Anschein eines durchsichtigen farbigen Gels haben. Falls jemand von euch schon mal so ein Gel erzeugt hat wär ich dankbar über einen Rat.

So denn Leute rockt schön weiter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 08, 2005 18:37 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Wenn du Licht einschaltest, dann verwendet er für die Berechnung der Farbe die Enstellung für Diffuse und Specular, usw. Da gabs aber so nen Trick. Ich glaube glEnable(GL_COLOR_MATERIAL); dann übernimmt er automatisch die in glColor3f angegebenen Farben.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 08, 2005 22:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
In deinem Fall mit dem Glas musst du die Flächen noch nach entfernung sortiert rendern (größte entfernung zuerst), bei aktiviertem Blending. Das mit GL_COLOR_MATERIAL stimmt.

Steht auch im Wiki ;) :http://wiki.delphigl.com/index.php/GlLight#Hinweise

_________________
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  [ 8 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.008s | 15 Queries | GZIP : On ]