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

Aktuelle Zeit: Sa Jul 19, 2025 22:53

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Nov 08, 2007 16:09 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Hallo,

will das, was ich in OpenGLzeichne auch als DXF ausgeben. Nun hab ich das Problem, dass bei Polygonen eine Triangulierung notwendig ist.
Nun nutze ich in meinem Prog gluTessBeginPolygon & Co und hab mir gedacht, ich könnte einfach die Punkte im Callback rausschreiben. Nun weiß ich aber nicht, was die Punkte mir sagen sollen. Ist das ein TriangleStripe? wie komme ich an die wirklichen Dreiecke? kann mir da wer helfen???

Code:
  1.  
  2. Procedure TTriForm.MemoDblClick(Sender : TObject);
  3.  
  4. Var
  5.   CombineArray                     : Array Of TVector3D;
  6.   tess                             : PGLUTesselator;
  7.   //================================================
  8.   //Begin der CallbackFunktionen
  9.   //================================================
  10.  
  11.   Procedure tcberror(errno : TGLEnum); Stdcall;
  12.   Begin
  13.     //    Assert(False, IntToStr(errno) + ' : ' + gluErrorString(errno));
  14.   End;
  15.  
  16.   Procedure tessVertex(vertexData : Pointer); Stdcall;
  17.   Var
  18.     Punkt                          : ^TVector3D;
  19.     str                            : widestring;
  20.   Begin
  21.     {Hier wird dem Vertexpunkt, die Texturkoordiante übergeben. Die Procedure funktioniert aber nur richtig in
  22.     Verbindung mit Linietyp für Spindel, da in dem selbstdeninierten Typ, die UV-Koordianten mit beinhaltet sein
  23.     müssen, da man sonst darauf nicht zugreifen kann.}
  24.     Punkt := Vertexdata;
  25.     str := floattostrf(Punkt^[0], ffFixed, 9, 2) + ' ' + floattostrf(Punkt^[1], ffFixed, 9, 2) + ' ' +
  26.       floattostrf(Punkt^[2], ffFixed, 9, 2);
  27.     TriForm.Memo.Lines.add(str);
  28.   End;
  29.  
  30.   Procedure tessCombine(Coords : TVector3d;VertexData : TVector4p;Weight : TVector4f;Var OutData : PPointer); Stdcall;
  31.     {In dieser Procedure muss bearbeitet werden, wie bei der Tesselation mit Geradenüberschneidungen verfahren wird.
  32.       Dann sollte ein neuer Punkt erstellt werden und diesem neue Texturkoordinaten übergeben werden.}
  33.   Type
  34.     pOGLPunkt = ^TVector3D;
  35.   Var
  36.     Arrayhigh                      : integer;
  37.     Punkt1                         : pOGLPunkt;
  38.     Punkt2                         : pOGLPunkt;
  39.     Zahl                           : Real;
  40.   Begin
  41.     Arrayhigh := Length(CombineArray);
  42.     setlength(CombineArray, Arrayhigh + 1);
  43.  
  44.     CombineArray[Arrayhigh] := Coords;
  45.     OutData := @CombineArray[Arrayhigh];
  46.   End;
  47.   //================================================
  48.   //Ende CallbackFunktionen
  49.   //================================================
  50. Var
  51.   pkt                              : Array Of TVector3D;
  52.  
  53.   Procedure pktAdd(x, y : double);
  54.   Var
  55.     h                              : Integer;
  56.   Begin
  57.     h := length(pkt);
  58.     setlength(pkt, h + 1);
  59.     pkt[h, 0] := x;
  60.     pkt[h, 1] := y;
  61.     pkt[h, 2] := 0;
  62.     gluTessVertex(tess, pkt[h], @pkt[h]);
  63.   End;
  64. Begin
  65.   Memo.Lines.clear;
  66.   tess := gluNewTess;
  67.   gluTessCallback(tess, GLU_TESS_BEGIN, @glBegin);
  68.   gluTessCallback(tess, GLU_TESS_VERTEX, @tessVertex);
  69.   gluTessCallback(tess, GLU_TESS_END, @glEnd);
  70.   gluTessCallback(tess, GLU_TESS_ERROR, @tcberror);
  71.   gluTessCallback(tess, GLU_TESS_COMBINE, @tessCombine);
  72.  
  73.   gluTessBeginPolygon(tess, Nil);
  74.   gluTessBeginContour(tess);
  75.  
  76.   pktAdd(0, 0);
  77.   pktAdd(10, 0);
  78.   pktAdd(8, 5);
  79.   pktAdd(13, 5);
  80.   pktAdd(12, 0);
  81.   pktAdd(20, 0);
  82.   pktAdd(20, 20);
  83.   pktAdd(0, 20);
  84.   pktAdd(0, 10);
  85.   pktAdd(5, 12);
  86.   pktAdd(5, 7);
  87.   pktAdd(0, 8);
  88.  
  89.   gluTessEndContour(tess);
  90.   gluEndPolygon(tess);
  91.   gluDeleteTess(tess);
  92.   setlength(CombineArray, 0);
  93. End;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 08, 2007 16:48 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Ich weiß Asche auf mein Haupt, erst im Forum suchen, dann ins Forum schreiben. Hab ich zwar gemacht, aber das Passende erst nach dem Schreiben gefunden.

Es gibt schon einen Beitrag, bei dem das beantwortet wird: "OpenGL-Tesselation-Ergebnis weiterverwenden?"

sorry...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 12, 2007 12:16 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Nun kann ich als kleine Entschuldigung wenigstens mal mein Testprog zu diesem Problem posten.


Gruß

Sascha

[edit]
Habe die Anlage mal noch geändert. Hatte zweckes Speicherfreigabe vorher ein dynamisches Array in tesscombine benutzt. Das klappte nicht so wirklich, da bei setlength die Adressen der Elemente von Delphi verändert werden können.
[/edit]


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


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 » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 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 | 16 Queries | GZIP : On ]