PDA

View Full Version : 3D curved cone



lenna
12-28-2004, 01:39 AM
Hi,

I've succeeded to draw a 3D cone using glut. I'd like to get my cone curved, so it will be shaped as 'L' (kind of a banana but without the vertices).

I'd appreciate your help.

here is my cone code:


#include<glut.h>
#include<stdlib.h>



static int spin = 0;


void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}



void display(void)
{
GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix ();

gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

glPushMatrix ();

glRotated ((GLdouble) spin, 1.0, 0.0, 0.0);
glLightfv (GL_LIGHT0, GL_POSITION, position);

glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (0.0, 1.0, 1.0);
glutWireCone (0.6, 3, 25, 15);
glEnable (GL_LIGHTING);

glPopMatrix ();

glutSolidTorus (0.275, 0.85, 8, 15);

glPopMatrix ();

glFlush ();
}



void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}



void mouse(int button, int state, int x, int y)
{
switch (button)
{

case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
{
spin = (spin + 10) % 360;
glutPostRedisplay();
}
break;
default:
break;
}
}



void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 27:
exit(0);
break;
}
}



int main(int argc, char** argv)
{
glutInit(&amp;argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
glutMainLoop();

return 0;
}thanks for your help,
Lenna

lenna
12-28-2004, 09:34 AM
Hi,

well, I was a bit wrong. I didn't mean to draw a curved cone but a curved cylinder. can anyone tell me how should I do it? I hope the code above still can help :(
thanks
Lenna