Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di pcg4m3s
    Registrato dal
    Aug 2007
    Messaggi
    244

    [OPENGL] Creare un lampione con luce

    Qualcuno di voi ha la minima idea di come si fa, creando il lampione in un qualsiasi punto x,y,z?

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Devi usare glLight ed usare un tipo luce spot.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di pcg4m3s
    Registrato dal
    Aug 2007
    Messaggi
    244
    Originariamente inviato da linoma
    Devi usare glLight ed usare un tipo luce spot.
    si lo so ma non mi funziona...
    potresti farmi un esempio mettendo una sfera in posizione 0,0,5 che emette una luce verso il basso come i lampioni reali?

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Evidentemente sbagli qualcosa, le luci [i]direzionali[i] sn quelle che nn hanno un'attenuazione ma solo la sorgente (GL_POSITION cn la quarta componente a 0) la luce del sole è un esempio.
    Gli spots oltre la posizione di origine hanno anche, e nn solo, la direzione e l'intensita'.
    Posta il codice che vediamo cs ce che nn va
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it L'avatar di pcg4m3s
    Registrato dal
    Aug 2007
    Messaggi
    244
    ho definito questi array:
    codice:
    GLfloat  lightPos[] = { 38.0f, 2.0f, 2.0f, 1.0f };
    GLfloat  specular[] = { 1.0f, 1.0f, 1.0f, 1.0f};
    GLfloat  specref[] =  { 1.0f, 1.0f, 1.0f, 1.0f };
    GLfloat  ambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f};
    GLfloat  spotDir[] = { 38.0f, 2.0f, -1.0f };
    poi ho una funzione di inizializzazione della scena che contiente queste istruzioni relative alla luce:
    codice:
    // Enable lighting
        glEnable(GL_LIGHTING);
    
        // Setup and enable light 0
        // Supply a slight ambient light so the objects can be seen
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
    	
        // The light is composed of just a diffuse and specular components
        glLightfv(GL_LIGHT0,GL_DIFFUSE,ambientLight);
        glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
        glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
    
        // Specific spot effects
        // Cut off angle is 60 degrees
        glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,50.0f);
    
        // Enable this light in particular
        glEnable(GL_LIGHT0);
    
        // Enable color tracking
        glEnable(GL_COLOR_MATERIAL);
    	
        // Set Material properties to follow glColor values
        glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
    
        // All materials hereafter have full specular reflectivity
        // with a high shine
        glMaterialfv(GL_FRONT, GL_SPECULAR,specref);
        glMateriali(GL_FRONT, GL_SHININESS,1);
    ho infine la funzione che si occupa di disegnare la scena che contiene queste istruzioni:
    codice:
    ...
    glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
    glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotDir);
    ...
    disegnaLampione(38,2,2);
    dove disegnaLampione serve a disegnare una sfera gialla sospesa in aria che dovrebbe emettere luce:
    codice:
    void disegnaLampione(GLfloat x, GLfloat y, GLfloat z)
    {
    	glPushMatrix();
    	glTranslatef(x,y,z);
    	glColor3f(1, 1, 0); 
    	glutSolidSphere(0.2f, 15, 15);
    	glPopMatrix();
    }

    credo di non aver capito bene qualcosa... ma cosa??

  6. #6
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Senza leggere il codice in dettaglio, prova cn una luce direzionale, che è molto + semplice e vedi se funziona. Altrimenti credo che o e' diversa la matrice di trasformazione delle coordinate o nn ci sono i vettori normali. Nn ho mai usato le glu nn so dirti se le invia alla pipeline 3d.

    Cmq sappi che alcuni effetti sn anche fettizi, pensa al lens flare, quel raggio di luce che ti infastidisce durante la guida, bhe quello viene fatto cn una serie di quadrati cn textures.
    Per gli Spartani e Sparta usa spartan Il mio github

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.