J'ai des difficultés à configurer une vue Ortho pour dessiner 2D sur une scène 3D.Tentative d'utilisation d'Ortho pour le dessin 2D
Je mis en place mon point de vue comme celui-ci:
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, ((float)width/(float)height), 0.1f, 100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
et je mis en place mon avis Ortho comme ceci:
public void onSurfaceOrtho(GL10 gl) {
gl.glOrthof(0.0f, 100.0f, 100.0f, 0.0f, -0.1f, 0.1f);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
}
Ensuite je dessine mon cadre comme celui-ci:
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
scene.onDrawFrame(gl);
gl.glPushMatrix();
onSurfaceOrtho(gl);
screen.onDrawFrame(gl);
gl.glPopMatrix();
}
Les objets de scène et d'écran dessinent des objets pour 3D et 2D. L'objet screen ne dessine rien car je ne fais que commencer avec les vues 2D Ortho. Cependant les objets de la scène dessinent un cube. Donc, tout fonctionne bien jusqu'à ce que j'ajoute le nouveau code pour le dessin 2D Ortho - de glPushMatrix() à glPopMatrix(). Maintenant, je ne vois rien d'autre que ma couleur claire.
Alors, quel est le code dans la fonction onSurfaceOrtho() cela efface-t-il mon écran?
Je m'attendrais à ce qui a été dessiné à la vue avant l'appel pour mettre en place une vue Ortho, pour être laissé seul. Je n'appelle aucun bit explicite clair, mais il semble que quelque chose efface ma vue - et c'est le code de la fonction onSurfaceOrtho().
Comment puis-je configurer correctement une vue Ortho 2D afin de pouvoir dessiner 2D sur mon vue 3D?
Les troisième et quatrième paramètres de glOrtho ** bottom ** et ** top ** ne sont-ils pas respectivement? Si oui, vos valeurs ne sont-elles pas inversées? –
@Martinho Fernandes: Je m'attendrais à ce que haut/gauche soit 0,0 et bas/droite à 100, 100 si je le fais comme ça. Mais je ne pense pas que cela a quelque chose à voir avec pourquoi ça ne marche pas, ou? – Espen
Oui, cela fonctionnera probablement comme ça. Mais votre problème vient probablement de votre méthode onSurfaceOrtho parce que vous êtes en train de visser la matrice de projection et de la laisser comme mode en cours avant de redessiner votre cadre ... –