以下内容来自某网友的发帖
Dave Shreiner 谈如何建立一个基本的
观看系统:
首先,计算边界球
场景中的所有对象。这应该
为您提供两位
信息:球体的中心
(令 (c.x, c.y, c.z ) 为该点)
及其直径(称为“直径”)。
接下来,为 zNear 选择一个值
剪裁平面。一般准则是
选择大于但是
接近1.0。所以,假设你设置了
zNear = 1.0; zFar = zNear + diam;
在此构造您的矩阵调用
顺序(对于正交
投影):
GLdouble left = c.x - diam;
GLdouble right = c.x + diam;
GLdouble bottom c.y - diam;
GLdouble top = c.y + diam;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(left, right, bottom, top, zNear, zFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
这种方法应该集中你的
窗口中间的物体
并拉伸它们以适合(即,它的
假设您使用的是窗口
纵横比 = 1.0)。如果你的
窗口不是正方形,计算左边,
右、下、上,如上,以及
在之前添加以下逻辑
调用 glOrtho():
GLdouble aspect = (GLdouble) windowWidth / windowHeight;
if ( aspect < 1.0 ) {
// window taller than wide
bottom /= aspect;
top /= aspect;
} else {
left *= aspect;
right *= aspect;
}
上面的代码应该定位
场景中的对象适当地。
如果您打算操纵(即
旋转等),您需要添加一个
观看变换到它。
典型的观看变换将会继续
ModelView 矩阵,可能看起来
像这样:
GluLookAt (0., 0., 2.*diam, c.x, c.y, c.z, 0.0, 1.0, 0.0);