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

Aktuelle Zeit: Fr Jul 18, 2025 00:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Cylinder
BeitragVerfasst: So Mär 16, 2008 12:27 
Offline
DGL Member

Registriert: So Mär 16, 2008 11:51
Beiträge: 1
Hi,

Ich schreibe in c eine kleine Anwendung. Dabei muss ich ein Cylinder mit einer Ebene schneiden.
Code:
  1.  
  2.  
  3. #define PI 3.1415926535898F
  4. GLfloat R=0.8;
  5. GLfloat D=0.8;
  6.  
  7. GLfloat fVert1[3] = { 0.0, 0.0, 0.0};
  8. GLfloat fVert2[3] = { 0.0, 0.0, 0.0};
  9. GLfloat fVert3[3] = { 0.0, 0.0, 0.0};
  10. GLfloat fVert4[3] = { 0.0, 0.0, 0.0};
  11.  
  12. GLvoid CalculateVectorNormal(GLfloat fVert1[], GLfloat fVert2[],
  13.  
  14.                              GLfloat fVert3[], GLfloat *fNormalX,
  15.                              GLfloat *fNormalY, GLfloat *fNormalZ)
  16.     {
  17.     GLfloat Qx, Qy, Qz, Px, Py, Pz;
  18.  
  19.    Qx = fVert2[0]-fVert1[0];
  20.    Qy = fVert2[1]-fVert1[1];
  21.    Qz = fVert2[2]-fVert1[2];
  22.    Px = fVert3[0]-fVert1[0];
  23.    Py = fVert3[1]-fVert1[1];
  24.    Pz = fVert3[2]-fVert1[2];
  25.  
  26.    *fNormalX = Py*Qz - Pz*Qy;
  27.    *fNormalY = Pz*Qx - Px*Qz;
  28.    *fNormalZ = Px*Qy - Py*Qx;
  29.  
  30.    }
  31.  
  32.  
  33. int n = 64; //Anzahl der Schritte
  34. double angle = 0.0;
  35.  
  36. glBegin(GL_QUADS);
  37.     glColor3f  (0.0f, 0.7f, 0.0f);
  38.         for (i = 0; i < n; i = i + 1)
  39.         {
  40.             angle = 2 * PI  * i / n;
  41.             double y = R + sin(angle) * D/2;
  42.             double x = R + cos(angle) * D/2;
  43.            
  44.             fVert1[0] = 0.0f;
  45.             fVert1[1] = y;
  46.             fVert1[2] = x;
  47.  
  48.             glVertex3f( fVert1[0], fVert1[1], fVert1[2]);
  49.  
  50.             fVert2[0] = -y * tan(PI/8);
  51.             fVert2[1] = y;
  52.             fVert2[2] = x;
  53.  
  54.             glVertex3f( fVert2[0], fVert2[1], fVert2[2]);
  55.            
  56.             angle = 2 * PI * (i + 1) / n;
  57.             y = R + sin(angle) * D/2;
  58.             x = R + cos(angle) * D/2;
  59.            
  60.             fVert3[0] = -y * tan(PI/8);
  61.             fVert3[1] = y;
  62.             fVert3[2] = x;
  63.  
  64.             glVertex3f( fVert3[0], fVert3[1], fVert3[2]);
  65.  
  66.             fVert4[0] = 0.0f;
  67.             fVert4[1] = y;
  68.             fVert4[2] = x;
  69.  
  70.             glVertex3f( fVert4[0], fVert4[1], fVert4[2]);
  71.  
  72.  
  73.             GLfloat fNormalX, fNormalY, fNormalZ;
  74.             //Calculate the vector normal coming out of the 3D polygon.
  75.             CalculateVectorNormal(fVert1, fVert2, fVert3, &fNormalX,
  76.                          &fNormalY, &fNormalZ);
  77.  
  78.             // Set the normal vector for the polygon
  79.             glNormal3f(fNormalX, fNormalY, fNormalZ);
  80.            
  81.         }
  82.     glEnd();
  83.  


Zum einen wollte ich fragen, ob ich Cylinder richtig darstelle, zum anderen funktioniert die Normalberechnung nicht.

Kann mir jemand weter helfen?

Danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 18, 2008 00:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was genau möchtest du machen?
Einfach zwei Objekte zeichnen die sich durchdringen, oder (einfach gluCylinder nehmen ;) und mit glBegin ne Ebene durchlegen)
einen Cylinder an einer vorgegebenen Ebene abschneiden, oder (Clipping Plane)
einen Cylinder an einer Vorgegebenen sichtbaren(!) Ebene Schneiden, oder (geht richtung CSG)
einen Cylinder an einer Ebene schneiden, und die beiden Ergebnisobjekte verbinden? (ist CSG)

_________________
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  [ 2 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.007s | 16 Queries | GZIP : On ]