GLU与GLUT对象
GLU和GLUT提供了一些绘制椭圆球体、圆锥以及圆柱体对象的函数。这些函数实际上使用多边形来逼近表示这些对象,并允许用户指定需要使用的多边形数量。
GLU二次曲面
GLUT提供了三种类型的二次曲面:球体、圆柱体以及圆盘。
GLUquadricObj* gluNewQuadric(); //创建一个新的二次曲面对象,并返回其指针。
void gluDeleteQuadric(GLUquadricObj* obj) //删除二次曲面对象obj
void gluQuadricDrawstyle(GLUquadricObj,GLenum style)
//为二次曲面对象obj设置绘制风格(GLU_POINT、GLU_LINE、GLU_FILL、GLU_SILGOUSETTE)
void gluQuadricNormals(GLUquardricObj* obj,GLenum moed)
//为二次曲面对象obj的法线指定mode:无法线GL_NONE、每个多边形一个法线GL_FLAT、每个顶点一个法线(GLU_SMOOTH)
void gkuQuadricTexture(GLUquardricObj* obj,GLoolean mode)
//指定obj是否应该具有纹理坐标。默认为GL_FALSE
void gluSphere(GLUquadricObj* obj,GLdouble radiu,GLint slices,GLint stacks)
//将二次曲面对象obj按中心位于原点,半径为radius的球体进行绘制。该球体时用slice行经线和stacks行纬线组成的多边形来近似的。
void gluCylinder(GLUquadricObj* obj,GLdouble base,GLdouble top,
GLdouble height,GLdouble slices,GLdouble stacks)
//将二次曲目对象obj指定为居中的圆柱体,其轴线与z轴平行,其底面为z=0,顶面为z=height。底面半径和顶面半径分别为base和top。圆柱沿着z轴方向被细分为stacks层,绕着z轴方向被细分slices段
void gluDisk(GLUquedricObj* obj,GLdouble inner,GLdouble outer,GLint slices,GLint rings)
//在平面z=0上指定一个由内径inner和外径outer确定的圆盘。构成圆盘的多边形面元是由rings个同心圆及围绕着圆心的slice次分割所确定的。
void gluPartiaDisk(GLUquedricObj* obj,GLdouble inner,GLdouble outer,
GLint slices,GLint rings,GLdouble start,GLdouble angle)
//指定一个移除了顶角为angle度的圆盘,该圆盘的起始角度为start。
创建一个球体的代码如下:
GLUquadricObj* mySphere; mySphere=gluNewQuadric(); gluQuadricDrawStyle(mySphere,GLU_LINE); gluSphere(mySphere,1.0,12,12);
可得到如下图形:
GLUT对象
glut增加了更多的三维对象。这些函数都会自动生成法线,所有的三维对象都不会生成纹理坐标。而绘制风格并没有依附在对象上,每种类型对象都对应两个函数,一个绘制线框图,一个则生成实体。
如要生成一个犹他壶,直接调用一个函数即可
void glutWireTeapot(GLdouble size) 或者 glutSolidTeapot(GLdouble size)
透视投影
透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。
void gluPerspective(GLdouble fov,GLdouble aspect,GLdouble near,GLdouble fat)
//依据y方向的视角fov,近裁剪面和远裁剪面的纵横比以及摄像机到两个裁剪面的距离(near,far),指定一个投影矩阵。