PDA

View Full Version : Bezier surface obtained by rotation



Todor
01-16-2012, 06:15 AM
Hello. I can make points interactively in my project by mouse clicking. I make bezier curve from 4 of this points. This all happens in 2d scene. I want to make rotational surface from this curve in 3d. Here is my code for 2d curve and from moving from 2d to 3d (in my glutDisplayFunc) :

glClearColor(0,0,0,0.f);
if (!_3d_flag)
{
glDisable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,g_sx,g_sy,0,-1,1);
glViewport(0,0,g_sx,g_sy);
glShadeModel(GL_FLAT);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &bpts[0][0]);//bpts is array of control points for bez curve
glEnable(GL_MAP1_VERTEX_3);
glBegin(GL_LINE_STRIP);
for (int k = 0; k <= 50; k++)
glEvalCoord1f((GLfloat) k / 50);
glEnd();
}
else
{
glClearDepth(10);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,1,2,200);
gluLookAt(LOOKATX,LOOKATY,LOOKATZ,0,0,0,0,1,0);
}

_3d_flag is flag for moving to 3D. Can I do it like this and make 3d rotational surface from my bezier curve? How can I make rotational surface from glMap2 and glMapGrid2 and glEvalMesh2?

Todor
01-16-2012, 03:28 PM
I want to create surface of revolution.

awhig
01-17-2012, 08:43 AM
I would suggest to multiply every control point of the curve with a rotation matrix and record the transformed vertices.

This way you will generate a list of transformed vertices. Use this list to get your 3D surface.

Ex: 4 points on your curve would give you four arrays. Each array may have number of points equal to the number of times you transform (rotate). If your rotation is discreet, then intermediate control points can get generated using Bezier interpolation.

Draw and shade them to get your result.