因为要设计三维模型,所以权衡了半天还是打算学OPENGL。一来是OPENGL的语言相对比较简练,常年的更新比较少,而directx的API总是反复更新,函数太多;二来是我非常讨厌WIN API函数,写法非常难懂;三来就是DX只能用在WIN上
但是学了一段时间的OPENGL之后发现,OPENGL确实是太简陋了,大量的形状的建模都需要自己计算和用多边形逼近,真不知道那些复杂图形是怎么被画出来了,比方说魔兽居然也是用OPENGL做的,天哪
好了,言归正传,关于gluCylinder函数,刚接触最初级的时候,就被这个函数打败了。因为当我调用这个函数本想画一个完美的圆柱的时候,却发现无法显示?搜索了下网络,资料真的是少的可怜,相关的求助不是不回复的,就是贴个函数定义的,对于入门初学者来说,一点价值都没有。于是我自己摸索了下,终于发现了问题在哪里
一个最简单的圆柱绘图函数就下面两行:
GLUquadricObj *objCylinder = gluNewQuadric();
gluCylinder(objCylinder, 10.0, 10.0, 10.0, 32, 5);
但是这样画出来的圆柱是怎么都显示不出来的,因为除了这两行代码外,还需要涉及OPENGL里面的两大内容:视图变换和模型变换。其关键点在于:gluCylinder绘出的圆柱,其中轴就是在Z轴上的,所以如果不引入视图变换或者模型变换,就意味着你无法看到圆柱的侧面,所以自然无法看到圆柱的形状,就以为是无法显示了。
要看到如下图的圆柱,需要在函数中额外添加代码
在OPENGL的main函数中,需要添加glutReshapeFunc(reshape)来引入变换
详细的reshape函数如下:
void reshape(int w, int h)
{
}
这样子,在你的display函数中绘制的圆柱体,就能和上图一样显示了。