#!/usr/bin/perl -w use strict; use warnings; use OpenGL qw/ :all /; use OpenGL::Config; glutInit(); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(400,400); glutCreateWindow("my OpenGL program"); glClearColor(0,0,0,255); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); gluOrtho2D(-100,100,-100,100); glutDisplayFunc(\&mydis); glutMainLoop(); return 0; sub mydis() { my $x0=-100; my $y0=-85; my $xend=93; my $yend=26; my $dx=abs($xend-$x0); my $dy=abs($yend-$y0); my $p=2*$dy-$dx; my $twoDy=2*$dy; my $twoDyMinusDx=2*($dy-$dx); my $x; my $y; glPointSize(1); glColor3f(255,0,255); if ($x0>$xend) { $x=$xend; $y=$yend; $xend=$x0; } else { $x=$x0; $y=$y0; } glBegin(GL_POINTS); glVertex2f($x,$y); glEnd(); glFlush(); for (;$x<$xend;$x++) { if ($p<0) { $p+=$twoDy; } else { $y++; $p+=$twoDyMinusDx; } glBegin(GL_POINTS); glVertex2f($x,$y); glEnd(); } glFlush(); glColor3f(0,255,0); glBegin(GL_LINES); glVertex2f(-100,0); glVertex2f(100,0); glEnd(); glBegin(GL_LINES); glVertex2f(0,-100); glVertex2f(0,100); glEnd(); glFlush(); }