[英]C# How to get the size of an object generated in OpenGL from Tao library
我正在構建一個應用程序,它可以使用 TAO.FreeGlut 和 TAO.OpenGL 引用在 SimpleOpenGlControl 中顯示 STL 文件的 3D 視圖。 我需要獲取某些功能的顯示 3D 模型的大小,但找不到。 如何獲取顯示對象的大小?
我在這里找到了一個可以顯示 STL 文件的基本項目https://github.com/batu92k/STL-Viewer
但它幾乎沒有解釋,評論是在土耳其語中...
我也在這里找到了一些信息https://www.codeproject.com/Articles/23778/OpenGL-3D-Navigation2-With-Tao-and-C-Tao-OpenGL-Ta
但同樣,沒有太多關於大小的解釋。
OpenGL監視器代碼:
Batu_GL glController;
Batu_GL.VAO_TRIANGLES modelVAO;
BaseConfig baseConfig = new BaseConfig();
int scale = 30;
int rotationZ = 0;
public OpenGLMonitor()
{
/* dot/comma selection for floating point numbers */
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
InitializeComponent();
glController = new Batu_GL();
glController.initialize(monitor);
glController.glInit(monitor, Batu_GL.Ortho_Mode.CENTER);
rotationZ = baseConfig.rotationZ;
}
public void Draw()
{
glController.glDinamik(monitor, Batu_GL.Ortho_Mode.CENTER);
//--------------------------------------------
Gl.glEnable(Gl.GL_LIGHTING); // Activer l'éclairage
Gl.glEnable(Gl.GL_LIGHT1);
//--------------------------------------------
//--Lumiere 1
Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_AMBIENT_AND_DIFFUSE, baseConfig.light_1); // Le type et le nombre de feux sont déterminés"
Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_SPECULAR, baseConfig.specular); // La réflexion est sélectionnée parmi les types d'éclairage. Le tableau spéculaire est utilisé pour déterminer les caractéristiques de la lumière de réflexion.
Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, baseConfig.lightPos); // La position de la lumière "0" provient du tableau "lightpos"
Gl.glEnable(Gl.GL_LIGHT0); // La lumière "0" est activée
//-------------------------------------------
//--Lumiere 2
Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_AMBIENT_AND_DIFFUSE, baseConfig.light_1);
Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_SPECULAR, baseConfig.specular);
Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_POSITION, baseConfig.lightPos2);
Gl.glEnable(Gl.GL_LIGHT1);
//-------------------------------------------
Gl.glEnable(Gl.GL_COLOR_MATERIAL); // Activation du matériau de couleur de la pièce
Gl.glColorMaterial(Gl.GL_FRONT, Gl.GL_AMBIENT_AND_DIFFUSE);
Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, baseConfig.specref);
Gl.glMateriali(Gl.GL_FRONT, Gl.GL_SHININESS, 15); // Ajuster le niveau de luminosité (bonne réflexion de "1")
Gl.glEnable(Gl.GL_NORMALIZE); // Adoucissement de la transmission de la lumière
//-------------------------------------------
Gl.glRotatef(baseConfig.rotationX, -1.0f, 0.0f, 0.0f);
Gl.glRotatef(baseConfig.rotationZ, 0.0f, 0.0f, 1.0f);
rotationZ++;
rotationZ = rotationZ % 360;
Gl.glTranslatef(0.0f, 0.0f, -150.0f);
modelVAO.Draw();
monitor.SwapBuffers();
}
private void fileSelectBt_Click(object sender, EventArgs e)
{
OpenFileDialog stldosyaSec = new OpenFileDialog();
stldosyaSec.Filter = "STL Files|*.stl;*.txt;";
scale = (int)(0.05 * monitor.Width);
if (stldosyaSec.ShowDialog() == DialogResult.OK)
{
lblFilename.Text = stldosyaSec.SafeFileName;
STLReader stlReader = new STLReader(stldosyaSec.FileName);
TriangleMesh[] meshArray = stlReader.ReadFile();
modelVAO = new Batu_GL.VAO_TRIANGLES();
STLExport stlExporter = new STLExport();
modelVAO.parameterArray = stlExporter.Get_Mesh_Vertices(meshArray);
modelVAO.normalArray = stlExporter.Get_Mesh_Normals(meshArray);
modelVAO.color = Color.AntiqueWhite;
modelVAO.scale = new float[3] { scale, scale, scale };
if (!stlReader.Get_Process_Error())
{
//rotationX = 0;
drawTimer.Enabled = true;
//fileSelectBt.BackColor = Color.DeepSkyBlue;
}
else
{
drawTimer.Enabled = false;
//fileSelectBt.BackColor = Color.Tomato;
/* if there is an error, deinitialize the gl monitor to clear the screen */
glController.glInit(monitor, Batu_GL.Ortho_Mode.CENTER);
monitor.SwapBuffers();
}
}
else
{
// intentionally left blank
}
}
private void drawTimer_Tick(object sender, EventArgs e)
{
Draw();
}
} }
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = minPos.x + "";
label2.Text = minPos.y + "";
label3.Text = minPos.z + "";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.