說是二次曲面圖,其實從視覺效果上看還是三維圖。通過glu實用庫,我們可以輕松的畫出球形、錐形、扇面、圓柱形,而不用像畫立方體或立體三角形一樣一個面一個面的去畫。
要畫二次曲面圖形,首先我們要創建一個GLUquadricObj(二次曲面聲明類型)。
具體如下:
//聲明對象 GLUquadricObj *uquadric; //初始化二次曲面並創建一個指向二次曲面的指針 uquadric = gluNewQuadric(); //在二次曲面的表面創建平滑的法向量 gluQuadricNormals(uquadric,GL_SMOOTH); //允許二次曲面使用紋理 gluQuadricTexture(uquadric,TRUE);
創建完二次曲面聲明並初始化之后,我們就可以利用這個指針繪制多個曲面圖形了。
圓柱形:
void gluCylinder( GLUquadric* quad, --創建的二次曲面指針
GLdouble base, --底面圓形的半徑
GLdouble top, --頂面圓形的半徑
GLdouble height, --圓錐的高度
GLint slices, --緯線 環繞z軸的細分面(數字越大越平滑,相應的速度越慢)
GLint stacks ) --經線 沿着z軸的細分面(數字越大越平滑,相應的速度越慢)
圓錐:
圓錐的實現函數和圓柱體是一樣的,只要將頂面圓形的半徑設為0就可以了。
圓面:
void gluDisk(
GLUquadricObj *qobj, --創建的二次曲面指針
GLdouble innerRadius, --內圓的半徑
GLdouble outerRadius, --外圓的半徑
GLint slices, --沿半徑的細切面(數字越大越平滑,相應的速度越慢)
GLint loops --繞圓心的細切面(數字越大越平滑,相應的速度越慢)
);
球體:
void gluSphere(
GLUquadricObj *qobj, --創建的二次曲面指針
GLdouble radius, --球半徑
GLint slices, --緯線細分面(數字越大越平滑,相應的速度越慢)
GLint stacks --經線細分面(數字越大越平滑,相應的速度越慢)
);
扇形:
void gluPartialDisk(
GLUquadricObj *qobj, --創建的二次曲面指針
GLdouble innerRadius, --內圓的半徑
GLdouble outerRadius, --外圓的半徑
GLint slices, --沿半徑的細切面(數字越大越平滑,相應的速度越慢)
GLint loops --繞圓心的細切面(數字越大越平滑,相應的速度越慢)
GLdouble startAngle, --扇形開始的角度
GLdouble sweepAngle --扇形轉過的角度
);