IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

cube openGL ES 2.0


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ludo86
    Homme Profil pro
    Développement applications iOS/android
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développement applications iOS/android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut cube openGL ES 2.0
    Salut à tous,

    J'essaye de me mettre aux développement d'application sous openGL ES 2.0.
    Pour se faire je tente déjà le basique en dessinant un simple cube. Cependant j'ai en changeant le glOrtho par un glPerspective mon cube disparait et je ne comprends pas pourquoi.

    Je ne comprends plus.

    Y voyez vous une erreur flagrante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
     
    const GLfloat cubeVertices[] = {
    	// face de devant
    	-0.5, 0.5, -0.5,             
    	-0.5, -0.5, -0.5,           
    	0.5, -0.5, -0.5,             
    	0.5, 0.5, -0.5,              
     
    	// haut
    	-0.5, 0.5, -0.5,           
    	-0.5, 0.5, 0.5,             
    	0.5, 0.5, 0.5,              
    	0.5, 0.5, -0.5,             
     
    	// arrière
    	0.5, 0.5, 0.5,         
    	0.5, -0.5, 0.5,           
    	-0.5, -0.5, 0.5,           
    	-0.5, 0.5, 0.5,            
     
    	// dessous
    	-0.5, -0.5, 0.5,
    	-0.5, -0.5, -0.5,
    	0.5, -0.5, -0.5,
    	0.5, -0.5, 0.5,
     
    	// gauche
    	-0.5, 0.5, -0.5,
    	-0.5, 0.5, 0.5,
    	-0.5, -0.5, 0.5,
    	-0.5, -0.5, -0.5,
     
    	// droit
    	0.5, 0.5, 0.5,
    	0.5, 0.5, -0.5,
    	0.5, -0.5, -0.5,
    	0.5, -0.5, 0.5
    }; 
     
    static const GLubyte squareColors[] = {
    	0, 0, 204, 255,
    	0, 204, 0, 255,
    	204, 0, 0, 255,
    	204, 0, 204, 255,
     
    	0, 0, 204, 255,
    	0, 204, 0, 255,
    	204, 0, 0, 255,
    	204, 0, 204, 255,
     
    	0, 0, 204, 255,
    	0, 204, 0, 255,
    	204, 0, 0, 255,
    	204, 0, 204, 255,
     
    	0, 0, 204, 255,
    	0, 204, 0, 255,
    	204, 0, 0, 255,
    	204, 0, 204, 255,
     
    	0, 0, 204, 255,
    	0, 204, 0, 255,
    	204, 0, 0, 255,
    	204, 0, 204, 255,
     
    	0, 0, 204, 255,
    	0, 204, 0, 255,
    	204, 0, 0, 255,
    	204, 0, 204, 255,
    };
     
     
    -(void)render{
     
    	Mat4x4 cameraView = Camera::getInstance()->gluLookAtMatrix();
    	Mat4x4 proj = Mat4x4::setPerspective((float)(768.0f/1024.0f), 60.0f, 1.0, 20.0f);
     
    	//Mat4x4::setOrtho(proj, -4.0f, 4.0f, -6.0f, 6.0f, -4.0f, 4.0f);
     
     
    	Mat4x4 rot,trans = Mat4x4::setTranslation(0.0f, 1.0f, 5.0f);
    	rot.rotY(r_angle);
     
    	Mat4x4 mvp = cameraView * proj * rot * trans;
     
     
     
     
    	r_angle += 0.05f;
    	glUseProgram([s_loader getProgramIdentifier]);
    	glVertexAttribPointer(attribPositionOnShader, 3, GL_FLOAT, 0, 0, cubeVertices);
    	glEnableVertexAttribArray(attribPositionOnShader);
    	glVertexAttribPointer(attribColorOnShader, 4, GL_UNSIGNED_BYTE, 1, 0, squareColors);
    	glEnableVertexAttribArray(attribColorOnShader);
    	glUniformMatrix4fv(projMatOnShader, 16, GL_FALSE, mvp.toArray());
     
    	glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
    	glDrawArrays(GL_TRIANGLE_FAN, 4, 4);
    	glDrawArrays(GL_TRIANGLE_FAN, 8, 4);
    	glDrawArrays(GL_TRIANGLE_FAN, 12, 4);
    	glDrawArrays(GL_TRIANGLE_FAN, 16, 4);
    	glDrawArrays(GL_TRIANGLE_FAN, 20, 4);
     
    	glUseProgram(0);
    	glBindBuffer(GL_ARRAY_BUFFER, 0);
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Mat4x4 Mat4x4::setPerspective(float aspect,float fov,float zFar,float zNear){
    	Mat4x4 perspectiveMat;
    	float f = atanf((fov * M_PI / 180) / 2);
     
    	perspectiveMat[0] = f/aspect;	
    	perspectiveMat[5] = f;
    	perspectiveMat[10] = (zFar - zNear)/(zNear+zFar);
    	perspectiveMat[11] = 2 * (zFar * zNear)/(zNear - zFar);
    	perspectiveMat[14] = -1;
     
    	return perspectiveMat;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Camera* Camera::getInstance(){
    	if(instance == NULL){
    		Point3D pt(0.0f,3.0f,-5.0f);
    		Vec3 up(0.0f,1.0f,0.0f);
    		Point3D to(0.0f,0.0f,0.0f);
    		instance = new Camera(pt,up,to);
    	}
     
    	return instance;
     
    }
     
     
    Mat4x4 Camera::gluLookAtMatrix(){
    	Vec3 vForward, vUpNorm, vSide;
    	Mat4x4 result,translation = Mat4x4::setTranslation(-(*position)[0], -(*position)[1], -(*position)[2]);
    	Point3D tmp = *lookAt - *position;
    	vForward = tmp.ptToVec();
     
    	vForward.normalize();
    	vUpNorm = up->normalized();
    	vSide   = vUpNorm * vForward;
    	vUpNorm = vSide * vForward;
     
    	result[0] = vSide[0];		result[1] = vSide[1];		result[2] = vSide[2];		result[3] = 0;
    	result[4] = vUpNorm[0];		result[5] = vUpNorm[1];		result[6] = vUpNorm[2];		result[7] = 0;
    	result[8] = -vForward[0];	result[9] = -vForward[1];	result[10] = -vForward[2];	result[11] = 0;
    	result[12] = 0;				result[13] = 0;				result[14] = 0;				result[15] = 1;
     
     
    	result *= translation;
     
    	return result;
     
     
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Bonjour,

    Peut on voir le code des shaders?

    Un grand conseil: Utilisez la commande glGetError() après chaque appel aux fonctions OpenGL pour savoir s'il n'y en a pas une qui c'est ma dérouler.

    Vous développer sur quoi?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé Avatar de ludo86
    Homme Profil pro
    Développement applications iOS/android
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développement applications iOS/android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut
    On peut se tutoyer si ça ne te dérange pas.

    Je développe sous mac et pour iPad et iPhone.

    Entre autre sur iPad le langage est l'openGL ES 2.0 donc je suis obligé de faire sans les glLoadIdentity() glFrustrum et glPerspective.

    Voici mon code de shader. Il était dans le template du projet à sa création :
    Fragment shader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    varying lowp vec4 colorVarying;
     
    void main(){
        gl_FragColor = colorVarying;
    }
    Vertex shader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    attribute vec4 position;
    attribute vec4 color;
     
    varying vec4 colorVarying;
     
    uniform float translate;
    uniform mat4 orthoMat;
     
    void main(){
     
    	gl_Position = orthoMat * position;
     
        colorVarying = color;
    }

    Dans mon code précédent, j'ai pu constater une erreur, j'avais inversé le near et le far.De plus la fonction setPerspective comportait une erreur pour l'affectation de la 10ème valeur de la perspectiveMat. Je vois maintenant le cube mais il est déformé. Peut être une erreur dans les opérations matricielles non?

    Merci de ton aide.

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    Citation Envoyé par ludo86 Voir le message
    Je vois maintenant le cube mais il est déformé. Peut être une erreur dans les opérations matricielles non?

    Merci de ton aide.
    déformé? peux tu être plus explicite?

  5. #5
    Membre confirmé Avatar de ludo86
    Homme Profil pro
    Développement applications iOS/android
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développement applications iOS/android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut
    Désolé c'est vrai qu'en image c'est mieux.




  6. #6
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    effectivement, tu dois avoir un problème de matrice '^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. C++-OpenGL: Faire marcher des cubes (walking cycle) tableau?
    Par corseb-delete dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 15/01/2007, 10h05
  2. openGL: avancer le cube vers une certaine direction
    Par darkmalak01 dans le forum Langage
    Réponses: 5
    Dernier message: 31/10/2005, 19h26
  3. Réponses: 1
    Dernier message: 26/06/2005, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo