OpenGL之二次曲面

OpenGL之二次曲面

如果要繪製『球體』,『圓柱』,『圓錐』,『圓盤』除了可以自已編寫圖形庫.還可以時用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軸的細分數(相當於緯線)

 

評論