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

Aktuelle Zeit: Do Jul 17, 2025 19:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bezierkufen: Dreieck?
BeitragVerfasst: Di Feb 08, 2005 16:09 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Weiss jemand wie man Bezierkufen-Dreiecke erstellen kann?

Code:
  1.  
  2. var
  3.   BezA: Array[0..3] of Array[0..3] of Array[0..2] of GLFloat;
  4.  


Dies ist ja ein Array für eine Fläche, ich vermute allerdings das ich gerade aufm Schlauch stehe und deswegen nicht aufn Grünen Zweig komme!
Ich brauche das Dreieck für einen Spielfeldtyp der als ein 6Eck Dargestellt wird.

Danke für die Hilfe!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


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

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Also Bezier-Kurven sind rund und damit sind Ecke üblicherweise etwas schwierig 8-O


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 08, 2005 16:42 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Ecken an sich sollten nicht das Problem sein, nur Dreiecke sind ein Problem meiner Meinung nach!

Hier vom Redbook:
Bild
Bild

Habe nämlich eigentlich kein Bock alles mit Dreiecken darzustellen!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 08, 2005 20:10 
Offline
DGL Member

Registriert: So Jun 23, 2002 12:37
Beiträge: 144
Programmiersprache: C/C++, Delphi
Wieso Dreiecke?

Wenn du einfach nur Bezier-Kurven (o. Bezier-Flächen) brauchst du doch nur ein Array mit den Gewichten (Punkten) zur Orientierung der Kurve / Fläche...

_________________
--->ladida<---


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 08, 2005 21:03 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Ich sagte ich brauche ein 6 Eck, dieses sollte aus einer Bezierfläche bestehen, und aus 2 Bezierdreiecken(falls es sowas gibt)!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 14, 2005 12:06 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Soweit ich weiß, ist das so nicht möglich - zumindest nicht mit den normalen Bezier-Dingern. Damit gehen eigentlich nur Linien und 4ecke. Aber du kannst n bisschen Tricksen. Du könntest entweder 2 Ecken übereinander legen, oder den ganzen kram selber machen. Die werden mit dem Bernstein-Verfahren berechnet. Dann kannst du einfach nur das halbe Viereck rendern. Ist wohl das Beste.

Code:
  1.  
  2. Function Bernstein(u : single; p1, p2, p3, p4 : TXYZ) : TXYZ;
  3. var
  4.   a, b, c, d, r : TXYZ;
  5. begin
  6.      a := MultVec(p1, u*u*u);
  7.      b := MultVec(p2, 3*u*u*(1-u));
  8.      c := MultVec(p3, 3*u*SQR(1-u));
  9.      d := MultVec(p4, SQR(1-u)*(1-u));
  10.  
  11.      r := AddVec(AddVec(a, b), AddVec(c, d));
  12.  
  13.      Result := r;
  14. end;
  15.  
  16.  
  17.    tmps : Array[0..2] of TXYZ;
  18.  
  19. for x := 0 to 7 do //für 8 unterteilungen
  20. begin
  21.         for i := 0 to 2 do
  22.         begin
  23.                 tmps[i] := Bernstein(x/7, VertexCTRLPoints[i + 0*3],
  24.                   MultVec(AddVec(VertexCTRLPoints[i + 1*3], VertexCTRLPoints[i + 0*3]), 0.5),  // wenn wie in Q3 nur 3 Kontrollpunkte gegeben sind
  25.                   MultVec(AddVec(VertexCTRLPoints[i + 1*3], VertexCTRLPoints[i + 2*3]), 0.5),  // musste die so verrechnen, ansonsten jeden einzeln reinstecken                                  
  26.                   VertexCTRLPoints[i + 2*3]);
  27.        end;
  28.  
  29.         for y := 0 to 7 do //in deinem Fall also nur for y := 0 to (7-x) do
  30.         begin
  31.                 Position[x][y] := Bernstein(y/7, tmps[0],
  32.                                             MultVec(AddVec(tmps[1], tmps[0]), 0.5),
  33.                                             MultVec(AddVec(tmps[1], tmps[2]), 0.5),
  34.                                             tmps[2]);
  35.         end;
  36. end;
  37.  


So, damit haste die Vertex-Positionen - in deinem Fall brauchste natürlich nicht alle. Damit kannste dann mit Triangle_strips deine Fläche rendern. Wenn du da auch nur die Hälfte renderst, hast du dein Dreieck.

Code:
  1.  
  2. for x := 0 to 7-1 do
  3. begin
  4.         glBegin(GL_TRIANGLE_STRIP);
  5.            for y := 0 to (7-x) do
  6.            begin
  7.                    glVertex3fv(@Position[x][y]);
  8.                    if y < (7-x)
  9.                    then
  10.                        glVertex3fv(@Position[x+1][y]);
  11.            end;
  12.         glEnd;
  13. end;
  14.  


die Hypothenuse könnte was krum werden, aber das musst du mal ausprobieren...

AL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


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