MyException - 我的异常网
当前位置:我的异常网» VC/MFC » OpenGL中设置视角的技巧和怎么绕任意边旋转

OpenGL中设置视角的技巧和怎么绕任意边旋转

www.myexceptions.net  网友分享于:2013-04-10  浏览:104次
OpenGL中设置视角的技巧和如何绕任意边旋转
我没学过计算机图形学,就是项目中要用到OpenGL做一些显示,有如下问题。
1.当画完图形的时候,需要通过gluLookAt来设置视角,如果视角选择得不好,就看不到物体,但是我觉得视角选择是件很麻烦的事,我怎么知道选哪个视角可以看物体看得更好,难道我大概估计地去试,但这也要依据知道画出来的点的坐标范围,请问这有没有什么技巧的?
2.void glRotate{fd}(TYPE angle,TYPE x,TYPE y,TYPE z)
函数中第一个参数是表示目标沿从点(x,y,z)到原点的方向逆时针旋转的角度,后三个参
数是旋转的方向点坐标。比如(1,0,0)就是绕X轴旋转,那我如何让它绕某一线段旋转,不是过原点的,比如画出一个立方体,希望这个立方体绕它的某一条边旋转?
3.当将物体进行旋转和平移之后,物体不再以世界坐标系的原点为中心了,用glScale对物体进行放大缩小,它不是以中心进行放大缩小,一缩小或一放大就会移到其它地方,而不是以坐标系的原点为中心,有什么方法可以解决,难道我每进行一次放大缩小,再计算距离平移到中心?

------解决方案--------------------
第三个问题应该可以用glPushMatrix()和glPopMatrix()来解决:在变换之前用Push保存当前坐标系的矩阵,完了之后通过Pop将改变的坐标系变回原来的,将坐标变换和应用坐标变换的图形放在这两个函数之间。
------解决方案--------------------
1,应该可以通过设置坐标系来解决吧,不过,我觉得,还是计算视角比较好。
2,应该是平移到原点---旋转---平移回去,求这个矩阵即可。
------解决方案--------------------
2和3都是用glPushMatrix()和glPopMatrix()就能解决的啊,第1可以自己写代码控制视角动态变换,
这段代码是加在display函数中的。
glPushMatrix();  
glTranslatef(xTranslation, yTranslation, zTranslation);     
lightChange();   
glLightfv(GL_LIGHT0,GL_POSITION,lightpos);    
glColor3ub(50, 100, 125);     
glRotatef(zRot, 0.0f, 0.0f, 1.0f); 
glRotatef(yRot, 0.0f, 1.0f, 0.0f);   
glRotatef(xRot, 1.0f, 0.0f, 0.0f);   
draw();  
glPopMatrix();
xRot、yRot、zRot的值自己通过键盘设置。
------解决方案--------------------
1、基本上就是试,做得多了也就有经验了
------解决方案--------------------
1:
这个只有试
或者引用一些现实中照相摄像的经验
2:
将物体平移使世界坐标在你所期望的旋转轴位置
旋转物体
再平移物体回到原来的位置

边长为1.0的正方体,初始位置是中心在世界坐标原点
想使其绕左面垂直中线逆时针旋转90度
代码如下
glTranslatef(0.5, 0.0, 0.0);
glRotatef(90.0, 0.0, 1.0, 0.0);
glTranslatef(0.0, 0.0, 0.5);
/*draw the cube*/
3:
先缩放好再平移

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有