我必须用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单元的箱体尺寸)
这正是我想要的。 (黄线显示边框)
但是,当我加载一个STL模型,这是约60 * 60 * 60单位大,我得到这个:
这是非常小的,太远了。
我该如何改变才能使其工作?
下面是完整的东西:https://dl.dropbox.com/u/17798054/program.zip
你可以找到在zip这种模式也是如此。引用的代码位于KRGRAAT.SZE.Control.Engine.GLEngine.UpdateView()
太棒了,谢谢:) – 2013-03-04 10:41:43
没问题。 PS。我真的很讨厌tg,但这似乎是使用LookAt函数最简单的方法。 – Arek 2013-03-04 19:31:41