作者locationc (星如止水)
看板C_and_CPP
标题[问题] opengl旋转的问题
时间Fri Jul 24 19:21:42 2009
已经爬文 且也google好几天了T-T
不过好像都跟我的问题不太一样
现在是要做一个跟这个一模一样的东西
http://houseof3d.com/pete/applets/facet/three.html
我的做法大概是 按上下左右时
glPushMatrix
if 左
glRotatef- 沿z轴转
if 右
.....
glGetFloatv(GL_MODELVIEW_MATRIX, &x)
glPopMatrix
在其它函式会用x把图render出来
现在的问题是 因为用glRotatef时 轴会跟着转
而因为上次转转的状态要维持着
所以每次render图时 都会要做一次上面描述的函式
所以当下次按 上下左右时 当时的z轴已经不是向左转的功能了
而是转过的z轴
有想过解决方法是 用现在转过的轴来算出要对x,y,z各转几度
来达到向左转的功能 可是好像很难做
这个有没有比较好的方法
谢谢各位
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.44.133.47
1F:推 QQ29:每次转的角度++ 既然你用到pushmatrix的话 07/24 19:27
现在的问题比较是说
ex: 先对x转 +20 再对z转 +20 此时的z已经跟原来不一样
虽然有用push跟pop 可是因为下次进来的时候 会先做一次对x转 +20 此时z轴还是会变掉
因为x,z各转20的话 先对哪一轴转是有差的
而如果写死的话(也就是只把角度一直累加上去) 就会变成只有一种顺序(ex:先x後z)
所以我是用一个阵列记得说 从最开始到现在 每一次的动作是多少
而每次render的时候 就会把阵列里的动作做一次(为了维持刚刚转的状态)
而这样就会变成想做下一个动作时 轴还是被转掉
不好意思描述的好像有点复杂T-T
※ 编辑: locationc 来自: 114.44.133.47 (07/24 19:44)
2F:推 VictorTom:这个问题明明以前自己画pixel硬干3D时遇到过, 可是现在 07/24 19:47
3F:→ VictorTom:想不起来当时到底怎麽解决的....>_<# 07/24 19:47
4F:推 VictorTom:目前想得到的一个方向就是, 转动的时候要用转object的观 07/24 19:54
5F:→ VictorTom:点, 而是转动观察者(光源顺便), 具体实作要再想一下Orz 07/24 19:55
6F:→ locationc:楼上大大说的是转camera的方向 可是如果转轴的没办法吗? 07/24 20:02
7F:推 Bencrie:矩阵叠的顺序倒过来就可以了 07/24 20:08
8F:→ locationc:楼上大大可以多说一点吗 感谢 07/24 20:11
9F:推 grayyoung:V大是职业的程式工作者吗 相当的威阿 07/25 02:06
10F:推 littleshan:1. 你不能只存「三轴各转几度」,而要存一个 matrix 07/25 02:45
11F:→ littleshan:2. 每次旋转时去更新这个 transform matrix 07/25 02:46
12F:推 VictorTom:小弟只是打杂的, 啥都不会~_~ 楼上l大说的对, 就那样:) 07/25 09:05
13F:推 Bencrie:OpenGL的矩阵运算是直接乘起来最後才乘顶点,所以效果会 07/25 11:59
14F:→ Bencrie:颠倒。改成抓矩阵、LoadIdentity、Rotate再乘抓下来的矩阵 07/25 12:01
15F:推 jhs1213:上次运算出来的矩阵会包含3个轴转去哪个方向 07/25 17:44
16F:→ jhs1213:再对新的轴的方向旋转可能就是你想要的 07/25 17:45