- #define PI 3.1415926535898F
- GLfloat R=0.8;
- GLfloat D=0.8;
- GLfloat fVert1[3] = { 0.0, 0.0, 0.0};
- GLfloat fVert2[3] = { 0.0, 0.0, 0.0};
- GLfloat fVert3[3] = { 0.0, 0.0, 0.0};
- GLfloat fVert4[3] = { 0.0, 0.0, 0.0};
- GLvoid CalculateVectorNormal(GLfloat fVert1[], GLfloat fVert2[],
- GLfloat fVert3[], GLfloat *fNormalX,
- GLfloat *fNormalY, GLfloat *fNormalZ)
- {
- GLfloat Qx, Qy, Qz, Px, Py, Pz;
- Qx = fVert2[0]-fVert1[0];
- Qy = fVert2[1]-fVert1[1];
- Qz = fVert2[2]-fVert1[2];
- Px = fVert3[0]-fVert1[0];
- Py = fVert3[1]-fVert1[1];
- Pz = fVert3[2]-fVert1[2];
- *fNormalX = Py*Qz - Pz*Qy;
- *fNormalY = Pz*Qx - Px*Qz;
- *fNormalZ = Px*Qy - Py*Qx;
- }
- int n = 64; //Anzahl der Schritte
- double angle = 0.0;
- glBegin(GL_QUADS);
- glColor3f (0.0f, 0.7f, 0.0f);
- for (i = 0; i < n; i = i + 1)
- {
- angle = 2 * PI * i / n;
- double y = R + sin(angle) * D/2;
- double x = R + cos(angle) * D/2;
- fVert1[0] = 0.0f;
- fVert1[1] = y;
- fVert1[2] = x;
- glVertex3f( fVert1[0], fVert1[1], fVert1[2]);
- fVert2[0] = -y * tan(PI/8);
- fVert2[1] = y;
- fVert2[2] = x;
- glVertex3f( fVert2[0], fVert2[1], fVert2[2]);
- angle = 2 * PI * (i + 1) / n;
- y = R + sin(angle) * D/2;
- x = R + cos(angle) * D/2;
- fVert3[0] = -y * tan(PI/8);
- fVert3[1] = y;
- fVert3[2] = x;
- glVertex3f( fVert3[0], fVert3[1], fVert3[2]);
- fVert4[0] = 0.0f;
- fVert4[1] = y;
- fVert4[2] = x;
- glVertex3f( fVert4[0], fVert4[1], fVert4[2]);
- GLfloat fNormalX, fNormalY, fNormalZ;
- //Calculate the vector normal coming out of the 3D polygon.
- CalculateVectorNormal(fVert1, fVert2, fVert3, &fNormalX,
- &fNormalY, &fNormalZ);
- // Set the normal vector for the polygon
- glNormal3f(fNormalX, fNormalY, fNormalZ);
- }
- glEnd();