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

Aktuelle Zeit: Fr Jul 18, 2025 13:25

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ellipsoid selber Zeichnen
BeitragVerfasst: Fr Okt 12, 2007 16:15 
Offline
DGL Member

Registriert: Mi Okt 10, 2007 14:15
Beiträge: 6
Hi,

ich habe vor kurzem für einen Kurs die Aufgabe bekommen einen Ellipsoid in Opengl selber zu zeichnen.

Das soll ohne die Hilfsfunktionen aus der GLU passieren. Ich möchte also das Mesh aus einem Algorythmus selber erstellen.
Leider habe ich überhaupt keine Idee wie ich anfangen soll. Hat jemand ein Beispiel dafür wie sowas funktioniert oder ein Tutorial oder irgendwelche anderen Hinweise für mich?
Bin für jeden Tip dankbar.

Danke schonmal im vorraus!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 12, 2007 16:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Code:
  1. Procedure DrawSphereObject(radius: Tvector3f; n: Word; typ: Byte; inverted: Boolean;
  2.                            voffset: TVector3f; toffset, tscale: TVector2f);
  3. Var
  4.   alpha   : TVector2f;  // i*beta around x axis
  5.   SinAlpha: TVector2f;  // sin(alpha)
  6.   CosAlpha: TVector2f;  // cos(alpha)
  7.   beta    : Single;     // DegToRad(360° / n)
  8.   delta   : Single;     // j*beta around z axis
  9.   SinDelta: Single;     // sin(delta)
  10.   CosDelta: Single;     // cos(delta)
  11.   h, q    : Word;       // half, quarter
  12.   v, norm : TVector3f;  // vector for normal and vertex
  13.   border  : TVector4i;  // for-loop borders
  14.   i, j    : Integer;
  15.   k       : Byte;
  16. Begin
  17.   VectorAbsolute(radius);
  18.  
  19.   If (n < 4) or (Odd(n)) or (radius[0] = 0) or (radius[1] = 0) or (radius[2] = 0) then
  20.     Exit;
  21.  
  22.   h := n div 2;
  23.   q := n div 4;
  24.  
  25.   If (Odd(h)) then
  26.     inc(q);
  27.  
  28.   Case typ of
  29.     0: border := ToVector4i(  -h,    h-1, -q, q);  // sphere
  30.     1: border := ToVector4i(  -h,    h-1, -q, 0);  // hemisphere x-
  31.     2: border := ToVector4i(  -h,    h-1,  0, q);  // hemisphere x+
  32.     3: border := ToVector4i(-h-q, -h+q-1, -q, q);  // hemisphere y-
  33.     4: border := ToVector4i(  -q,    q-1, -q, q);  // hemisphere y+
  34.     5: border := ToVector4i(  -h,     -1, -q, q);  // hemisphere z-
  35.     6: border := ToVector4i(   0,    h-1, -q, q);  // hemisphere z+
  36.     else Exit;
  37.   End;
  38.  
  39.   beta := 2*PI / n;
  40.  
  41.   For i := border[0] to border[1] do
  42.   Begin
  43.     alpha := ToVector2f(i*beta, (i+1)*beta);
  44.  
  45.     SinAlpha := ToVector2f(sin(alpha[0]), sin(alpha[1]));
  46.     CosAlpha := ToVector2f(cos(alpha[0]), cos(alpha[1]));
  47.  
  48.     glBegin(GL_TRIANGLE_STRIP);
  49.     For j := border[2] to border[3] do
  50.     Begin
  51.       delta := j*beta;
  52.  
  53.       SinDelta := sin(delta);
  54.       CosDelta := cos(delta);
  55.  
  56.       If (inverted) then
  57.         For k := 1 downto 0 do
  58.         Begin
  59.           v := ToVector3f(-SinDelta, -CosAlpha[k]*CosDelta, -SinAlpha[k]*CosDelta);
  60.           norm := VectorNorm(VectorDiv(v, VectorNorm(radius)));
  61.           glNormal3fv(@norm);
  62.           v := VectorAdd(VectorMult(v, VectorInv(radius)), voffset);
  63.           glTexCoord2f((j/n + 0.25)*tscale[0] + toffset[0], ((i+k)/n)*tscale[1] + toffset[1]);
  64.           glvertex3fv(@v);
  65.         End;
  66.  
  67.       If (not inverted) then
  68.         For k := 0 to 1 do
  69.         Begin
  70.           v := ToVector3f(SinDelta, CosAlpha[k]*CosDelta, SinAlpha[k]*CosDelta);
  71.           norm := VectorNorm(VectorDiv(v, VectorNorm(radius)));
  72.           glNormal3fv(@norm);
  73.           v := VectorAdd(VectorMult(v,  radius), voffset);
  74.           glTexCoord2f((j/n + 0.25)*tscale[0] + toffset[0], ((i+k)/n)*tscale[1] + toffset[1]);
  75.           glvertex3fv(@v);
  76.         End
  77.     End;
  78.     glEnd;
  79.  
  80.   End;
  81. End;


Das müsste es schon tun... die Typen (TVector3f etc) und Funktionen kannst du dir hier herholen.
Jetzt brauchst du nur noch die Radien des Ellipsoiden einzusetzen.
Texturkoordinaten und Normalen sollten stimmen ;)

EDIT:
Willkommen im Forum ;)

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 14, 2007 19:55 
Offline
DGL Member

Registriert: Mi Okt 10, 2007 14:15
Beiträge: 6
Vielen Dank für die schnelle Antwort! Bin leider jetzt erst zum Nachgucken gekommen :-).


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 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.019s | 15 Queries | GZIP : On ]