Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > [OpenGL] - Se situer > Lecture du sujet

[OpenGL] - Se situer

Besoin d'aide !

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne -Skypers- # Posté le 13/06/2007 à 16:01:22
template <class Skypers>
Avatar
Groupe : Membres
Salut à tous ! J'en peux plus, ça fait deux heures que je cherche le pourquoi du comment, je n'arrive pas à comprendre la position dans un repère en 3D. Par exemple, je place une gluLookAt(1, 1, 1, 0, 0, 0, 0 ,1 , 0);. Ca veut bien dire que ma caméra est se situe à 1 en abscisse, en ordonée et qu'elle est surellevée par rapport au plan de 1 en hauteur ? Ensuite, je dessine juste un rectangle de manière à obtenir le côté droit (lorsqu'on le regarde), d'un carré.

glVertex3d(0, 0, 0);
glVertex3d(0, -1, 0);
glVertex3d(1, 0, -1);
glVertex3d(1, 1, -1);

Or j'obtiens un truc qui n'a rien avoir avec ce que j'attendais ! Je ne comprend vraiment pas c'est vraiment chaud !

Image utilisateur
Image utilisateur
.:: Petit, Chuck Norris ne jouait pas aux billes avec les enfants de son âge car il était bien élevé : il ne jouait pas avec la nourriture.
 
Hors ligne seb2003 # Posté le 13/06/2007 à 16:26:39
Groupe : Membres
glVertex3d(0, 0, 0);
glVertex3d(0, -1, 0);
glVertex3d(1, -1, 0);
glVertex3d(1, 0, 0);

pour un carré dans le plan z=0, mais comme ta camera est en 1,1,1 tu verra pas un carré.. plutot un trapeze si je me trompe pas..
Apres, moi aussi j'ai encore du mal avec tout ca, donc.. rien n'est sur, j'ai pas testé, ;)
Hors ligne -Skypers- # Posté le 13/06/2007 à 16:36:49
template <class Skypers>
Avatar
Groupe : Membres
Merci !

Je viens de faire un petit paquet de test, en fait, lorsque l'on définit la caméra, si l'on veut être en face d'un dessin sans trop se prendre la tête, on peut la déclarer ainsi :

Code : C++
gluLookAt(0, 0, 1, 0, 0, 0, 0, 1, 0);


Moi perso ça marche, c'est comme de la 2D 'enfin je pense) mais l'on ne pas pas voir l'axe Z (ici en profondeur). Pour ce faire, il faudrait par exemple déplacer la caméra en (2, 5, 1) pour voir par le gauté gauche de l'objet, c'est bien ça ?

Image utilisateur
Image utilisateur
.:: Petit, Chuck Norris ne jouait pas aux billes avec les enfants de son âge car il était bien élevé : il ne jouait pas avec la nourriture.
 
Hors ligne seb2003 # Posté le 13/06/2007 à 16:41:18
Groupe : Membres
bah ca depend un peu d'ou est ton objet..

fait attention à l'emplacement de l'origine des axes, 0,0,1 ca veut dire que tu est "rentré" dans l'écran, et que tu regarde en arrière, autrement dis, la gauche et la droite change.. (si je dis pas de bétise)

j'espere avoir ete clair.. bonne continuation
Hors ligne -Skypers- # Posté le 13/06/2007 à 17:08:33
template <class Skypers>
Avatar
Groupe : Membres
ben justement, je pense que c'est hors de l'écran, j'ai fais le test est pourtant j'ai bien mon objet dessiné dans le bon sens (j'ai fini c'est vraiment super !)

Cube 3D en OpenGL par Skypers
Édité le 13/06/2007 à 17:10:36 par -Skypers-

Image utilisateur
Image utilisateur
.:: Petit, Chuck Norris ne jouait pas aux billes avec les enfants de son âge car il était bien élevé : il ne jouait pas avec la nourriture.
 
Hors ligne magnanime # Posté le 13/06/2007 à 21:35:53
Avatar
Groupe : Membres
trés joli cube.
Hors ligne -Skypers- # Posté le 18/06/2007 à 20:40:37
template <class Skypers>
Avatar
Groupe : Membres
Oui il est sympas mais comment utiliser les textures ? J'ai suivis le tuto mais j'ai une blem.

