Šta je novo?

Zumiranje selektovane povrsine misom OpenGL

psycho84

Slavan
Učlanjen(a)
03.12.2007
Poruke
178
Poena
320
Moja oprema  
CPU & Cooler
Thermalright Assain King 90
Matična ploča
MSI B550M Pro-VDH Wifi
RAM
2x16GB 3000MHz G.Skill Aegis
GPU
RX6800 16GB Powercolor Reaper
Storage
WD SN550 1TB + Toshiba Canvio Basics external 3TB
Zvuk
Integrated + EIDA 9038D
PSU
Seasonic SGX 500W SFX-L
Kućište
SKTC HX Box 100
Monitor
Lenovo ThinkVision T24v 24"
Miš & tastatura
Drevo Gramr full RGB 75% mechanical Gateron Brown, Logitech Triathlon + MS IMO 1.1a
Ostale periferije
HifiMan Sundara CB
Mobilni telefon
iPhone 13 mini
Pristup internetu
  1. Optički internet
  2. Mobilni internet
Da li bi neko mogao da mi da neki predlog na koji nacin bi mogao ovo izvesti...Dakle treba mi da kad selektujem nesto na vec prikazanom openGL crtezu (u pitanju je 2D ali svejedno) da se to uveca u cijeli prozor...Znaci zelim da mi se u prozoru vidi samo ono sto sam selektovao (eventualno nesto malo sa strane ali to je pitanje koliko se zumira)...Ne koristim glut vec samo standardne openGL funkcije koje se koriste uz Visual C++ 2005...

Ono sto sam ja radio je nesto ovakvog tipa:

Kod:
mouseData.xMid = (mouseData.xEnd + mouseData.xStart) / 2;
mouseData.yMid = (mouseData.yEnd + mouseData.yStart) / 2;
gluLookAt(mouseData.xMid, mouseData.yMid , 10.0, mouseData.xMid , mouseData.yMid, 0.0, 0.0, 1.0, 0.0);
if(myRect.bottom > myRect.right)
	zoom = abs(myRect.bottom / (mouseData.yEnd - mouseData.yStart));
else
	zoom = abs(myRect.right / (mouseData.xEnd - mouseData.xStart));

//nakon cega ide zumiranje i iscrtavanje slike sa novim parametrima na ekran

mouseData predstavlja podatke dobijene sa misa na pocetku i kraju povlacenja kursora i srednju vrijednost...Je li trebam nesto drugacije da uradim da mi se sa gluLookAt postavi pogled na sredinu pravougaonika koji sam napravio selekcijom misa i sta???

Hvala svima!!!
 
Ako si u 2d modu koristi gluOrtho2D, gde zadajes 4 broja.. leva ivica, desna ivica, donja ivica, gornja ivica....
Opriliko ovako... kada dobijes kooridnate misa u indow sistemu, transformisi u opengl view sistem (koristeci prethodne vrednosti gluOrtho2D poziva.. levo, desno, gore, dole). Sada imas koordinatu misa u opengl view-u. Na osnovu te koordinate, izracunaj nove vrednosti za levo, deno, dole i gore i iscrtaj scenu ponovo.
Na pocetku crtanje scene pozovi gluOrtho2D sa vec pripremljenim parametrima. Ne zaboravi da resetujes projection matricu na identity pre nego sto pozoves gluOrtho2D.
E da... vidim da si pocetnik.. zapamti ovo: glOrtho, gluPerspective i glFrustum se koriste samo za GL_PROJECTION matricu. gluLookAt se koristi u modelview matrici. ostale funkcije za rad sa matricama se mogu koristiti u oba sliucaja. Ovo je bitno jer kasnije mozes imati problema sa osvetljenjem i noramlama, fog-om, ...
 
Ako si u 2d modu koristi gluOrtho2D, gde zadajes 4 broja.. leva ivica, desna ivica, donja ivica, gornja ivica....
Opriliko ovako... kada dobijes kooridnate misa u indow sistemu, transformisi u opengl view sistem (koristeci prethodne vrednosti gluOrtho2D poziva.. levo, desno, gore, dole). Sada imas koordinatu misa u opengl view-u. Na osnovu te koordinate, izracunaj nove vrednosti za levo, deno, dole i gore i iscrtaj scenu ponovo.
Na pocetku crtanje scene pozovi gluOrtho2D sa vec pripremljenim parametrima. Ne zaboravi da resetujes projection matricu na identity pre nego sto pozoves gluOrtho2D.
E da... vidim da si pocetnik.. zapamti ovo: glOrtho, gluPerspective i glFrustum se koriste samo za GL_PROJECTION matricu. gluLookAt se koristi u modelview matrici. ostale funkcije za rad sa matricama se mogu koristiti u oba sliucaja. Ovo je bitno jer kasnije mozes imati problema sa osvetljenjem i noramlama, fog-om, ...

Vidis u dosadasnjem iscrtavanju se nije koristio gluOrtho2d za to podesavanje ekrana nego se podsavalo uz gluLookAt...Dakle upao sam u projekat koji je prije mene neko drugi radio a ja trebam samo da dodam neke jos funkcije...Evo kako se podesavalo prije iscrtavanja:

Kod:
glViewport(0, 0, cx, cy); //cx i cy su koordinate donjeg lijevog ugla prozora
glMatrixMode(GL_PROJECTION);    
glLoadIdentity();               
gluPerspective(45.0f, (GLfloat)cx/(GLfloat)cy, 0.1f, 1000.0f);
glMatrixMode(GL_MODELVIEW);     
glLoadIdentity();

A posle pri samom iscrtavanju se prvo radi ovo:

Kod:
glClearColor(1.0 , 1.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity(); 
gluLookAt(xpos, ypos, zpos, xpos, ypos, 0.0, 0.0, 1.0, 0.0);
glPushMatrix();
glRotated(180, 1.0, 0.0, 0.0);


I kako bi transformisao koordinate iz windows-a u open gl uz gluOrtho2d ranije koordinate?I da drugi problem je sto ce svejedno posle ovaj gluLookAt pri crtanju da to sve opet vrati jer mi se sve ovo nalazi u DLL-u kome samo proslijedjujem podatke x,y,z a on obavlja crtanje...Jedino da mijenjam DLL...Jel mozda postoji neki nacin kako da proracunam ove koordinate misa u openGL pa da ih dam gluLookAt da se podesi pa da zumiram dovoljno da ispuni cijeli ekran (sto sam mislim pogodio,jedini problem je pozicija na crtezu na koju se gleda)...I hvala na utrosenom vremenu za ovaj savjet...Pozz
 
Rjesenje nadjeno...Sad me samo zanima kako bi mogao izvesti da se iscrta taji pravougaonik koji bi oznacavao sta je selektovano dok se mis pomjera...Jel i tu trebam preracunati koordinate i uz samo:

Kod:
glBegin(GL_LINE_LOOP);		
glVertex2d(mouseData.xStart, mouseData.yStart);
glVertex2d(myPoint.x, mouseData.yStart); 
glVertex2d(myPoint.x, myPoint.y);
glVertex2d(mouseData.xStart, myPoint.y);
glEnd();

Sa preracunatim koordinatama bi trebalo ovako da se iscrta?
 
Poslednja izmena:
Vrh Dno