OpenGL学习(三) 三维编程基础

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);

    可得到如下图形:

    wKioL1QDzn7zS0caAAGga6-Xi9o437.jpg


GLUT对象

    glut增加了更多的三维对象。这些函数都会自动生成法线,所有的三维对象都不会生成纹理坐标。而绘制风格并没有依附在对象上,每种类型对象都对应两个函数,一个绘制线框图,一个则生成实体。

    如要生成一个犹他壶,直接调用一个函数即可

    void glutWireTeapot(GLdouble size) 或者 glutSolidTeapot(GLdouble size)

    wKioL1QD0Bnwisd2AAH-Pi_4Vn8194.jpg


透视投影

    透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。

        void gluPerspective(GLdouble fov,GLdouble aspect,GLdouble near,GLdouble fat)

    //依据y方向的视角fov,近裁剪面和远裁剪面的纵横比以及摄像机到两个裁剪面的距离(near,far),指定一个投影矩阵。

你可能感兴趣的:(OpenGL,GLU与GLUT对象,二次曲面)