円柱をかく
とりあえず簡単に考える
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); }