Voici le "nouveau" code source, ainsi que son erreur :

Code : C++

#include <windows.h>
#include <SDL/SDL.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/mapping/sdlglutils.h>

void __Paint();

double angleX = 0;
double angleY = 0;

int main(int argc, char *argv[])
{
    SDL_Surface *screen = NULL;
    SDL_Event action;
    bool again = true;


    SDL_Init(SDL_INIT_VIDEO);
    SDL_WM_SetCaption("Manipulation de la camera OPENGL", NULL);
    screen = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);

    // Matrix
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(70, (double)800 / 600, 1, 1000);

    glEnable(GL_DEPTH_TEST);


    // Pause
    while (again != false)
    {
        SDL_WaitEvent(&action);

        switch (action.type)
        {
            case SDL_QUIT :
                again = false;
                break;
        }

            __Paint();
        }

        SDL_FreeSurface(screen);
        SDL_Quit();

        return 0;

}

void __Paint()
{
    GLuint texture;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glEnable(GL_TEXTURE_2D);

    texture = loadTexture("stainedglass05.jpg");


    gluLookAt(0.5, 0.2, 3, 0, 0, 0, 0, 1, 0);

    glBegin(GL_LINES); // Repere XYZ
        glColor3ub(0, 255, 0);
        glVertex3d(0, 0, 0);
        glVertex3d(0, 1, 0);

        glColor3ub(0, 0, 255);
        glVertex3d(0, 0, 0);
        glVertex3d(0, 0, -1);

        glColor3ub(255, 0, 0);
        glVertex3d(0, 0, 0);
        glVertex3d(1, 0, 0);
    glEnd();

    //glRotated(angleX, 1, 0, 0);
    //glRotated(angleY, 0, 1, 0);

    glBegin(GL_QUADS);
        glColor3ub(255, 0, 0);       glVertex3d(-1, -1, 1); // Red and green face
                                     glVertex3d(-1, 1, 1);
        glColor3ub(0, 255, 0);       glVertex3d(1, 1, 1);
                                     glVertex3d(1, -1, 1);
                                     glVertex3d(1, -1, 1); // Green and yellow face
                                     glVertex3d(1, 1, 1);
        glColor3ub(252, 242, 0);     glVertex3d(1, 1, -1);
                                 glVertex3d(1, -1, -1);
                                     glVertex3d(1, -1, -1); // Yellow and azur face
                                     glVertex3d(1, 1, -1);
        glColor3ub(66, 253, 234);    glVertex3d(-1, 1, -1);
                                     glVertex3d(-1, -1, -1);
                                     glVertex3d(-1, -1, -1); // Azur and red face
                                     glVertex3d(-1, 1, -1);
        glColor3ub(255, 0, 0);       glVertex3d(-1, 1, 1);
                                     glVertex3d(-1, -1, 1);
                                     glVertex3d(-1, 1, 1); // Up face
        glColor3ub(66, 253 ,234);    glVertex3d(-1, 1, -1);
        glColor3ub(252, 242, 0);     glVertex3d(1, 1, -1);
        glColor3ub(0, 255, 0);       glVertex3d(1, 1, 1);

        glColor3ub(255, 0, 0);       glVertex3d(-1, -1, 1); // Down face
        glColor3ub(66, 253 ,234);    glVertex3d(-1, -1, -1);
        glColor3ub(252, 242, 0);     glVertex3d(1, -1, -1);
        glColor3ub(0, 255, 0);       glVertex3d(1, -1, 1);
    glEnd();

    glFlush();
    SDL_GL_SwapBuffers();
}


Message d'erreur :

Code : Console
error LNK2019: unresolved external symbol "unsigned int __cdecl loadTexture(char const *,bool)" (?loadTexture@@YAIPBD_N@Z) referenced in function "void __cdecl __Paint(void)" (?__Paint@@YAXXZ)</



Image utilisateur
Image utilisateur
.:: Petit, Chuck Norris ne jouait pas aux billes avec les enfants de son âge car il était bien élevé : il ne jouait pas avec la nourriture.
 
