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

Aktuelle Zeit: Di Jul 15, 2025 15:11

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Dez 11, 2006 17:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 07, 2006 01:49
Beiträge: 2
Wohnort: Rosenheim
Hallo zusammen.

Ich schreibe gerade ein kleines CAD-Programm, in dem man mehrere Linien auswählen kann,
um dann aus den Punkten der Linien ein Polygon zu erzeugen.
Das Polygon erzeuge ich über gluTessVertex(..) und das funktioniert soweit ganz gut.
Mein Problem besteht darin, dass ich das Polygon gerne texturieren würde, das aber nicht
hinbekomme.
Der auskommentierte Teil am Ende der Tesselate-Methode zeichnet einen texturierten triangle_fan
mit den gleichen Werten, die mir das gtVertex3f-Callback liefert. (Das waren ursprünglich 2 Linien,
die jeweils den Ursprung als Punkt besessen haben. Deswegen sind es vier Punkte.)
Was ich jetzt nicht verstehe warum das ganze nicht schon im gtVertex3f-Callback funktioniert
-> hier wird zwar das Polygon gezeichnet aber ohne Textur.

Kann mir jemand sagen was ich da falsch mache?

Danke schonmal im Voraus.

Gruß Mathias


Code:
  1. procedure TOGLPoly.Tesselate;
  2. var
  3.  n : integer;
  4.  GLArrayd3: TGLArrayd3;
  5.  GluObj: PGLUtesselator;
  6.  myPointList: array of TGLArrayf3;
  7.  I: Integer;
  8.  p : T3DPoint;
  9. begin
  10.   n := points.Count;
  11.   TessCount := n;
  12.   // Definition eines nicht-konvexen Objektes
  13.   SetLength(myPointList, n);
  14.   for I := 0 to n-1 do
  15.   begin
  16.     p := T3DPoint(points[i]);
  17.     myPointList[I][0] := p.X;
  18.     myPointList[I][1] := p.Y;
  19.     myPointList[I][2] := p.Z;
  20.   end;
  21.  
  22.   // links unten und rechts oben, höhe, breite berechnen
  23.   CalculateMinMax();
  24.  
  25.   // Display-List erstellen
  26.   myPolygon := glGenLists(1);
  27.   glNewList(myPolygon, GL_COMPILE);
  28.   glLoadName(_name);
  29.   // Tess-Objekt
  30.   GluObj := gluNewTess;
  31.  
  32.   //callbacks definieren
  33.   gluTessCallback(GluObj, GLU_TESS_VERTEX, @gtVertex3f);
  34.   gluTessCallback(GluObj, GLU_TESS_BEGIN, @glBegin);
  35.   gluTessCallback(GluObj, GLU_TESS_END, @glEnd);
  36.  
  37.   gluTessBeginPolygon(GluObj, nil);
  38.   gluTessBeginContour(GluObj);
  39.  
  40.   //textur vorbereiten
  41.   glMatrixMode(gl_TEXTURE);
  42.     glLoadIdentity;
  43.   glMatrixMode(gl_MODELVIEW);
  44.   glEnable(GL_TEXTURE_2D);
  45.   glBindTexture(GL_TEXTURE_2D, tex);
  46.  
  47.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  48.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  49.  
  50.   for I := 0 to length(myPointList)-1 do
  51.   begin
  52.     GLArrayd3[0] := myPointList[I][0];
  53.     GLArrayd3[1] := myPointList[I][1];
  54.     GLArrayd3[2] := myPointList[I][2];
  55.  
  56.     gluTessVertex(GluObj, GLArrayd3, @myPointList[I]);
  57.   end;
  58.  
  59. //  glBegin(GL_TRIANGLE_FAN);
  60. //    glTexCoord2f(0.5,1); glVertex3f( 0.5, 1.0, 0.0);
  61. //    glTexCoord2f(0,0); glVertex3f(0.0, 0.0, 0);
  62. //    glTexCoord2f(0,0); glVertex3f(0.0, 0.0, 0);
  63. //    glTexCoord2f(1,0); glVertex3f(1,0.0, 0.0);
  64. //  glend();
  65.  
  66.   glDisable(GL_TEXTURE_2D);
  67.  
  68.   gluTessEndContour(GluObj);
  69.   gluTessEndPolygon(GluObj);
  70.  
  71.   glEndList;
  72.   gluDeleteTess(GluObj);
  73. end;



Code:
  1. procedure gtVertex3f(Vertex: Pointer); stdcall;
  2. var
  3.   x,y : TGLfloat;
  4.   r : ^TGLVectorf3;
  5. begin
  6.   r := Vertex;
  7.   x := r[0];
  8.   y := r[1];
  9.  
  10.   u := x - (min_x * u_per_x);
  11.   v := y - (min_y * v_per_y);
  12.  
  13.   glTexCoord2f(u , v);
  14.   glVertex3fv(vertex);
  15. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 12, 2006 09:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 07, 2006 01:49
Beiträge: 2
Wohnort: Rosenheim
Hat sich erledigt. Ich hab für das GLU_TESS_BEGIN-Callback auch eine eigene Funktion
schreiben müssen, die dann die Texturbefehle aufruft.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 12, 2006 09:59 
Offline
DGL Member
Benutzeravatar

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

gluTessBeginPolygon(GluObj, nil) generiert ein glBegin, dass heisst du darfst danach z.B. kein glEnable(GL_TEXTURE_2D) aufrufen (das führt zu einem internen OpenGL-Fehler und der Befehl wird nicht ausgeführt)

Versuche mal Zeile 40 bis 48 vor gluTessBeginPolygon(GluObj, nil); zu packen.

Viele Grüße
dj3hut1


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 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.008s | 16 Queries | GZIP : On ]