// 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