opengl:如何使显示的物体开始就位于viewport的中央,并且大小适中?
做了个读取3维文件模型的小程序,由于模型大小不一,显示的时候有的看不全,有的很小,经常需要手动调整。
请问有没有什么方法可以根据模型的大小及位置调整视口,使显示大小和中心都适中?
问题点数:0、回复次数:6Top
1 楼syy64(太平洋)回复于 2004-08-04 22:26:02 得分 0
设置投影矩阵和模型矩阵。Top
2 楼mmvr()回复于 2004-08-05 00:37:16 得分 0
如何设置?能否说详细一些?Top
3 楼Tieren_love(甜蜜程序员)回复于 2004-08-05 12:30:14 得分 0
太平洋能不能说得详细点呀?Top
4 楼Lucende(而已书生)回复于 2004-08-05 17:01:59 得分 0
详细点就要把图形学的书都搬过来了~~~
// 设置模形矩阵
void SetModalMatrix( void )
{
glMatrixMode( GL_MODELVIEW );
glLoadIdentity( ); // 单位化矩阵
// 这个函数是在OnIdle里被调用的,所以我们用下面的代码来实现物体的旋转
// 一个很容易理解的概念是,你绕着物体转和物体自己转在某些简单场景里的
// 的效果看起来是一样的,所以我们通过矩阵运算让眼睛点在一定高度做圆周
// 运动。知道圆的简化方程是:(sinα* r)^2 + (cosα* r)^2 = r^2,所以代码
// 很好理解。
static float fRadius = 0;
fRadius += 0.01f;
if ( fRadius > M_PI * 2 )
{
fRadius = 0;
}
gluLookAt( cosf( fRadius ) * 30, sinf( fRadius ) * 30, 15.0,
0.0, 0.0, 0.0, // 向原点坐标看去
0.0, 0.0, 1.0 ); // 设置眼睛(摄影机)的方向向量,该向量表示眼表向上
}
// 设置透视矩阵
void SetProjMatrix( WORD wWidth, WORD wHeight )
{
// 此函数将在WM_SIZE时被调用,所以应该设置一下glViewPort
glViewport( 0, 0, wWidth, wHeight );
glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
// 这和照象机很类似,第一个参数设置镜头广角度,第二个参数是长宽比,后面是远近剪切。
gluPerspective( 45.0, (double)wWidth / (double)wHeight, 1.0, 1000.0 );
}
Top
5 楼Lucende(而已书生)回复于 2004-08-05 17:03:01 得分 0
转自www.gameres.comTop
6 楼syy64(太平洋)回复于 2004-08-05 17:12:02 得分 0
用gluLookat函数,得根据你的坐标值设定;
http://community.csdn.net/Expert/topic/3143/3143497.xml?temp=.8713953Top




