2012-05-21 2 views
0

Я пытаюсь установить некоторые линии петли на 1 пиксель шириной, но я всегда получаю некоторое сглаживание эффект, когда ширина число нечетное числоя не могу установить Line Width в 1 пиксель в OpenGL

Вот некоторые пример кода:

    gl2.glLineWidth(1.0f); 
        gl2.glBegin(GL2.GL_LINES); 
         gl2.glVertex2i(-10, 0); 
         gl2.glVertex2i(-10, 10); 
        gl2.glEnd(); 

        gl2.glLineWidth(2.0f); 
        gl2.glBegin(GL2.GL_LINES); 
         gl2.glVertex2i(-10, -10); 
         gl2.glVertex2i(-10, 0); 
        gl2.glEnd(); 

        gl2.glLineWidth(3.0f); 
        gl2.glBegin(GL2.GL_LINES); 
         gl2.glVertex2i(-10, -20); 
         gl2.glVertex2i(-10, -10); 
        gl2.glEnd(); 

        gl2.glLineWidth(4.0f); 
        gl2.glBegin(GL2.GL_LINES); 
         gl2.glVertex2i(-10, -30); 
         gl2.glVertex2i(-10, -20); 
        gl2.glEnd(); 

        gl2.glLineWidth(5.0f); 
        gl2.glBegin(GL2.GL_LINES); 
         gl2.glVertex2i(-10, -40); 
         gl2.glVertex2i(-10, -30); 
        gl2.glEnd(); 

производит это (в порядке сверху вниз):

http://dl.dropbox.com/u/1401029/LineWidth.png

gl2.glIsEnabled (GL2.GL_LINE_SMOOTH) возвращает ложь и gl2.glhint оленья кожа себе em, чтобы повлиять на него вообще

любые идеи?

+0

Какова ваша матрица проекции? – Luca

+0

Ciao Luca :) Это тождественный gl.glMatrixMode (GL2.GL_PROJECTION); gl.glLoadIdentity(); // карта двумерной ширины ширины * высота на OpenGL glu.gluOrtho2D (-width/2, (ширина + 1)/2, - (высота + 1)/2, высота/2); gl.glMatrixMode (GL2.GL_MODELVIEW); gl.glLoadIdentity(); – elect

ответ

1

Согласно the documentation, JOGL по умолчанию имеет значение MSAAx2.

setNumSamples(1) во время инициализации должен сделать трюк, но вы полностью потеряете сглаживание. Как насчет вызова glLineWidth с NumSamples раз требуемое значение?

+0

Он, похоже, не работает ... – elect

+0

Какое решение? Можете ли вы подтвердить (или нет), что для полигонов setNumSamples() отключает сглаживание? – Calvin1602

1

Перед тем, как уточнить, что OpenGL specification is not pixel-exact. Действительно, вы не можете претендовать на то, чтобы иметь тот же результат при каждой реализации OpenGL.

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

От вас комментарии, это то, как вы настроите вида модели/матрицу проекции:

gl.glMatrixMode(GL2.GL_PROJECTION); 
gl.glLoadIdentity(); // map a 2D bild width*height on OpenGL 
glu.gluOrtho2D(-width/2, (width+1)/2, -(height+1)/2, height/2); 
gl.glMatrixMode(GL2.GL_MODELVIEW); 
gl.glLoadIdentity(); 

Я не знаю, width или height типы и значения, даже в иллюминатор ... но, чтобы дать вам это ответьте, я предполагаю, что у вас есть видовое окно width x height, где width и height - это переменные, которые вы используете в своем коде, и их значения установлены на 100.

Действительно вам предложат вам настроить вашу матрицу проекции таким образом:

gl.glMatrixMode(GL2.GL_PROJECTION); 
gl.glLoadIdentity(); // map a 2D bild width*height on OpenGL 
glu.gluOrtho2D(-width/2, +width/2, -height/2, height/2); 
gl.glMatrixMode(GL2.GL_MODELVIEW); 
gl.glLoadIdentity(); 

Чтобы получить максимальную масштабируемость, я предлагаю вам, чтобы добавить следующую видовую матрицу перевода:

gl.glMatrixMode(GL2.GL_MODELVIEW); 
gl.glLoadIdentity(); 
gl.glTranslate(0.376, 0.376, 0.0); 

Я DON» t знать особенности java OpenGL привязки, но также и то, что Calvin1602 сказали (отключить мультисэмплинг).

 Смежные вопросы

  • Нет связанных вопросов^_^