Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
631 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [opengl/Glut] source lumineuse

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[opengl/Glut] source lumineuse

n°1196807
Moebius911
Posté le 10-09-2005 à 23:24:30  profilanswer
 

voila mon probleme, j'aimerai mettre une source lumineuse au centre d'une sphere pour simuler un soleil. Ca serai cool si quelqun pouvais me donné le morceau de code qui me permetterai de faire cela. merci d'avance

mood
Publicité
Posté le 10-09-2005 à 23:24:30  profilanswer
 

n°1199093
lcnn
Posté le 14-09-2005 à 10:31:18  profilanswer
 

va voir la  
 
http://www.paulsprojects.net/openg [...] atten.html
 
bon courage
 
 

n°1199148
bjone
Insert booze to continue
Posté le 14-09-2005 à 11:19:02  profilanswer
 

faire un système solaire réduit où tu vois le soleil et les planètes ensembles ? (=> source de lumière ponctuelle, ou vecteur seul)
éclairer des objets distants, par exemple éclairer des véhicules sur la terre (=> vecteur de lumière seul)
un halo ? (=> impositor/lens flare)

n°1200523
Moebius911
Posté le 15-09-2005 à 15:49:13  profilanswer
 

merci pour ces info, mais j'aurai encor une question. La j'ai bien reussi à créer la source ponctuelle au centre du soleil, mais le probleme c'est que meme la face caché des planetes est illuminée. est-ce qu'il faut appeller une autre fonction pour resoudre ce problemme? ou est-ce une erreur dans mon programme.


Message édité par Moebius911 le 15-09-2005 à 15:50:11
n°1200543
bjone
Insert booze to continue
Posté le 15-09-2005 à 16:06:08  profilanswer
 

poste des screenshots.
 
tu donnes bien une normale a chaque vertex ?
 
regarde si les coefficients de l'éclairage ambiant sont à 1 pour tes surfaces et ta lumière (je sais pas si c'est un état global en OpenGl), ce qui n'est pas bon puisque tu satures ton éclairage.
 
pour avoir les surfaces cachés au noir, et les surfaces éclairés au blanc (modulé par le matériau couleur/texture).
 
l'ambiant doit être a 0, et le diffuse a 1. si l'ambiant est à 1, ce sera tout blanc.


Message édité par bjone le 15-09-2005 à 16:34:39
n°1200570
bjone
Insert booze to continue
Posté le 15-09-2005 à 16:36:53  profilanswer
 

a vu de nez je ferai:
 
gluSphere(quadratic,rayon_planete,60,60);  
 
puis ensuite:
 
gluQuadricTexture(quadratic, GL_TRUE);  
gluQuadricNormals(quadratic, GLU_SMOOTH);  
 
car pour générer les coordoonées UV et les normales, il faut peut être avoir les données générées par gluSphere().
 

n°1200572
bjone
Insert booze to continue
Posté le 15-09-2005 à 16:37:34  profilanswer
 

tiens ton post a sauté :D
 
t'as dû te tromper entre edit et delete :D

n°1200574
bjone
Insert booze to continue
Posté le 15-09-2005 à 16:39:21  profilanswer
 

quoique non, ces attributs ne font peut être que influencer gluSphere, et ne font peut être pas de génération par eux même.

n°1200576
Moebius911
Posté le 15-09-2005 à 16:44:14  profilanswer
 

tien voila mon sous prog pour créé les planetes
 
void planete (int ellipse_longeur,int ellipse_largeur,double rayon_planete,double vitesse,char inclinaison,int vitesse_rot){
 
         const double t = glutGet(GLUT_ELAPSED_TIME) / 1000000.0;
         const double a = (t*vitesse)*90.0;      
         
         glPushMatrix();
         glEnable(GL_TEXTURE_2D);
         GLUquadricObj *quadratic;  
         quadratic = gluNewQuadric();
         gluQuadricTexture(quadratic, GL_TRUE); // c'est pour gèrer automatiquement les textures
         gluQuadricNormals(quadratic, GLU_SMOOTH); ///pour une bonne gestion de l'éclairage  
         x=ellipse_longeur*cos(a*3.14);
         y=ellipse_largeur*sin(a*3.14);          
         glTranslated(x,y,0);    
         glRotated(a*vitesse_rot,0,0,1);
         glRotated(inclinaison,0,1,0);  
          gluSphere(quadratic,rayon_planete,60,60);  
          glDisable(GL_TEXTURE_2D);
     glPopMatrix();    
 
     }
 
 
et pour l'eclairage voici se que j'ai
 
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 1.0f, 1.0f, 1.0f, 1.0f }; //position de la lampe (x,y,z)
 
const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

n°1200580
Moebius911
Posté le 15-09-2005 à 16:46:25  profilanswer
 

pi voici mon main() si ca pe t'aider
 
