关于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轴上的,所以如果不引入视图变换或者模型变换,就意味着你无法看到圆柱的侧面,所以自然无法看到圆柱的形状,就以为是无法显示了。
要看到如下图的圆柱,需要在函数中额外添加代码
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
在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函数中绘制的圆柱体,就能和上图一样显示了。
因为要设计三维模型,所以权衡了半天还是打算学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轴上的,所以如果不引入视图变换或者模型变换,就意味着你无法看到圆柱的侧面,所以自然无法看到圆柱的形状,就以为是无法显示了。
要看到如下图的圆柱,需要在函数中额外添加代码
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
在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函数中绘制的圆柱体,就能和上图一样显示了。
相关文章推荐
- 关于memcpy的用法
- 关于JDBC用法的练习
- EXCEL 中自定义函数的应用(关于 XOR 在 EXCEL 中的用法 及 文本型数字求和)
- 转载一编关于MASM宏的用法
- 关于rownum 的用法
- 关于Python的super用法研究(zt)
- EXCEL 中自定义函数的应用(关于 XOR 在 EXCEL 中的用法 及 文本型数字求和)
- 关于MagicAjax的用法
- 关于xp_cmdshell存储过程的网络访问权限及sp_procoption的用法
- 关于字符串的用法和转换补遗:
- linux关于VI的用法
- 关于SqlDataReader一些用法
- 关于remove_if的错误用法
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于字符串的用法和转换补遗
- 关于SHOW_SPACE()工具的用法
- 关于setInterval的用法
- C# 2.0 中关于泛型的用法实例
- [BizTalk][Mapping]关于Table Looping Functoid的用法
- 转两篇关于jdbc的用法的文章