D'accord, cela va être un peu compliqué à expliquer. Je fais un jeu de course "pseudo-3d" très basique pour Android en utilisant AndEngine (et à mon tour, openGL - je pense). Je ne crois pas qu'AndEngine ait vraiment quelque chose à voir avec ce problème, parce que j'accède directement aux fonctions OpenGL pour accomplir mon dessin. Quoi qu'il en soit, je copie-pasta'd un code qui a permis à la 2E AndEngine normalement d'avoir une perspective 3D (tutoriel pour tel peut être trouvé here.Cela fonctionne plutôt bien, et je ne crois pas que cela a beaucoup à . fais avec mon problème, mais je ne comprends pas bien openGL il est un peu difficile pour moi de dire Voici le code de la onLoadEngine (appelée lorsque l'application démarre) qui met en place la caméra avec une perspective 3D:openGL dessiner des sprites déformés (images) dans une perspective en 3d-3d
this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT) {
//other methods...
private void setFrustum(GL10 pGL) {
// set field of view to 60 degrees
float fov_degrees = 60;
float fov_radians = fov_degrees/180 * (float)Math.PI;
// set aspect ratio and distance of the screen
float aspect = this.getWidth()/(this.getHeight());
float camZ = this.getHeight()/2/(float)Math.tan(fov_radians/2);
// set projection
GLHelper.setProjectionIdentityMatrix(pGL);
GLU.gluPerspective(pGL, fov_degrees, aspect, camZ/10, camZ*10);
// set view
GLU.gluLookAt(pGL, 0,120f, camZ, 0, 0, 0f, 0, 1, 0); // move camera back+up
pGL.glScalef(1,-1,1); // reverse y-axis
pGL.glTranslatef(-CAMERA_WIDTH/2,-CAMERA_HEIGHT/2,0); // origin at top left
}
};
Puis plus tard dans le onLoadScene (où le dessin a lieu), je dessine un tas de mes images comme suit:
for (int n=0;n<=100;n++) {
final int k = n;
final Sprite line = new Sprite(0, 0,CAMERA_WIDTH,16f, [AndEngine texture holding road img]) {
@Override
protected void applyTranslation(GL10 pGL) {
pGL.glTranslatef(this.mX, 120f, 15f*k); //16*k causes a sliver of a space between each segment
pGL.glRotatef(90f, 1, 0, 0); //**MAY BE MY ISSUE**
}
};
scene.attachChild(line); //actually draws the image to the screen
}
Ce qui fonctionne très bien aussi, sauf pour une chose! Ça déforme la merde de mes images. Les images sont PNGs simples, à la fois correspondant à la CAMERA_WIDTH, et les deux qui se ressemblent à ceci:
Et quand je dessine sans la ligne rotate, je reçois ceci:
qui a un milieu décemment droite line (tbh je serais heureux avec eux de cette façon), mais alors vous pouvez voir les bords de la route sont tous confrontés à l'opposé de la façon dont ils devraient être confrontés. Je me suis dit pourquoi ne pas simplement les retourner? Je pensais que je devrais les faire pivoter de 180 degrés autour de l'axe x, mais à la place cela les fait disparaître, et à la place j'ai trouvé que 90 degrés fonctionne (???). Quoi qu'il en soit, voici ce que je reçois:
Alors oui. Voici où se situe mon problème - le diviseur de la voie du milieu est déformé comme de la merde !! Les lignes marquant le bord de la route s'alignent à merveille, mais pour une raison quelconque, c'est vraiment déconner avec cette ligne médiane. Je reçois la plupart des maths derrière le 3D, mais je ne sais vraiment pas quoi en faire ... c'est presque comme si l'image était compressée parce qu'elle était vue sous un angle aussi aigu, mais je ne sais pas vraiment comment diable je pourrais résoudre cela sans simplement faire une vue de haut en bas? : S
Quoi qu'il en soit ... des idées ou des conseils sont les bienvenus. Désolé c'est un post si long et alambiqué - cela rend difficile quand je n'ai vraiment aucune idée d'où vient le problème.
Aussi - Il est peut-être intéressant de noter que j'ai peu ou pas d'expérience avec les graphiques 3D ou OpenGL, et que j'ai encore moins envie d'en apprendre beaucoup sur eux en profondeur. J'ai besoin d'un pansement à ce problème!