我必须用 openGL 显示 stl 模型。(SharpGL。)我想设置初始视图,使模型位于屏幕的中心并大致填满它。我已经计算了模型的边界立方体并将视图设置为:(sceneBox 是一个 Rect3D - 它存储左后下角的位置和大小)
// Calculate viewport properties
double left = sceneBox.X;
double right = sceneBox.X + sceneBox.SizeX;
double bottom = sceneBox.Y;
double top = sceneBox.Y + sceneBox.SizeY;
double zNear = 1.0;
double zFar = zNear + 3 * sceneBox.SizeZ;
double aspect = (double)this.ViewportSize.Width / (double)this.ViewportSize.Height;
if ( aspect < 1.0 ) {
bottom /= aspect;
top /= aspect;
} else {
left *= aspect;
right *= aspect;
}
// Create a perspective transformation.
gl.Frustum(
left / ZoomFactor,
right / ZoomFactor,
bottom / ZoomFactor,
top / ZoomFactor,
zNear,
zFar);
// Use the 'look at' helper function to position and aim the camera.
gl.LookAt(
0, 0, 2 * sceneBox.SizeZ,
sceneBox.X + 0.5 * sceneBox.SizeX, sceneBox.Y + 0.5 * sceneBox.SizeY, sceneBox.Z - 0.5 * sceneBox.SizeZ,
0, 1, 0);
这适用于我的小型手工测试模型:(它的盒子大小为 2*2*2 单位)
这正是我想要的。(黄线表示边界框)
但是,当我加载一个大约 60*60*60 单位大的 stl 模型时,我得到了这个:
它非常小而且太高了。
我应该改变什么才能让它工作?
这是完整的东西:https ://dl.dropbox.com/u/17798054/program.zip
您也可以在 zip 中找到此型号。引用的代码在KRGRAAT.SZE.Control.Engine.GLEngine.UpdateView()