// przyklad demonstruje uzycie window-view mapping w OpenGL
#include <gl/glut.h>
#include <cmath>
using namespace std;
const double PI = 3.14159;
 
// setWindow ustawia okno w świecie
void setWindow(double left, double right, double bottom, double top)
{
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(left, right, bottom, top);
}
 
// myDisplay jest wywoływana przez system zawsze, gdy zaistnieje potrzeba odrysowania okna
void myDisplay()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glBegin(GL_LINE_STRIP);
	
	// poniższy używa współrzędnych świata
	for(double x=-14.0; x<=14.0; x+=0.05)
	{
		if(abs(x)<=0.000001)
			glVertex2d(0.0, 1.0);
		else
			glVertex2d(x, sin(PI*x)/(PI*x));
	}
	glEnd();
	glFlush();
}
 
void myInit()
{
	glClearColor(1.0, 1.0, 1.0, 1.0); // white background
	glColor3d(0.0, 0.0, 1.0);		  // blue line
	glLineWidth(2.0); 				  // line width
}
 
int main(int argc, char** argv)
{
	// inicjalizacja GLUTa
	glutInit(&argc, argv);
	
	// rozmiary okna
	const int X_SIZE = 800;
	const int Y_SIZE = 600;
	
	// inicjalizacja okna
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(X_SIZE, Y_SIZE);
	glutInitWindowPosition(200,50);
	glutCreateWindow("The Sinc Function");
 
	// inicjalizacja kolorów, grubości linii etc.
	myInit();
	
	// ustawiamy okno w świecie (ustawiamy kamerę)
	setWindow(-15.0, 15.0, -0.5, 1.5);
 
	// ustawiamy vieport (fragment okna w którym rysujemy)
	// zazwyczaj jest to całe okno
	glViewport(0, 0, X_SIZE, Y_SIZE); 
	
	// ustawiamy funkcję rysującą
	glutDisplayFunc(myDisplay);
	
	// START
	glutMainLoop();
}

Zadanie 1 Whirling swirls

Zadanie 2 Truchet tiles