Hors ligne magnanime # Posté le 19/06/2007 à 10:04:04
Avatar
Groupe : Membres
A ta place, je déclarerait la variable 'texture1' en temps
que variable globale, puis je la chargerait dans main().
Aussi, la fonction qui fait correspondre un vertex avec un
point de la texture est:
Code : C++
glTexCoord2d (double x_texture, double y_texture)

Pour t'aider,
glTexCoord2d (0, 0) -> coin inférieur gauche
glTexCoord2d (1, 0) -> coin inférieur droit
glTexCoord2d (0, 1) -> coin supérieur gauche
glTexCoord2d (1, 1) -> coin supérieur droit

PS: Désolé, je ne comprend pas le message d'erreur( bien
que je n'ai pas de problèmes avec l'anglais ).
Édité le 19/06/2007 à 10:10:00 par magnanime
Hors ligne -Skypers- # Posté le 19/06/2007 à 12:23:06
template <class Skypers>
Avatar
Groupe : Membres
En fait, le problème vient juste du fait que je ne peux pas utiliser loadTexture. Si je déclare quelque part dans mon code

Code : C++
GLuint texture;


le code compile nikel. Par contre, si j'appel quelque part

Code : C++
texture = loadTexture("texture01.jpg", /*true*/);


il m'afficher ce message d'erreur o_O

Image utilisateur
Image utilisateur
.:: Petit, Chuck Norris ne jouait pas aux billes avec les enfants de son âge car il était bien élevé : il ne jouait pas avec la nourriture.
 
Hors ligne Yno # Posté le 19/06/2007 à 17:27:44
SCE
Avatar
Groupe : Membres
Code : C++
texture = loadTexture("texture01.jpg", /*true*/);

Ca n'existe ni en C, ni en C++ (quoiqu'à confirmer), la virgule est de trop ici.

Tu compiles bien en C++ ?
Édité le 19/06/2007 à 17:30:34 par Yno

Tutos OpenGL : Les shaders en GLSL | Rendus optimisés avec les VBOs
FAQs programmation : FAQ C | FAQ OpenGL / SDL / GTK+

Un moteur 3D à que il rox | Un canal IRC qu'il est bieng : #opengl@irc.epiknet.org
 
Hors ligne -Skypers- # Posté le 19/06/2007 à 18:03:59
template <class Skypers>
Avatar
Groupe : Membres
oui je suis en C++, et mon dans mon code le true n'est pas commenté, désolé de cette imprécision...

J'ai essayé, en me renseignant, d'apprendre à programmer moi-même cette phase.

Donc si j'ai bien compris, il faut faire ça :

Code : C++

GLuint glTexLoad(const char name[])
{
    GLuint ID; // La texture à retourner
    SDL_Surface *sdl_Texture = NULL; // L'image à charger
    SDL_Surface *gl_Texture = NULL; // L'image convergée en OpenGL
    SDL_Surface * gl_Fliped_Texture = NULL; // L'image OpenGL retournée

    sdl_Texture = IMG_Load(name); // Load picture

    if (sdl_Texture == NULL)
    {
        return 0;
    }

    else
    {
        gl_Texture = SDL_ConvertSurface(sdl_Texture, sdl_Texture->format, SDL_SWSURFACE); // Conversion de SDL à OpenGL
        gl_Fliped_Texture = flipSurface(gl_Texture); // Retournement
        glGenTextures(1, &ID); // Identification
        glBindTexture(GL_TEXTURE_2D, ID); // Activation

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); // Spécification de la répétition et combinaison [pixels texture/tampon chronomatique]
        glTexImage2D(GL_TEXTURE_2D, 0, 4, gl_Fliped_Texture->w, gl_Fliped_Texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, gl_Fliped_Texture->pixels); // Définition de texture

        return ID; // Retour de la texture
    }

}


Ce code est certainement faux, car je n'ai vraiment pas tout compris, quelqu'un pourrait-il m'éclairer ?

Image utilisateur
Image utilisateur
.:: Petit, Chuck Norris ne jouait pas aux billes avec les enfants de son âge car il était bien élevé : il ne jouait pas avec la nourriture.
 

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 88 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0956s (0.0816s)