Question

Je fais mes premiers pas avec OpenGL ES 2.0 d'essayer des choses sur mon ipod touch. Je me demandais comment résoudre ce problème .. coordonnées

Pour mieux expliquer, je tentais de dessiner un quad et faites pivoter / traduire à l'aide d'un vertex shader (aussi parce que de ce que je l'ai lu semble que la seule façon de le faire).

Depuis que je travaille avec un ipod J'ai un rapport 1.5 : 1 et une fenêtre définie par

glViewport(0, 0, backingWidth, backingHeight);

0,0 est le centre et les limites de découpage doivent être à -1.0, -1.0, -1.0, 1.0, etc (à droite?)

Pour dessiner un carré I dû utiliser des valeurs différentes pour coordonnées x et y en raison du rapport d'aspect:

static const GLfloat lineV[] = {
        -0.5f, 0.33f,  0.5f, 0.33f,
         0.5f, 0.33f,  0.5f,-0.33f, 
         0.5f,-0.33f, -0.5f,-0.33f,
        -0.5f,-0.33f, -0.5f, 0.33f,
        -0.5f, 0.33f,  0.5f,-0.33f,
         0.5f, 0.33f, -0.5f,-0.33f,
    };

Il est un carré avec les deux diagonales (je sais que l'utilisation d'indices serait plus efficace, mais ce n'est pas le point) ..

J'essayé d'écrire un vertex shader pour faire pivoter l'objet tout en le déplaçant:

void main()
{
    m = mat4( cos(rotation), sin(rotation), 0.0, 0.0,
             -sin(rotation), cos(rotation), 0.0, 0.0,
                        0.0,           0.0, 1.0, 0.0,
                        0.0,           0.0, 0.0, 1.0);

    m2 = mat4(1.0);
    m2[1][3] = sin(rotation)*0.8;
    gl_Position = position*(m*m2);
}

Il fonctionne mais puisque les coordonnées ne sont pas le même le quad est déformée pendant qu'il tourne. Comment dois-je éviter cela? Je pensais que s'il était possible de changer la vue de frustum avoir des bornes différentes (non -1,0 à 1,0 sur les deux axes afin que l'élargissement sur l'axe y fixerait le problème).

En outre est-il une meilleure façon d'utiliser des matrices? Je veux dire, je l'habitude d'utiliser glRotatef sans avoir à spécifier l'ensemble de la matrice .. fait fonctions pratiques / constructeurs existent pour accomplir cette tâche?

Était-ce utile?

La solution 2

sont fournies de ce que j'ai vu aucune fonction de GLUT ou de soutien. Fondamentalement, je résolu en utilisant des coordonnées égales lors de la construction des sommets et en utilisant un nuanceur de sommets à l'échelle sur l'axe y par le rapport d'aspect droite.

Autres conseils

Les premiers arguments à glViewport() est pas le centre, il est les coordonnées du coin en bas à gauche.

Vous devriez probablement mettre en place une projection qui prend votre aspect en compte, en utilisant généralement gluPerspective () (si GLU est disponible en ES).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top