Pracuję nad aplikacją OpenGL ES1, która wyświetla siatkę 2D i umożliwia użytkownikowi nawigację i skalowanie/obracanie jej. Muszę znać dokładne tłumaczenie współrzędnych View Touch w mojej komórce światowej i siatce opengl. Czy są pomocnicy, którzy wykonają odwrotność kilku transformacji, które wykonuję dla nawigacji? czy powinienem kalkulować i robić rzeczy matrycowe ręcznie?iPhone OpenGL ES - jak wybrać
Odpowiedz
Tryb podrywania nie jest dostępny w openGL ES. Łatwo jest jednak obliczyć współrzędną ekranu dowolnego punktu 3D za pomocą macierzy projekcji pobranej z bieżącego stanu OpenGL. Oto jak to zrobić (IMPoint2D i IMPoint3D są podstawowe (x, y) i (x, y, z) struktury)
+ (IMPoint2D) getScreenCoorOfPoint:(IMPoint3D)_point3D
{
GLfloat p[16]; // Where The 16 Doubles Of The Projection Matrix Are To Be Stored
glGetFloatv(GL_PROJECTION_MATRIX, p); // Retrieve The Projection Matrix
/*
Multiply M * point
*/
GLfloat _p[] = {p[0]*_point3D.x +p[4]*_point3D.y +p[8]*_point3D.z + p[12],
p[1]*_point3D.x +p[5]*_point3D.y +p[9]*_point3D.z + p[13],
p[2]*_point3D.x +p[6]*_point3D.y +p[10]*_point3D.z+ p[14],
p[3]*_point3D.x +p[7]*_point3D.y +p[11]*_point3D.z+ p[15]};
/*
divide by scale factor
*/
IMPoint2D _p2D = {_p[0]/_p[3], _p[1]/_p[3]};
/*
get result in screen coordinates. In this case I'm in landscape mode
*/
return (IMPoint2D) {_p2D.x*240.0f + 240.0f, (1.0f - _p2D.y) *160.0f};
}
Wygląda na to, czego szukasz jest metodą unproject. Biblioteka glut zawiera jedną, ale nie jest dostępna w OpenGL ES. Jest możliwe, aby rewrite the glut code yourself to be iphone compatible Można również napisać własny kod do projektu, co wymagałoby skalowania punktu styczności do ekranu, pomnożenia go przez odwrotność rzutowania * matryc modelarskich i podzielenia przez w, aby uzyskać wektor 3D.
Czy można to zrobić z GL_MODELVIEW_MATRIX? lub GL_MODLVIEW, nie zmieniam pozycji widoku, tylko del widoku modelu. jestem w ten sposób:
glMatrixMode(GL_MODELVIEW);
// Setup model view matrix
glLoadIdentity();
[gAccel GetAccelerometerMatrix:(GLfloat *) matrix headingX:headx headingY: heady headingZ:headz];
// Finally load matrix
glLoadMatrixf((GLfloat*)matrix);
glPushMatrix();
glRotatef(-90, 1, 0, 0);
glScalef(0.0005, 0.0005, 0.0005);
glTranslatef(x, 0.0, z);
dzięki
- 1. OpenGL ES For Iphone
- 2. OpenGL lub OpenGL ES
- 3. iPhone OpenGL ES 2.0 - Pixel Perfect Textures
- 4. Wybierz OpenGL ES 1.1 lub OpenGL ES 2.0?
- 5. Jak korzystać z OpenGL ES w osobnym wątku na iphone?
- 6. Jak wygenerować obrazy mipmap w OpenGL ES?
- 7. Różnica w iOS OpenGL ES i Android OpenGL ES
- 8. Czy iPad lub iPhone obsługuje OpenGL ES 2.0?
- 9. Rysowanie bufora renderowania poza ekranem w OpenGL ES (iPhone)
- 10. OpenGL ES 2.0 IllegalArgumentException
- 11. OpenGL-ES i Cg
- 12. Mgła OpenGL a mgła OpenGL ES
- 13. Suwaki obsługujące OpenGL ES i OpenGL
- 14. OpenGL ES Renderowanie do tekstury
- 15. Nauka OpenGL ES 1.x
- 16. OpenGL ES 1.1 lub 2.0 na iPhonie
- 17. Jak ponownie napisać aplikację 2D OpenGL dla OpenGL ES?
- 18. Android OpenGL ES Support Everywhere?
- 19. Core Animation lub OpenGL ES?
- 20. OpenGL ES 2.0 + Cairo: HUD
- 21. OpenGL ES Tekstury asynchroniczne ładowanie
- 22. Jak osiągnąć GlOrthof w OpenGL ES 2.0
- 23. Swift - Jak narysować linię w OpenGL ES?
- 24. Jak narysować „świecące” linii w OpenGL ES
- 25. Jak narysować coś z OpenGL ES w systemie Linux?
- 26. Obsługa OpenGL ES 2.0 dla Androida?
- 27. iPhone OpenGl renderowania tekstu
- 28. OpenGL ES 2.0 vs OpenGL 3 - Podobieństwa i różnice
- 29. OpenGL ES 2d renderowanie do obrazu
- 30. Jak zaimplementować cofanie w aplikacji do malowania OpenGL ES na telefonie iPhone?
dodałem funkcję - (CGPoint) getScreenCoorOfPoint: (IMPoint3D) _point3D co wydaje się dać mi moją pozycję pozycji w świecie, ale trochę jestem teraz zablokowany na to: * mam obiektów, które mają pozycję * mam pozycję w świecie (gluLookAt oko [0], oko [1], oko [2]) * a potem mam gdzie podsłuchałem s creen Jak to wszystko połączyć, to ostatnia rzecz na mojej drodze do archiwizacji wielkości !!!! – Burf2000