学习Nehe Lesson 20

这一课的主题是二次几何体的绘制。
OpenGL的glu库提供了以下类型的二次曲面绘制:Cylinder, 圆柱体,使用gluCylinder函数;Cone, 圆锥,使用gluCyliner函数,同Cylinder,只是上下面的半径不一样;Sphere, 球体,使用gluSphere函数;Disk, 碟盘,也就是同心圆,使用gluDisk函数;Partial Disk, 部分同心圆,使用gluPartialDisk函数。
简单的来说,绘制二次几何体有以下几个步骤:
1、GLUquadricObj *quadratic。定义一个二次几何体。
2、quadratic=gluNewQuadric()。创建二次几何体。在这里可以把二次几何体理解为一个定义好了的结构体。
3、gluQuadricNormals(quadratic, GLU_SMOOTH);。设置法线风格。gluQuadricNormals,一般都是使用GLU_SMOOTH风格,对每个顶点都计算法线向量,是默认方式。
4、设置二次曲面的绘制方向。gluQuadricOrientation。一般使用GLU_OUTSIDE, 按照所有的法线都指向外面的方式绘制。是默认方式。(Nehe的教程中没有这句)
5、gluQuadricTexture(quadratic, GL_TRUE)。设置纹理。gluQuadricTexture,设置是否自动计算纹理。默认是GLU_FALSE。当需要使用纹理时应修改为GLU_TRUE。
6、调用二次曲面绘制函数。gluCylinder/gluSphere/gluDisk/gluPartialDisk。
(参考 http://blog.youkuaiyun.com/lcphoenix/article/details/6717525

接下来先看绘制圆柱和圆锥的函数的定义:void gluCylinder( GLUquadricObj *qobj, GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks)。第一个参数是二次几何体对象,第二个参数是底面半径,第三个参数是顶面半径,第四个参数是高度,第五个参数是纬线(环绕Z轴有多少细分),第六个参数是经线(沿着Z轴有多少细分)。做过3Dmax的对后两个参数会熟悉一些。细分就是用多边形趋近圆形,细分越多该对象就越细致。

再看圆盘的函数:void gluDisk(GLUquadric *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops )。第一个参数依旧是之前声明过的对象,第二个是盘子的内圆半径,该参数可以为0,则表示在盘子中间没孔,内圆半径越大孔越大。第三个表示外圆半径,这个参数必须比内圆半径大。第四个是组成该盘子的切片的数量,切片越多,外圆边缘就越平滑。最后一个参数是组成盘子的环的数量。环很像唱片上的轨迹,一环套一环。这些环从内圆半径细分到外圆半径。

然后是球体的函数:void gluSphere( GLUquadricObj *qobj, GLdouble radius, GLint slices, GLint stacks)。和前面一样,参数分别是对象、半径、纬线和经线。

最后是画圆盘的一部分:void gluPartialDisk( GLUquadricObj *qobj,GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops, GLdouble startAngle, GLdouble sweepAngle )。比圆盘函数多的两个参数分别是起始角度和结束角度。这两个角度同时变,就可以看到圆盘不停旋转的效果。

最后,把主函数部分稍微修改,加入空格的控制,这个程序就完成了。
如果把几个二次几何体组合在一起,就可以拼接出简单的物体了。
不过关于视角转换还有一些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值