glrotatef如何绕自身轴旋转
2014-02-28 22:47
183 查看
首先我们知道所有的opengl操作都以点(0,0,0)作为基点。
glrotatef(旋转角度(0~360),x,y,z),z,y,z是旋转轴。由于旋转操作全都围绕点(0,0,0),所以如果你的物体并非在(0,0,0)点绘制,那么其旋转的时候就会有偏移。
比如,我们假设有一个正方体,近角点的坐标是(0,0,0)远角点的坐标是(1,1,1)。为了使这个正方体绕其中心旋转,我们必须把它的中心点移动到点(0,0,0)
glRotatef(angle, 1, 0, 0); // 绕x轴旋转
glTranslatef(-0.5, -0.5, -0.5); // 正方体的中心从(0.5,0.5,0.5)移动到(0,0,0)
Draw_cube(); //正方体绘制代码
谨记opengl逆序执行代码,所以glTranslatef虽然是最后调用的但会首先执行。
所以,当正方体的中心移动到(0,0,0)后我们就可以围绕其中心旋转了。
glrotatef(旋转角度(0~360),x,y,z),z,y,z是旋转轴。由于旋转操作全都围绕点(0,0,0),所以如果你的物体并非在(0,0,0)点绘制,那么其旋转的时候就会有偏移。
比如,我们假设有一个正方体,近角点的坐标是(0,0,0)远角点的坐标是(1,1,1)。为了使这个正方体绕其中心旋转,我们必须把它的中心点移动到点(0,0,0)
glRotatef(angle, 1, 0, 0); // 绕x轴旋转
glTranslatef(-0.5, -0.5, -0.5); // 正方体的中心从(0.5,0.5,0.5)移动到(0,0,0)
Draw_cube(); //正方体绘制代码
谨记opengl逆序执行代码,所以glTranslatef虽然是最后调用的但会首先执行。
所以,当正方体的中心移动到(0,0,0)后我们就可以围绕其中心旋转了。
相关文章推荐
- Oracle开窗函数
- Number Range 管理之并行缓冲
- JS关于对时间的处理
- Effective C++ 读书笔记(一)
- 与师兄交流后的感想
- C++ 字符串问题
- PAT 1028. List Sorting
- Xcode 5 如何禁用某个文件ARC(Automatic Reference Counting)
- 移动开发者必须了解的10大跨平台工具
- 北理工计算机学院2011级Java试题、部分答案及分析
- NYOJ558 一二三
- ftp服务器
- jbpm4.4表结构
- 事务的隔离级别
- [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
- NYOJ558 一二三
- 利用NS2的产生随机数机制来实现对链路的动态设置(连接建立时间,延迟)
- Android自定义控件实现及其布局
- 好记性不如烂笔头——WebService与Remoting
- ThoughtWorks持续集成平台GO开源了