int  
main(int argc, char *argv[])
{
char bmp_load=0;          
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
 
    glutCreateWindow("System solaire" );
 
    glutReshapeFunc(Reshape);
    //on charge juste une fois les texture (sinon trop gros ralentissement PC)
    if(bmp_load==0){
    LoadTexture();
    bmp_load++;    
    }
     
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    glutSpecialFunc(GestionSpecial); //active les touche special du clavier
    glutMouseFunc(souris);  
    glutWarpPointer(0,0);
 
 
    glutIdleFunc(idle);
 
    glClearColor(0,0,0,0);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
     
    //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);// active le mode trensparence
    //glEnable(GL_BLEND); // now utilisé glColor4d(0,0,0,0.2);(ici 0.2 corespond a la trensparence )
 
 
    glEnable(GL_DEPTH_TEST);//active le teste de profondeur
    glDepthFunc(GL_LESS);
 
 
    glEnable(GL_LIGHT0); //allume la limiere n°1 ( au maxi 8 sources lumineuses disop)
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL); // active la couleur des objets
    glEnable(GL_LIGHTING); // active l'eclairage
     
 
    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);  
 
 
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); ////contraste
 
    glutMainLoop();
 
    return EXIT_SUCCESS;
}

mood
Publicité
Posté le 15-09-2005 à 16:46:25  profilanswer
 

n°1200661
bjone
Insert booze to continue
Posté le 15-09-2005 à 18:56:13  profilanswer
 

mais nous des screenshots avec imageshack

n°1200682
Moebius911
Posté le 15-09-2005 à 19:42:00  profilanswer
 

http://img11.imageshack.us/my.php?image=18fh1.jpg
 
comme on peut le voir sur l'image la partie de la planete face au soleil est aussi bien eclairé que derriere,alor qu'elle devrai etre moin éclairé.

n°1200684
bjone
Insert booze to continue
Posté le 15-09-2005 à 19:57:19  profilanswer
 

et pris d'un autre point de vue ?

n°1200691
Moebius911
Posté le 15-09-2005 à 20:21:30  profilanswer
 

http://img172.imageshack.us/my.php?image=23ay.jpg
http://img172.imageshack.us/my.php?image=32rc.jpg
 
on voie bien le soleil sur la gauche mais ya pas de zone d'ombre sur la planete

n°1200707
LeGreg
Posté le 15-09-2005 à 21:03:11  profilanswer
 

Comment est-ce que tu calcules light_position ?
 
si ta vue change il faut que tu recalcules light_position en conséquence.

n°1200727
Moebius911
Posté le 15-09-2005 à 22:03:18  profilanswer
 

ba en fait j'ai une lumiere ponctuel au mileu du soleil donc j'ai ça :
const GLfloat light_position[] = { 1.0f, 1.0f, 1.0f, 1.0f }; puis j'y touche pu apres. mais comme c'est une source poctuel ca sere a rien de recalculé la position si?


Message édité par Moebius911 le 15-09-2005 à 22:04:03
n°1200777
xiluoc
un pc pour les unirs ....
Posté le 16-09-2005 à 02:26:52  profilanswer
 

ca cest typique, ta source bouge en meme temps que la camera, tu dois recalculer la position a chaque fois.
 
j avez eu ce problem aussi : http://ozserver.no-ip.com/~greg/  dans projects

n°1201489
Moebius911
Posté le 17-09-2005 à 12:16:17  profilanswer
 

oui mais pour mon soleil j'ai mis une source poctuelle au millieu, donc peut importe l'androi ou on se trouve on doit voir de la lumiere, à part derirere les objet. la en mettant ma source poctuel j'ai l'impression que la lumiere traverse tous les objet. Ca m'arrenge qu'elle traverse la texture du soleil comme elle est a l'interieure mais pas qu'elle traverse les autre planettes. Par contre quand je met la source lumineuse a une distance infini " GLfloat light_position[] = { 1.0f, 1.0f, 1.0f, 0.0f }; "   la je voi bien le coté non eclairé des planete mais le probleme c'est que pour moi la source lumineuse doit pas venir de l'infini mais du soleil.  


Message édité par Moebius911 le 17-09-2005 à 12:20:15

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [opengl/Glut] source lumineuse

 

Sujets relatifs
[opengl / glut] comment appliquer une texture sur une sphere?[Opengl] recherche d'un livre
=OSD= Affichage par dessus overlay (fenêtre DirectX / OpenGL)avoir et traiter le code source d'une page
source formulaire accessAvec quoi compiler une source qui commence par "#!/usr/bin/perl" ?
code source ou de template java pour la gestion des photosQue lit-on sur un code source
[openGL] fichier wav/ fonction getColor() 
Plus de sujets relatifs à : [opengl/Glut] source lumineuse


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR