关于gluCylinder函数的用法…

来源:互联网 发布:java程序员招聘 编辑:程序博客网 时间:2024/06/05 19:20
转给像我这样的煞笔
原文地址:OPENGLER">关于gluCylinder函数的用法,写给像我一样入门级的的SB OPENGLER作者:shelliar

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

[转载]关于gluCylinder函数的用法,写给像我一样入门级的的SB <wbr>OPEN

在OPENGL的main函数中,需要添加glutReshapeFunc(reshape)来引入变换

详细的reshape函数如下:

void reshape(int w, int h)
{
 glViewport(0,0,(GLsizei)w, (GLsizei)h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glFrustum(-1,1,-1,1,1.5,20);
 gluLookAt(1,0,8,1,0,-1,0,1,0);

}
这样子,在你的display函数中绘制的圆柱体,就能和上图一样显示了。

原创粉丝点击