Что заставляет мою систему рисования линий рисовать линии, интенсивность которых уменьшается от начала до конца, используя JOGL? - PullRequest
0 голосов
/ 13 сентября 2018

Для школьного проекта я вызываю функцию JOGL glVertex2f(x, y) в цикле, чтобы построить один пиксель за раз, чтобы нарисовать линию.Я понимаю, что это странный способ использовать JOGL, но смысл в том, чтобы реализовать алгоритм рисования линий.

Перед началом цикла я звоню var3.glBegin(GL.GL_LINE_LOOP).Другие параметры, которые я пытался передать на glBegin(), привели к тому, что пиксели не активировались.

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

public class LineScanConverter {
    public static void main (final String args[]) {

        final GLProfile glprofile = GLProfile.getDefault();
        final GLCapabilities glcapabilities = new GLCapabilities( glprofile );
        final GLCanvas glcanvas = new GLCanvas( glcapabilities );

        glcanvas.addGLEventListener( new GLEventListener() {

            @Override
            public void reshape(GLAutoDrawable glautodrawable, int x, int y, int width, int height ) {
                LineRenderer.setup( glautodrawable.getGL().getGL2(), width, height );
            }

            @Override
            public void init( GLAutoDrawable glautodrawable ) {
            }

            @Override
            public void dispose( GLAutoDrawable glautodrawable ) {
            }

            @Override
            public void display( GLAutoDrawable glautodrawable ) {
                LineRenderer.renderLine(glautodrawable.getGL().getGL2(), 3, 7, 337, 553);
            }
        });

        final Frame frame = new Frame( "Line Scan Converter" );
        frame.add( glcanvas );
        frame.addWindowListener( new WindowAdapter() {
            public void windowClosing( WindowEvent windowevent ) {
                frame.remove( glcanvas );
                frame.dispose();
                System.exit( 0 );
            }
        });

        frame.setSize( 640, 480 );
        frame.setVisible( true );

    }
}


public class LineRenderer {

    public static void setup(GL2ES1 var0, int var1, int var2) {
        var0.glMatrixMode(5889);
        var0.glLoadIdentity();
        GLUgl2es1 var3 = new GLUgl2es1();
        var3.gluOrtho2D(0.0F, (float)var1, 0.0F, (float)var2);
        var0.glMatrixMode(5888);
        var0.glLoadIdentity();
        var0.glViewport(0, 0, var1, var2);
    }


    public static void renderLine(GL2ES1 var0, int x0, int y0, int x1, int y1) {
        var0.glLoadIdentity();
        ImmModeSink var3 = ImmModeSink.createFixed(9, 3, 5126, 3, 5126, 0, 5126, 0, 5126, 35044);
        var3.glBegin(GL.GL_LINE_LOOP);
        var3.glColor3f(1.0F, 0.0F, 0.0F);

        float dx = x1 - x0;
        float dy = y1 - y0;

        for (float i = 0; i <= (dx - 1); i++) {
            float x = x0 + i;
            float y = ((dy / dx) * i) + y0;
            y = Math.round(y);
            var3.glVertex2f(x, y);
        }

        var3.glEnd(var0, true);
    }
}
...