如果要繪製『球體』,『圓柱』,『圓錐』,『圓盤』除了可以自已編寫圖形庫.還可以時用OpenGL Utility Library(OpenGL實用庫)提供的高級圖形支持.簡稱為GLUT.要下載可到官網下載: https://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 但windows版只支持x86.演示程式:下載
1.創建二次曲面對象,成功返回指向二次曲面的指針,否則返回NULL
GLUquadric*gluNewQuadric(void);
2.設置繪製風格
void gluQuadricDrawStyle(GLUquadric *quadObject,GLenum drawStyle);
drawStyle(繪畫樣式) | 簡介 |
GLU_FILL | 實體填充渲染 |
GLU_LINE | 以線框模式渲染 |
GLU_SILHOUETTE | 以輪框模式渲染,排除多邊形的共線. |
GLU_POINT | 以頂點模式渲染 |
3.設置法線生成
法線狀態用於設置二次曲面的表面法線的生成方式.
void WINAPI gluQuadricNormals(GLUquadric *quadObject,GLenum normals);
Normals(法線狀態) | 簡介 |
GLU_NONE | 不生成法線 |
GLU_FLAT | 每個多邊形生成一個法線(單調明暗處理) |
GLU_SMOOTH | 每個頂點生成一個法線(平滑明暗處理) (默認值) |
3.設置法線方向
設置生成法線的方向,內部還是外部.
Void gluQuadricOrientation(GLUquadric *quadObject,GLenum orientation);
Orientation(方向) | 簡介 |
GLU_OUTSIDE | 法線指向外側(默認值) |
GLU_INSIDE | 法線指向內側 |
4.設置紋理座標
紋理狀態是否為圖形生成紋理座標
void gluQuadricTexture(GLUquadric *quadObject,GLboolean textureCoords);
textureCoords | 簡介 |
GL_TRUE | 生成紋理座標 |
GL_FALSE | 不生成紋理座標(默認值) |
5.當不使用二次曲面後需要釋放資源
void gluDeleteQuadric(GLUquadricObj *state);
二次曲面繪畫
1.繪畫偏平的圓盤,中間可以有個圓孔
void gluDisk(GLUquadric *qobj,GLdouble innerRadius,GLdouble outerRadius,GLint slices,GLint loops);
繪畫偏平的扇形圓盤
void gluPartialDisk(GLUquadric *qobj,GLdouble innerRadius,GLdouble outerRadius,GLint slices,GLint loops,GLdouble startAngle,GLdouble sweepAngle);
參數 | 簡介 |
qobj | 二次曲面對象 |
innerRadius | 內圓直徑,若為0則是閉孔,大於零則中心有個孔 |
outerRadius | 外圓直徑 |
Slices | 繞z軸的細分數.此值越大圓盤越圓 |
Loops | 同軸圓盤的邊形細分數 |
startAngle | 扇形起此角度 |
sweepAngle | 扇形圓弧角度 |
2.繪畫圓錐和圓柱
void gluCylinder(GLUquadric *qobj,GLdouble baseRadius,GLdouble topRadius,GLdouble height,GLint slices,GLint stacks);
分別有底座半徑與柱頂半徑若其一為0為圓錐,若兩值不相等則為錐形圓柱,若兩值相等則為圓柱. 底座圓面與柱頂圓面是繪畫的,你需要使用gluDisk()另外繪畫
圓柱沿Z軸繪畫,底座為於Z=0, 柱頂位於Z=height(高度)
參數 | 簡介 |
qobj | 二次曲面對象 |
baseRadius | 底座半徑 z=0 |
topRadius | 柱頂半徑z=height |
height | 圓柱的高度 |
slices | 繞Z軸的細分數.此值越大圓柱越圓 |
stacks | 延Z軸的細分數.此值越高返射光的效果越好. |
3.繪畫球體,按給定半徑以原點為中心進行繪製
void gluSphere(GLUquadric *qobj,GLdouble radius,Glint slices,GLint stacks);
參數 | 簡介 |
qobj | 二次曲面對象 |
radius | 球體的半徑 |
slices | 繞z軸的細分數(相當於經線) |
stacks | 沿z軸的細分數(相當於緯線) |