Sto lavorando a un'app OpenGL ES1 che visualizza una griglia 2D e consente all'utente di navigare e ridimensionarla/ruotarla. Ho bisogno di conoscere l'esatta traduzione delle coordinate di View Touch nel mio mondo opengl e nella cella della griglia. C'è qualche aiuto per fare l'opposto delle ultime trasformazioni che faccio per la navigazione? o dovrei calcolare e fare le matrix a mano?iPhone OpenGL ES - Come scegliere
risposta
La modalità di prelievo non è disponibile in openGL ES. Ma è facile calcolare le coordinate dello schermo di qualsiasi punto 3d usando la matrice di proiezione recuperata dallo stato corrente di OpenGL. Ecco come lo faccio (IMPoint2D e IMPoint3D sono essenziali (x, y) e (x, y, z) strutture)
+ (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};
}
suona come quello che stai cercando è un metodo unproject. La libreria glut viene fornita con una, ma non è disponibile su OpenGL ES. È possibile rewrite the glut code yourself to be iphone compatible È anche possibile scrivere il proprio codice per non proiettare, il che comporterebbe la necessità di ridimensionare il touchpoint nella vista, moltiplicarlo per l'inverso delle matrici di modelview * di proiezione * e dividere per w per ottenere un vettore 3D.
Potrebbe essere possibile farlo con GL_MODELVIEW_MATRIX? o GL_MODLVIEW, non sto modificando la posizione della vista, solo del modelview. sto facendo questo:
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);
grazie
- 1. OpenGL ES per Iphone
- 2. Fullscreen texture iPhone OpenGL ES
- 3. OpenGL ES (iPhone) Touch Picking
- 4. OpenGL o OpenGL ES
- 5. Qualsiasi alternativa glPolygonMode su iPhone (OpenGL ES)?
- 6. OpenGL ES iPhone - disegnare linee anti-aliasing
- 7. iPhone OpenGL ES 2.0 - Pixel Perfect Textures
- 8. OpenGL ES (iPhone) alpha blending sembra strano
- 9. IPhone OpenGL ES viste singole o multiple?
- 10. glGetUniformLocation ritorno -1 OpenGL ES (iPhone)
- 11. Scegli OpenGL ES 1.1 o OpenGL ES 2.0?
- 12. Come utilizzare OpenGL ES su un thread separato su iphone?
- 13. Come caricare e visualizzare l'immagine in OpenGL ES per iphone
- 14. Come si attiva il multicampionamento in OpenGL ES su iPhone?
- 15. Consigli sull'accelerazione di OpenGL ES 1.1 su iPhone
- 16. OpenGL ES Render to Texture
- 17. Differenza in iOS OpenGL ES e Android OpenGL ES
- 18. OpenGl ES su Iphone - Visualizzazione e rotazione di oggetti 3D
- 19. Ottimizzazione di OpenGL ES su iPhone e interpretazione degli strumenti
- 20. Gioco da tavolo per iPhone: OpenGL ES o CoreGraphics?
- 21. OpenGL ES 2.0 IllegalArgumentException
- 22. Shader compatibili OpenGL ES e OpenGL
- 23. OpenGL è retrocompatibile con OpenGL ES?
- 24. Come riscrivere l'app OpenGL 2D per OpenGL ES?
- 25. Android OpenGL ES e 2D
- 26. Android OpenGL - ES Texture bleeding
- 27. OpenGL ES 2d rendering nell'immagine
- 28. Emulatore Android OpenGL ES 2.0
- 29. Zoom e scorrimento con OpenGL ES
- 30. OpenGL ES 2.0 equivalente di glOrtho()?
ho aggiunto la funzione - (CGPoint) getScreenCoorOfPoint: (IMPoint3D) _point3D che sembra darmi la mia posizione oggetti nel mondo, ma il bit Ora sono bloccato on è: * devo oggetti che hanno una posizione * ho la mia posizione nel mondo (gluLookAt occhio [0], occhio [1], occhio [2]) * e poi ho ho dove ho toccato il s creen Come faccio a unire tutto questo, è l'ultima cosa a mio modo di archiviare la grandezza !!!! – Burf2000