Podesavanje koordinata

poruka: 4
|
čitano: 875
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Podesavanje koordinata

Ovako, imam video:  640X480.

U video se nalazi u openGL prozoru (nejde prek cijelog prozora,pozicioniran je negdje unutar):

e sad, koordinate su mu sljedece: bootom je: -1, top je 1, left side je (640/480 = 1.3333..) a right side -1.3333..

 

kako da ja svoje koordinate misa postimam prema tome?

koordinate misa dobivam ovako:

float blabla::blabla1(Cpoint &point){

return point.x; // npr. samo za x

}

 

tu je gornji lijevi kut (0,0), kad kliknem na desni kraj videa dobim nesto ovako 707.200012, a trebala bi postimati da bude -1.33333...

 

Kakav prijedlog od kuda da krenem??

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
RE: Podesavanje koordinata
danijela kaže...

Ovako, imam video:  640X480.

U video se nalazi u openGL prozoru (nejde prek cijelog prozora,pozicioniran je negdje unutar):

e sad, koordinate su mu sljedece: bootom je: -1, top je 1, left side je (640/480 = 1.3333..) a right side -1.3333..

 

kako da ja svoje koordinate misa postimam prema tome?

koordinate misa dobivam ovako:

float blabla::blabla1(Cpoint &point){

return point.x; // npr. samo za x

}

 

tu je gornji lijevi kut (0,0), kad kliknem na desni kraj videa dobim nesto ovako 707.200012, a trebala bi postimati da bude -1.33333...

 

Kakav prijedlog od kuda da krenem??

Ako sam dobro shvatio, zelis da ti za x koordinatu 0 funkcija vrati -1.3333, a za 640 vrati 1.3333? Znaci radi se o obicnoj afinoj transformaciji, kad se malo sredi onda za koordinatu x izmedu 0 i 640, trebas vratiti:

 

(x - 320) / 480

 

Za y koordinatu je slično, ali obratno jer koordinate idu "u krivom smjeru" i :

 

(240 - y) / 480

15 godina
neaktivan
offline
RE: Podesavanje koordinata

Ovako, malo detaljnije koji je točno problem:

 

imam dakle kod:

 

float aspect = (float)vt2->frame->width / (float)vt2->frame->height; //frame je dakle current frame

float gl_aspect = (float)->vt2->gl_image->width / (float)->vt2->gl_image->height; // gl_image je opengl window image

 

p = m_Detector->aamS->mGlobalShape.GetPoint(k); // GetPoint mi vraca specific point, znaci neku tocku na videu. na videu imam snimljeno lice i taj getpoint npr. vraca tocku tj koordinatu neke tocke npr na nosu(to je recimo tocka 2)

 

vt2->fbft->projection->data.fl[2*2] = ((p.x - vt2->frame->width/2) / (vt2->frame->width/2))*gl_aspect; // kada dohvatim samo p.x za tocku 2 dobijem PRECIZNO:  -342.857147

vt2->fbft->projection->data.fl[2*2+1] = ((p.y - vt2 ->frame->height/2)/(vt2->frame->width/2))*aspect;

 

 

i sada moja fja glasi, a to je da se ja misem hocu pozicionirati na tu tocku,tj kad kliknem misem na tu tocku da on ima iste koordinate kao ta tocka...

 

bool COpenGLWnd::OnTwo(CPoint &point){

 

//kada dohvatim i ispisem (float)vt2->frame->width; //dobivam 640 i isto tako za visinu(height) dobijem 480, sto je ok jer je moj video tih dimenzija,znaci 640x480;

ako dohvatim float image_width = (float)vt2->gl_image->width; dobivam 800, a za visinu 600. znaci unutar mog prozora taj video se smjesta na tu visinu i sirinu pretpostavljam neovisno da li je moj video dimenzija 640x480 ili 320x240

ok, uhvatim koordinatu x za tocku 2:

float x1 = vt2->fbft->projection->data.fl[2*2];

i dobijem vrijednost -0.09642 ((0,0) je u centru videa)

kada piknem misem na tu tocku u videu i ispisem x koordinatu misa point.x dobijem 428.000000 (cijela sirina prozora mi je 1088, vido ide do sirine 800 unutar tog prozora, znaci video nije prek cijelog prozora)

}

 

 

 

sad gledajuci ovaj kod gore ja sam probala napisati nekaj svoje. nasla sam prvo centar unutar videa (recimo samo za x govorim)

 

float imageWidth = ((float)(image_width - vt2->frame->width/2) / (vt2->frame->width/2))*gl_aspect;

float imageWidth_zero =  ((float)(0 - vt2->frame->width/2) / (vt2->frame->width/2))*gl_aspect;

 

float centarX = (float)(imageWidth + imageWidth_zero)/2;

// da bi se pomaknula na tocku 2, centru koji sam dobila dodala sam x koordinatu tocke 2:

float twoX = centarX - x1; // x1 se dohvaca: vidi gore

 

isto tako sam napravila za y, gledajuci one prve formule gore,samo za y..malo se razlikuju nego kada se dobiva x.

 

ok kada sam dobila x i y, napravila sam kruznicu sa centrom (x,y) jer na tom podrucju misem se mora moci nesto raditi..recimo nek iskoci MessageBox

 

e sad sto se tice misa: za x napisah ovako

 

float point_x = ((float)(point.x - vt2->frame->width/2) / (vt2->frame->width/2))*gl_aspect;

 

i na kraju pozicioniranje misa unutar kruznice:

return ((twoX-point_x)*(twoX-point_x)+(twoY-point_y)*(twoY-point_y)<r*r);

 

 

I Na kraju dobila sam kruznicu no ne u trazenoj toci..postoji malo odstupanje i po x-u i po y-u.

 

Ja mislim da je problem u point.x jer je to cijeli broj, dok je p.x ( p = m_Detector->aamS->mGlobalShape.GetPoint(k)  BROJ u floatu. detekcija tocke 2 je precizna)

No naravno to samo pretpostavljam,posto kao sto rekoh sam pocetnik pa molim neke koji se razumiju vise da mi predloze sto mislite di bi mogao biti problem.hvalaaaa

15 godina
neaktivan
offline
RE: Podesavanje koordinata

yeeeee...sredila!!

 

samo sto sad trebam podesiti da mi pozicija misa ne ovisi o velicini prozora, znaci nebitno o tome da li ga smanjujem ili povecavam...prijedlozi..?

procitala sam da se koristi ClientToRect and RectToClient....hmm?

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice