#define GL_PI 3.1415f
void createCylinder(GLfloat centerx, GLfloat centery, GLfloat centerz, GLfloat radius, GLfloat h)
{
/* function createCyliner()
원기둥의 중심 x,y,z좌표, 반지름, 높이를 받아 원기둥을 생성하는 함수(+z방향으로 원에서 늘어남)
centerx : 원기둥 원의 중심 x좌표
centery : 원기둥 원의 중심 y좌표
centerz : 원기둥 원의 중심 z좌표
radius : 원기둥의 반지름
h : 원기둥의 높이
*/
GLfloat x, y, angle;
glBegin(GL_TRIANGLE_FAN); //원기둥의 윗면
glNormal3f(0.0f, 0.0f, -1.0f);
glColor3ub(139, 69, 19);
glVertex3f(centerx, centery, centerz);
for(angle = 0.0f; angle < (2.0f*GL_PI); angle += (GL_PI/8.0f))
{
x = centerx + radius*sin(angle);
y = centery + radius*cos(angle);
glNormal3f(0.0f, 0.0f, -1.0f);
glVertex3f(x, y, centerz);
}
glEnd();
glBegin(GL_QUAD_STRIP); //원기둥의 옆면
for(angle = 0.0f; angle < (2.0f*GL_PI); angle += (GL_PI/8.0f))
{
x = centerx + radius*sin(angle);
y = centery + radius*cos(angle);
glNormal3f(sin(angle), cos(angle), 0.0f);
glVertex3f(x, y, centerz);
glVertex3f(x, y, centerz + h);
}
glEnd();
glBegin(GL_TRIANGLE_FAN); //원기둥의 밑면
glNormal3f(0.0f, 0.0f, 1.0f);
glVertex3f(centerx, centery, centerz + h);
for(angle = (2.0f*GL_PI); angle > 0.0f; angle -= (GL_PI/8.0f))
{
x = centerx + radius*sin(angle);
y = centery + radius*cos(angle);
glNormal3f(0.0f, 0.0f, 1.0f);
glVertex3f(x, y, centerz + h);
}
glEnd();
}