5corpio Napisano Listopad 12, 2005 Zgłoś Share Napisano Listopad 12, 2005 Witam. Pisząc edytor3d odrazu na początku natrafiłem na problem przemiany współrzędnych myszy na ekranie na współrzędne w OpenGL-u. Wymyśliłem taki sposób: [code=Delphi] tPos.p1 i tPos.p2 to Single i współrzędne w OpenGL-u HXH^HHZ[YCBXZ[KvGFf&VvBF&Ś'śćvĆ&ŚFąąąŚ4(4(ŃAĄ `ź5]Ńąkom - (Global.Zoom / 2); tPos.p2 := (Cursor.Y / MainForm.IZY H [HH [HNHHXHŚW7BćRF\0 [/code]Wszystko wygląda jakby obliczane było dobrze. Jednak wyświetlając piksel w obliczonym miejscu coś jednak nie gra :/im bliżej krawędzi ekranu tym odchylenia +/- w kierunkach jest większa. Jednak naciskając na środek ekranu mam współrzędne 0,0 (pomijam trzecią). Czy problemem może być ustawienie okna czy coś ?PS. w tej składni Delphi kompletnie nie czytelne są komentarze nic nie widać dlatego pominołem // Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
pawell Napisano Listopad 12, 2005 Zgłoś Share Napisano Listopad 12, 2005 Hmmmm....To się robi chyba trochę inaczej. Wypróbuj gluUnProject. Tu masz link: http://nehe.gamedev.net/data/articles/arti....asp?article=13. Może ktoś umie jeszcze inaczej? Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Listopad 12, 2005 Autor Zgłoś Share Napisano Listopad 12, 2005 Widziałem ten artykuł dzisiaj ale myślałem, że taką metodą też jakoś się da Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
pawell Napisano Listopad 12, 2005 Zgłoś Share Napisano Listopad 12, 2005 Jeśli chcesz to przeliczać to musisz znać wzór na perspektywe... gdzieś go kiedyś widziałem ale już nie pamiętam Moim zdaniem 100 razy lepiej i wydajniej jest to zrobić z gluUnProject. Masz nawet gotową funkcję dla Delphi na dole Link do komentarza Udostępnij na innych stronach More sharing options...
LukaStrz Napisano Listopad 12, 2005 Zgłoś Share Napisano Listopad 12, 2005 [code=Delphi] {***********************************************************CB[[]ŃÓĘN [YN[Ńf fWw'C'& amp;ł5bFVvW#FVfWsltą4(Ńlt le; winZ: Single; Tmp:record X,Y,Z:double; eBY[B]X]ÓÓSŃSQUÓPUV[[Y]ĘNBvvWDFV&ĆWbt$T5DE$&ŚV7FvvWDĄ1}Y%]A=IPą4(ĄdŃĄd4(ąIixels(X,viewport[3]-Y,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,@winZ)B[ÓU[X Y]KVK[[[Y]ŚV7FfWw'BFFF&W7VBŁFąŃ4(ąŃ4) [/code]//kawalek mojego starego projektu (kod nie moj of course ;p) Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Listopad 12, 2005 Autor Zgłoś Share Napisano Listopad 12, 2005 Dzięki Wam Oszczędziliście mi czytania artykułu. Ale nadal mnie zastanawia bo [b]wsumie obliczenia wychodziły chyba dobre przy tych 2 wzorkach. Ale dobra zastosuje to rozwiązanie co podaliście.Już poradziłem sobie dołączyłem gl a nie OpenGL już nie ma problemu ;p Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
pawell Napisano Listopad 12, 2005 Zgłoś Share Napisano Listopad 12, 2005 Ogólnie twój tok nie był taki zły ale dobranie współczynników zajełoby Ci baaaaaaaaardzo dużo czasu dobrze jakbyś powiedział przy którym parametrze jest błądLukaStrz: ten kod pochodzi właśnie z tego artykułu NeHe Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Listopad 12, 2005 Autor Zgłoś Share Napisano Listopad 12, 2005 Zastanawiam się czemu to mi zwraca jakieś kosmicznie duże liczby np. X ~ 100 albo coś takiego [b]Pozatym nie będzie to widoczne na ekranie?PS. zapomniałem dopisać już w 1 poście, że wybieranie i klikanie dotyczy widoków ortogonalnych(z góry,z boku z przodu) nie w widoku perspektywistycznym. Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
pawell Napisano Listopad 13, 2005 Zgłoś Share Napisano Listopad 13, 2005 100 to wcale nie jest kosmiczna liczba . Co do widoku ortogonalnego to chyba powinno tak samo działać, może potrzebna jest jakaś mała przeróbka. Nie ma rady, musisz przeczytać ten artykuł Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Listopad 16, 2005 Autor Zgłoś Share Napisano Listopad 16, 2005 Ufff dzięki chłopaki [b]wkońcu zjarzyłem o co chodzi i zmajstrowałem już Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Czerwiec 4, 2006 Autor Zgłoś Share Napisano Czerwiec 4, 2006 Pozwolę sobie odegrzać ten stary wątek ponieważ mam problem związany dokładnie z tym samym. Otóż mam tą funkcje która zamienia wsp. myszki z ekranu niby na te w OpenGL-u. Z tego co zauważyłem rozpiętość w każdej osii zależy od ustawień zNear czyli np. jak ustawie zNear na 1 to współrzędne OGL-a odczytane przez te funkcje będą z zakresu np. -0.5 do 0.5 itp. Potrzebuje odczytywać oczywiście wartości większe itp. zwiększyłem zNear to mi ucina połowe ekranu itp. pokaże na przykładzie:[img]http://img147.imageshack.us/my.php?image=screen4nd.jpg[/img]jak widać ten jeden trójkąt z linii jest ucinany w pewnym momencie. Dlatego co zrobić, żeby te współrzędne działały i nie "ucinało" mi tych trójkątów itp. ? Czy może zostawić zNear na 1 a poprostu wynikowe współrzędne odpowiednio przemnażać o jakieś powiększenie czy coś ? Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Spider100 Napisano Czerwiec 4, 2006 Zgłoś Share Napisano Czerwiec 4, 2006 Witam!Nie wiem dokładnie o co chodzi bo zakręciłeś z tym near, ale powiem tyle ze najlepiej to rzutować wszystkie wyniki (punkty kliknięcia) na płaszczyznę przechodzącą przez punkt (0,0,0)skierowaną do kamery, później przy teście czy klikasz blisko punktu możesz tylko sprawdzić odległość punktu od prostej przechodzącej przez punkt kliknięcia o wektorze kamery . Ogólnie to najlepiej napisz co chcesz zrobić bo nie wiem .PozdrawiamSpiker ^*^ www.spider.dathox.com Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Czerwiec 4, 2006 Autor Zgłoś Share Napisano Czerwiec 4, 2006 Mam tą całą funkcję z użyciem gluUnProject, która mi zwraca pozycje OpenGL klikniętego miejsca i teraz wstawiam sobie 3 punkty powstaje trójkąt jednak przy obrocie, ruchu kamery on zostaje coś "przycinany". Jak na zdięciu:http://img428.imageshack.us/my.php?image=screen5nd.jpgczemu te zdięcia się nie wyświetlają ?Gdy kamera jest ustawiona w pozycji w której były tworzone punkty(wierzchołki) trójkąt jest widoczny normalnie, obróce kamerę i jest "cięty" dziwnie lub całkowicie znika gdy powinien być widoczny.Poza tym jak już ten trójkąt będzie to jak oddale kamerę nie ważne czy to przez gluLookAt czy po prostu glTranslatef to ten powstały trójkąt jakoś nie proporcjonalnie się zmniejsza w stosunku do oddalanej kamery znaczy się staje się bardzo szybko mały.Ew. jakiś inny sposób na np. wstawianie wierzchołków w miejscu kliknięcia. Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Spider100 Napisano Czerwiec 5, 2006 Zgłoś Share Napisano Czerwiec 5, 2006 CYTATMam tą całą funkcję z użyciem gluUnProject, która mi zwraca pozycje OpenGL klikniętego miejsca i teraz wstawiam sobie 3 punkty powstaje trójkąt jednak przy obrocie, ruchu kamery on zostaje coś \"przycinany\".Na samym początku musisz sobie jakoś kontrolować wartość Z kliknięcia żeby nie zwracało Ci wartości far gdy klikniesz na tło. Zazwyczaj najlepiej zerować wynik kliknięcia płaszczyźnie przechodzącej przez środek układu lub przechodzącej przez punkt poprzedniego kliknięcia przez rzutowanie.Co do zdjęcia to sprawdź to ustawienie przycinania kamery. Oddalając kamerę trójkąt się szybko zmienia bo masz chyba coś pokręcone z perspektywą może nawet zamiast oddalać kamerę zmieniasz perspektywę. [quote] Ew. jakiś inny sposób na np. wstawianie wierzchołków w miejscu kliknięcia. [/quote]No to też pisałem już że miejsce kliknięcia i podaje wartość Z która trzeba zerować (rzutując na płaszczyznę) wtedy wszystko będzie dobrze. www.spider.dathox.com Link do komentarza Udostępnij na innych stronach More sharing options...
kornik Napisano Lipiec 4, 2006 Zgłoś Share Napisano Lipiec 4, 2006 Witam mam problem z gluUnProject a mianowicie cos nie bardzo chce zwracac prawidlowe wsp,ogolnie moze po krotce opisze co robiewszystko co rysuje lezy na osi Z w 0;moja funkcja reshapujaca jest standardowaPascalvoid myReshape(GLsizei w, GLsizei h){ glViewport(0, 0, w, h); glGetIntegerv( GL_VIEWPORT, viewportT ); glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (float) w/h, 1.0, 2000); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}funkcja rysujaca Pascalvoid display(){ glClear(GL_COLOR_BUFFER_BIT); glRenderMode(GL_MODELVIEW); glPushMatrix();//na starcie X,Y sa 0 i Z=1000; gluLookAt(X, Y,Z, X, Y, 0, 0.0, 1.0, 0.0); glGetDoublev( GL_MODELVIEW_MATRIX, model ); glGetDoublev( GL_PROJECTION_MATRIX, project );//tresc graficzna glPopMatrix(); glFlush(); glutSwapBuffers();}przy kliknieciu mysza wywolujePascalvoid GetOGLPos(int x, int y){ int i; GLfloat winX, winY, winZ; GLdouble posX, posY, posZ; printf("nviewport"); for(i=0;i<4;i++) printf("[%d]",viewportT[i]); printf("nx %d,y %dnmodel",x,y); for(i=0;i<16;i++) { if(!fmod(i,4)) printf("n");printf("[%f]",model[i]); } printf("nproject"); for(i=0;i<16;i++) { if(!fmod(i,4)) printf("n"); printf("[%f]",project[i]); } winX = (float)x; winY = (float)viewportT[3] - (float)y; glReadPixels( x, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ); gluUnProject( winX, winY, winZ, model, project, viewportT, &posX, &posY, &posZ); printf("nnwsp winZ (%f,%f,%f)n",posX,posY,posZ);}a wynik jaki otrzymuje jest nastepujacy viewport[0][0][1280][800]x 727,y 547model[1.000000][0.000000][0.000000][0.000000][0.000000][1.000000][0.000000][0.000000][0.000000][0.000000][1.000000][0.000000][0.000000][0.000000][-1000.000000][1.000000]project[1.508883][0.000000][0.000000][0.000000][0.000000][2.414214][0.000000][0.000000][0.000000][0.000000][-1.001001][-1.000000][0.000000][0.000000][-2.001000][0.000000]wsp winZ (180.178692,-304.439847,-999.953294)lub viewport[0][0][1280][800]x 688,y 636model[1.000000][0.000000][0.000000][0.000000][0.000000][1.000000][0.000000][0.000000][0.000000][0.000000][1.000000][0.000000][0.000000][0.000000][-1000.000000][1.000000]project[1.508883][0.000000][0.000000][0.000000][0.000000][2.414214][0.000000][0.000000][0.000000][0.000000][-1.001001][-1.000000][0.000000][0.000000][-2.001000][0.000000]wsp winZ (0.049706,-0.244386,999.000000)roznica jest taka ze ten pierwszy wynik gzie Z=-999 jest wynik bliski prawdya gdy Z=999 to wynik jest bardzo daleki od prawdyproszę o jakie kolwiek wskazówki które pomogą mi się uporać z tym tematemmoze pomoce bedzie jak dodam ze tresc graficzna to są same kreski tak wiec jak klikam na ekranie to nie zawsze klikam na czyms czasem to jest pusta przestrzen probowalem pod moją grafiką wyswietlic jakis duzy kwadrat na Z=-1 i tez to samo ok gdy ustawiam polozenie kamery Z=2000 i polozenie kursora winZ =1 w gluunproject to otrzymuje dobrewspolrzedne, niestety gdy obnize kamere to juz wsp sie rozjezdzają:( jakies pomysły co musze poprawić?wsp (0.049706,-0.244386,999.000000) zuwazylem ze gdy 3 wsp czyli Z jest bliska 0 to zwracane wsp są okej,ale nie wiem czemu czasami ta wsp nie jest bliska 0 i wtedy wynik mi nie pasuje,ktos wie moze jak zmusic gluunproject zeby zwracal wsp dla punktu o wsp Z 0;????? Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.