|
[ 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.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|