円柱をかく


とりあえず簡単に考える


divは側面を分割する数。多くすればするほど、なめらかになる。
rは底面の半径。
hは側面の高さ。


[10/25追記]degree2Radianを書くのをわすれてた。

#ifndef M_PI
#define M_PI	3.141593
#endif
double degree2Radian ( double degree )
{
        return degree / 180.0 * M_PI;
}

void drawCylinder ( int div, float r, float h )
{
	int i;
	double degree;
	float x,z;

	degree = 360 / div;
	for ( i = 0; i < div; i++ )
	{
		glBegin(GL_QUADS);
		{
			x = r*sin(degree2Radian(degree*i));
			z = r*cos(degree2Radian(degree*i));
			glVertex3f( x ,-h, z );
			glVertex3f( x, 0.0f, z );
			
			x = r*sin(degree2Radian(degree*(i+1)));
			z = r*cos(degree2Radian(degree*(i+1)));
			glVertex3f( x , 0.0f, z );
			glVertex3f( x , -h, z);
		}
		glEnd();
	}
}

使うときは表示リストを使った方がいい。

//ファイル内の関数からみえるところで宣言
static GLint list;

----------------------------------------

void init(void)
{
	list=glGenLists(1);
	glNewList(list, GL_COMPILE);
	{
		drawCylinder( 20, 1.5f, 3.0f );
	}
	glEndList();

}


呼ぶときは

void display ( void )
{
	glCallList(list);


}