stl モデルを openGL で表示する必要があります。(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()