Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL使查看器适合对象(用VB.NET编写,但C#答案也可以)_C#_Vb.net_Opengl_Opentk_Tao Framework - Fatal编程技术网

OpenGL使查看器适合对象(用VB.NET编写,但C#答案也可以)

OpenGL使查看器适合对象(用VB.NET编写,但C#答案也可以),c#,vb.net,opengl,opentk,tao-framework,C#,Vb.net,Opengl,Opentk,Tao Framework,背景 我正在尝试制作一个非常简单的CAD查看器。我选择从.STL文件开始,对于那些不知道的人来说,这些文件只是一堆三角形,然后在屏幕上形成一部分。从大多数CAD软件输出时,如果使用STL,则可以将其输出为文本文件版本。这列出了所有要点: solid facet normal -7.8662990E-02 +8.3699658E-01 -5.4152455E-01 outer loop vertex +3.3529416E+03 -3.7456115E+02 +8.529326

背景

我正在尝试制作一个非常简单的CAD查看器。我选择从.STL文件开始,对于那些不知道的人来说,这些文件只是一堆三角形,然后在屏幕上形成一部分。从大多数CAD软件输出时,如果使用STL,则可以将其输出为文本文件版本。这列出了所有要点:

solid
facet normal -7.8662990E-02 +8.3699658E-01 -5.4152455E-01
outer loop      
  vertex   +3.3529416E+03 -3.7456115E+02 +8.5293264E+02
  vertex   +3.3530518E+03 -3.7467327E+02 +8.5274334E+02
  vertex   +3.3527449E+03 -3.7467680E+02 +8.5278246E+02
endloop
endfacet
facet normal -1.7741169E-02 +8.8266388E-01 -4.6966979E-01
outer loop      
  vertex   +3.3527449E+03 -3.7467680E+02 +8.5278246E+02
  vertex   +3.3522178E+03 -3.7464933E+02 +8.5285399E+02
  vertex   +3.3524442E+03 -3.7463108E+02 +8.5287975E+02
endloop
endfacet
等等。。然后,我可以基本上循环通过所有点并创建三角形:

Dim i As Integer = 0
        Do Until i + 2 >= ListView1.Items.Count
            Gl.glPushMatrix()
            Gl.glBegin(Gl.GL_TRIANGLES)

            Gl.glColor3f(1.0, 0.0, 0.0)
            Gl.glVertex3f(Convert.ToSingle(ListView1.Items.Item(i).SubItems(0).Text), Convert.ToSingle(ListView1.Items.Item(i).SubItems(1).Text), Convert.ToSingle(ListView1.Items.Item(i).SubItems(2).Text))

            Gl.glColor3f(1.0, 0.0, 0.0)
            Gl.glVertex3f(Convert.ToSingle(ListView1.Items.Item(i + 1).SubItems(0).Text), Convert.ToSingle(ListView1.Items.Item(i + 1).SubItems(1).Text), Convert.ToSingle(ListView1.Items.Item(i + 1).SubItems(2).Text))


            Gl.glColor3f(1.0, 0.0, 0.0)
            Gl.glVertex3f(Convert.ToSingle(ListView1.Items.Item(i + 2).SubItems(0).Text), Convert.ToSingle(ListView1.Items.Item(i + 1).SubItems(1).Text), Convert.ToSingle(ListView1.Items.Item(i + 2).SubItems(2).Text))

            Gl.glEnd()
            Gl.glPopMatrix()

            i = i + 3
        Loop
问题

当我手动放入三角形时,我的方法似乎有效,但当按照上面所示进行操作时,我找不到它们的位置。我认为这是两个原因之一。或者我的世界不够大,无法容纳指定的位置,因为当我开始查看(X=0,Y=0,Z=0)时,有些位置在(X=3352,Y=-374,Z=852)的范围内

如果这可能是问题所在,我如何知道或改变我的世界的大小

以下是迄今为止我用来建立我的世界的方法:

    GLCtrl.InitializeContexts()
    Gl.glClearColor(0, 0, 0, 0)

    Gl.glMatrixMode(Gl.GL_PROJECTION)
    Gl.glLoadIdentity()                     
    Gl.glOrtho(-1, 1, -1, 1, -1, 1)         
    Gl.glMatrixMode(Gl.GL_MODELVIEW)       
    Gl.glLoadIdentity()                    

    GLCtrl.Focus()

    'start the gameloop

    gameLoop()
如果这似乎不是问题所在,那么可能是我没有正确地绘制三角形?我目前使用translate访问他们:

 Gl.glTranslatef(view_location.x, view_location.y, view_location.z)

我使用上面列出的坐标,并尝试缩放和平移,但仍然找不到任何东西。

我会回答我自己的问题。答案很简单,Gl.glTranslatef与我的想法相反。解决办法是:

Gl.glTranslatef(-view_location.x, -view_location.y, -view_location.z)