OpenGL Fitting Viewer для объекта (написанный на VB .NET, но ответы на C# тоже будут работать)

Фон

Я пытаюсь сделать очень простой просмотрщик САПР. Я решил начать с файлов.STL, которые для тех из вас, кто не знает, представляют собой просто набор треугольников, которые затем образуют часть на экране. При выводе из большинства программ САПР, он может быть выведен в виде версии текстового файла, если 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=3352, Y=-374, Z=852), когда я начинаю просмотр (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)

и я использую координаты, близкие к тем, что я перечислил выше, и пытаюсь изменить масштаб изображения, но все равно ничего не могу найти.

1 ответ

Решение

Я на самом деле отвечу на свой вопрос. Ответ прост: Gl.glTranslatef обратен тому, что я думал. Решение:

Gl.glTranslatef(-view_location.x, -view_location.y, -view_location.z)
Другие вопросы по тегам