您的位置:首页 > 其它

关于gluCylinder函数的用法…

2017-05-22 09:48 162 查看
转给像我这样的煞笔原文地址:关于gluCylinder函数的用法,写给像我一样入门级的的SB OPENGLER作者:shelliar
因为要设计三维模型,所以权衡了半天还是打算学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)

{

 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函数中绘制的圆柱体,就能和上图一样显示了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: