原问题/代码
我正在微调一个3D对象的渲染,并尝试使用gluLookAt
实现相机跟随对象,因为一旦对象达到最大高度,其中心y位置会不断增加。以下是我设置模型视图和投影矩阵的代码部分:
float diam = std::max(_framesize, _maxNumRows);
float centerX = _framesize / 2.0f;
float centerY = _maxNumRows / 2.0f + _cameraOffset;
float centerZ = 0.0f;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(centerX - diam,
centerX + diam,
centerY - diam,
centerY + diam,
diam,
40 * diam);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0., 0., 2. * diam, centerX, centerY, centerZ, 0, 1.0, 0.0);
目前,该对象显示得非常遥远,并且似乎向屏幕后方(-z)和向下(-y)移动,直到最终消失。
我做错了什么?我如何使我的表面出现在屏幕中央,占用整个视图,并且随着对象的更新而使相机移动?
已更新的代码和当前问题
这是我的当前代码,现在将对象放置在屏幕正中央并填充我的窗口。
float diam = std::max(_framesize, _maxNumRows);
float centerX = _framesize / 2.0f;
float centerY = _maxNumRows / 2.0f + _cameraOffset;
float centerZ = 0.0f;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(centerX - diam,
centerX,
centerY - diam,
centerY,
1.0,
1.0 + 4 * diam);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(centerX, _cameraOffset, diam, centerX, centerY, centerZ, 0, 1.0, 0.0);
当被查看的对象开始移动时,我仍然有一个问题,它不能保持完全居中。当更新时,它似乎会抖动一个像素,然后向下抖动两个像素。最终,对象离开了当前视图。如何解决这个抖动问题?
gluLookAt
的第二个参数更改后,解决了物体移出画面的问题,但它仍然会上下抖动1像素,尽管我期望这种效果在运行真实数据时会消失。 - Corey D