您的位置:首页 > 编程语言

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

2014-08-30 11:44 573 查看
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),指定一个投影矩阵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息