将图形先按照X轴旋转rotatex度 ,绕Y轴旋转rotatey度 , 绕Z轴旋转rotatez度,代码如下:glRotatef( rotatex , 1.0f , 0.0f , 0.0f );
glRotatef( rotatey , 0.0f , 1.0f , 0.0f );
glRotatef( rotatez , 0.0f , 0.0f , 1.0f ); 运行起来发现和预期效果不符,后来得知旋转的时候,坐标系也被旋转了,比如在X轴旋转后可能会影响到Y,Z轴已经在CSDN搜索半天了,看了一些解决方法试了也没成功,于是求助大家怎样才能始终围绕固定坐标轴旋转?小菜初学OpenGL,最好能给出代码。。谢谢~~
解决方案 »
- 字符串结束符'\0'在MulitByte字符集中占用几个字节?
- 有进程消息吗?
- 线程id (threadid)是在进程内唯一,还是整个机器唯一?
- 怎样在系统托盘上显示256色以上的图标
- 求助:c++报错warning C4003: not enough actual parameters for macro 'CreateWindowA'
- 消息的问题!高分!急!
- 请问高手内存分配的问题?
- 数据库应用程序编程用什么最好, Delphi , VB, VC ?
- 如何模仿一个按键动作,比如按下F9,因为要调用HTML里的JAVASCRIPT
- 我想学vc,深入浅出mfc的电子版哪里有下载?
- MFC实现动画效果除了用定时器实现,还能用什么方法实现啊?
- SetTimer与OnTimer问题
另外一种是视图转换,视点旋转,物体不变,也就相当于观察者自己在转动,这时用的是gluLookAt。
看看《OpenGL编程指南》吧...
glpushMatrix();
glRotatef( rotatex , 1.0f , 0.0f , 0.0f );
glRotatef( rotatey , 0.0f , 1.0f , 0.0f );
glRotatef( rotatez , 0.0f , 0.0f , 1.0f );
glpopMatrix();
glRotatef( rotatey , 0.0f , 1.0f , 0.0f );
glRotatef( rotatex , 1.0f , 0.0f , 0.0f );
比如,对于顶点P ,如果 OGL当前的矩阵是M, 绕三个轴旋转的矩阵分别是Mx,My,Mz
那么,你的变换后顶点为 P‘ =Mx*My*Mz*M*P
看到了吗? 虽然代码还是从上向下执行,但是真正生效的是先Z,再Y,再X因此,应该像我写的这样,那么 P' = Mz*My*Mx*M*P这就实现了,先X,再Y,再Z