Code:
#include <windows.h>
#include <gl/Gl.h>
#include "glut.h"
#include <fstream>
#include <iostream>
using namespace std;
void myInit(void)
{
glClearColor(0.5,0.5,0.5,1.0);
glColor3f(0.0f, 0.0f, 0.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 400.0, 0.0, 400.0);
}
void drawPolyLineFile(char * fileName)
{
/*
ifstream in_stream;
in_stream.open(fileName);
if(in_stream.fail()){
cout << "Error Opening the Inputfile" ;
return;
}
GLint numpolys, numLines, x ,y;
in_stream>> numpolys;
for(int j = 0; j <numpolys; j++)
{
in_stream>> numLines;
glBegin(GL_LINE_STRIP);
for (int i = 0; i <numLines; i++)
{
in_stream>> x >> y;
glVertex2i(x, y);
}
glEnd();
}
glFlush();
in_stream.close();
*/
glColor3b( 255, 255, 255 );
glBegin(GL_LINE_LOOP);
glVertex2i(10, 10);
glVertex2i(10, 400 - 10);
glVertex2i(400-10, 400 - 10);
glVertex2i(400-10, 10);
glEnd();
glBegin( GL_LINES );
glVertex2i(10, 10);
glVertex2i(210, 210);
glEnd();
}
void drawCrtezTile(int N){
glClear (GL_COLOR_BUFFER_BIT);
char * name = "crtez.dat" ;
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++){
int L=400/N;
glMatrixMode( GL_MODELVIEW );
glLoadIdentity( );
glViewport (i*L, j*L, L, L);
drawPolyLineFile(name);
}
}
}
void drawCrtezFlipTile(int N){
glClear (GL_COLOR_BUFFER_BIT);
char * name = "crtez.dat" ;
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++){
int L=400/N;
glMatrixMode( GL_MODELVIEW );
glLoadIdentity( );
if ( ( i ^ j ) & 1 )
{
float m[] =
{
-1, 0, 0, 0, // mirror oko x ose
0, -1, 0, 0, // mirror oko y ose zajedno daju rotaciju 180 CCW
0, 0, 1, 0, // 2D pa ne diramo z osu
400, 400, 0, 1 }; // pomeri za ( 400, 400 )
glLoadMatrixf( m );
}
glViewport (i*L, j*L, L, L);
drawPolyLineFile(name);
}
}
}
void drawZoom (){
}
void drawZoomOut(){
}
void myDisplay(void)
{
//drawCrtezTile(8);
drawCrtezFlipTile (10);
// drawZoom();
// drawZoomOut();
}
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100, 150);
glutCreateWindow("Crtez");
glutDisplayFunc(myDisplay);
glutIdleFunc(myDisplay);
myInit();
glutMainLoop();
}
Ostale funkcije resavas tako sto pravis kompoziciju sklairanja i translacije MV matrice, a nije bas da sam shvatio kriterijume (verovatno po obliku objekta koji iscrtavas).
P.S. Vrati f-ju drawPolyLineFile na original (nisam imao dat fajl)