バックグラウンド
非常に単純な CAD ビューアーを作成しようとしています。私は.STLファイルから始めることにしました.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
問題
手動で三角形を配置すると、私の方法はうまくいくようですが、上記のようにすると、それらがどこにあるのかわかりません。これは 2 つの理由のうちの 1 つだと思います。(X=0, Y=0, Z= 0)、
これが問題になる可能性がある場合、自分の世界のサイズを知る、または変更するにはどうすればよいですか?
これまでのところ、私の世界を設定するために私が使用しているものは次のとおりです。
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()
これが問題ではないように思われる場合は、三角形に正しく移動していない可能性がありますか? 私は現在、翻訳を使用してそれらにアクセスします:
Gl.glTranslatef(view_location.x, view_location.y, view_location.z)
上記の座標に近い座標を使用し、ズームとパンを試みましたが、まだ何も見つかりません。