[ Malena perl @ 13.02.2006. 00:48 ] @
Radi se o grafiksu, kada jedan crtez (viewport) treba da poredjam u 10 kolone, 10 reda.

Sledeći treba da svaki drugi viewport preokrenem naglavacke, znaci, prvi redovno, drugi 180 stepeni okrenut CCW.

Treca funckija treba da postavi viwport na sredinu i da se povecava (Zoom-ira) sve dok nije velicina prozora.

Cetvrta treba da mi smanjuje sliku.

Napravila sam sve ali tri funcije mi nedostaju. Da li ima neko ideju? Hvala

#include <windows.h>
#include <gl/Gl.h>
#include <gl/glut.h>
#include <fstream>
#include <iostream>
using namespace std;

void myInit(void)
{
glClearColor(1.0,1.0,1.0,0.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();
}
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=640/N;
glViewport (i*L, j*L, L, L);
drawPolyLineFile(name);
}
}

void drawCrtezFlipTile(int N){

}

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);
myInit();
glutMainLoop();
}


[ dragansm @ 13.02.2006. 10:51 ] @
FUNCTION drawCrtezFlipTile( N )
FOR i
FOR j
glViewport (i*L, j*L, L, L);

glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
if ( ( i + j ) % 2 )
{
glOrtho( 1, -1, 1, -1, -1, 1 ); // okreni naopako
}
else
{
glOrtho( -1, 1, -1, 1, -1, 1 ); // normalno
}
glMatrixMode( GL_MODELVIEW );
glLoadIdentity( );
drawPolyLineFile(name);

END_FOR j
END_FOR i

nadam se da ce ti ovo pomoci oko drugog zadatka
Bazirano na kratkom pregledu primera
http://www.cs.rit.edu/usr/loca...penGL/ExamplesLab3/multiview.c
sto ce reci, dok ne otkucas, necemo znati da li radi :(

Posto ti je prozor kvadratnog oblika stavi viewport preko celog ekrana (400x400) i to je full-zoom osim ako se ne trazi da se analiziraju tacke iz poligona i da se nadje minimalni AABB, tj. da prikazes poligon sa sto je moguce vecim zoom-om?

"Cetvrta treba da mi smanjuje sliku"?! kako ili sta
[ Malena perl @ 13.02.2006. 11:18 ] @
Hvala ti Dragane,

treca je zoom a cetvrta zoom - out....

sad cu da probam ovo sto si mi postavio
[ Malena perl @ 13.02.2006. 12:21 ] @
Nesto mi ne valja. Ne daje mi nikakav error message pojavi mi se prozor ali mi se ne otvara slika.
[ Malena perl @ 13.02.2006. 12:24 ] @
a prozor cu da stavim 640 X 400 umesto 400x400
[ dragansm @ 13.02.2006. 12:27 ] @
Hajde baci ceo projekt ( source + data ) na forum ili na mail...
[ Malena perl @ 13.02.2006. 12:59 ] @
mislim da sam ti poslala preko e-maila....mozes proveriti?

Hvala Ti puno
[ Malena perl @ 13.02.2006. 13:10 ] @
ako sam potefila(nisam bas vicna sa ovom diskusijom, ali mi se sve vise svidja) poslala sam ti crtez.dat u drugom e-mail-u. Valjda je otislo.

[ dragansm @ 13.02.2006. 13:20 ] @
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();



Sledeci zadatak resavas samo sto pravis kompoziciju sklairanja i translacije MV matrice, a nije bas da sam shvatio kriterijume. Vrati f-ju drawPolyLineFile na original (nisam imao dat fajl)

[ dragansm @ 13.02.2006. 13:23 ] @
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)

[ Malena perl @ 13.02.2006. 13:29 ] @
hvala ti, pogledacu kasnije. Ovde je 5 sati i 30 ujutru i uskoro cu morati u skolu. Kada se vratim iz skole, javicu se.
Pozdrav
[ Malena perl @ 13.02.2006. 13:35 ] @
hej Dragane, radi, - radi ko ludo, nece da prestane...popravicu kasnije...hvala :)
[ Malena perl @ 13.02.2006. 13:49 ] @
ne znam kako da ga zaustavim. treba da nacrta 10 crteza u koloni i 10 u redovima i nacrta ali onda izbrise screen i nastavlja da crta....kad nije radio, nije, a sada radi ko navijen :(
[ dragansm @ 13.02.2006. 14:08 ] @
dodaj na kraju iscrtavanja komandu
glutSwapBuffers( );
pa ce biti prijatnije za oko
P.S. mail mi nije stigao, ko zna sta mi je podeseno u profilu i gde to vodi. Ako se ne snadjes oko zoom-iranja posalji dat file na draganssmiljanic[at]yahoo.com
[ dragansm @ 13.02.2006. 14:15 ] @
Ukoliko ti je eksplicitno receno da se funkcija zove drawCrtezFlipTile, sa akcentom na Flip onda se ne radi o rotaciji za 180 nego o slici u ogledalu, i tad matrica mora da ima oblik:
-1, 0, 0, 0, // mirror oko x ose
0, 1, 0, 0,
0, 0, 1, 0, // 2D pa ne diramo z osu
400, 0, 0, 1
ili
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
0, 400, 0, 1

zavisno da li ces mirror po vertikalnoj ili horizontalnoj osi. Inace, bolje da je drugacije nazoves.
[ Malena perl @ 14.02.2006. 02:44 ] @
Poslala sam Ti Dragane. Dve funkcije perfektno rade. Ne "trckaraju"vise. Iscrta 10 reda i 10 kolona, pa onda pocne sa drugom gde se svaka druga preokrene. Sada mi treba samo Zoom i Zoom out. Na tom cu nocas raditi, bicu na vezi.

Hvala, bas sam zadovoljna.