OpenGL从1.0开始--绘制二次曲面

时间:2022-09-10 17:08:40

类似规则多面体,GLUT可以绘制球面或其他三维的二次曲面对象,甚至能绘制一个茶壶。同样的这些函数分为两个版本:一个生产线框图,一个把曲面显示为一组填充多边形面片。这两个版本都是将曲面细分成小平面以逼近二次曲面。
主要代码和上一篇相同,我们来看看核心代码段。

glutWireSphere(r,nLongitudes,nLatitudes);//球面线框图,参数分别为半径,经纬度数目
glutSolidSphere(r,nLongitudes,nLatitudes);//球面实体图
glutWireCone(rBase,height,nLongitudes,nLatitudes);//圆锥线框图
glutSolidCone(rBase,height,nLongitudes,nLatitudes);//参数分别为锥底半径、锥高、经纬度数目
glutWireTorus(rCrossSection,rAxial,nLongitudes,nLatitudes);//环面
glutSolidTorus(rCrossSection,rAxial,nLongitudes,nLatitudes);//参数分别为圆半径、轴半径、经纬度数目
glutWireTeapot(size);//三次曲面茶壶
glutSolidTeapot(size);//参数为最大半径

GLU也可以生产一些二次曲面。

GLUquadricObj *spherel;//定义一个二次曲面对象
spherel=gluNewQuadric();//激活二次曲面绘制器
gluQuadricDrawStyle(spherel,GLU_LINE);//用线框模式绘制球面
gluSphere(spherel,r,nLongitudes,nLatitudes)://绘制二次曲面,参数为曲面对象、经纬度数目

类似地我们还可以用GLU绘制其他二次曲面。

gluCylinder(quadricName,rBase,rTop,height,nLongitudes,nLatitudes)://圆柱,参数为曲面对象、底部半径、顶部半径、高度、经纬度数目
gluDisk(ringName,rInner,rOuter,nRadii,nRings)://圆盘,参数为曲面对象,内环半径、外环半径、网格片数、同心环数

还有其他的函数就不再一一赘述了。我们下面看些示例结果。
球面:
OpenGL从1.0开始--绘制二次曲面
圆锥:
OpenGL从1.0开始--绘制二次曲面
圆柱:
OpenGL从1.0开始--绘制二次曲面