不要使用opengl自带的移动旋转,缩放矩阵函数,而是自己写矩阵,这样灵活多了。
最后使用glMultMatrixd()这个函数,就可以了。 可以这样做,首先是位置变换,当点击画面上一个图片的时候,把这个图片的位置保存到一个矩阵中, 如果图片的位置是(x,y,z,1)的话,那么矩阵T为 1,0,0,x 0,1,0,y 0,0,1,z 0,0,0,1 然后再做一个缩放矩阵S x,0,0,0 0,y,0,0 0,0,z,0 0,0,0,1 其中x,y,z是可以任意给的变量 然后再做旋转矩阵,如果使用四元数的话,要方便一些,但是四元数的类和四元数转换为矩阵的操作都要自己写,如果使用欧拉角的话,这里就分别做3个矩阵,然后再相乘。 旋转矩阵是怎样的楼主自己看书,任何一本计算机图形学的书都有的,假设现在分别绕x,y,z轴的矩阵都有了,Rx,Ry,Rz 那么现在只要把这些矩阵合在一起,做一个刚体变换矩阵M就可以了。 那么 M = T × Rx×Ry×Rz ×S 最后在使用opengl的函数glMultMatrixd(M),就可以了 这里要注意的是,opengl中的矩阵是以一维数组的形式保存的,所以这里的M,也要是个一维的数组,矩阵乘法楼主自己写一个就是了,不复杂。只是要注意M中元素的保存顺序 M0, M1, M2, M3 M4, M5, M6 ,M7 M8, M9, M10,M11 M12,M13,M14,M15 要这样保存,然后对操作的图片应用这个矩阵就可以了。 glPushMatrix(); glMultMatrixd(M); // 显示图片的代码 glPopMatrix(); |
|