2009-12-28 5 views
6

Sto cercando di creare un globo di luce (come un sole) ma non riesco a renderlo visibile a tutti. Ti darò alcuni snipet di codice che ho. È in Java LWJGL, quindi potrebbe sembrare un po 'diverso.Come posso creare una sfera di luce in openGL?

private float lightAmbient[] = { 0.0f, 1.0f, 1.0f, 1.0f }; // Ambient Light Values (NEW) 
    private float lightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };  // Diffuse Light Values (NEW) 
    private float lightPosition[] = { 0.0f, 0.0f, -5.0f, 1.0f }; // Light Position (NEW) 
    float lightSpecular[] = { 0f, 0f, 0.5f, 1.0f }; // highlight 

e

ByteBuffer temp = ByteBuffer.allocateDirect(16); 
     temp.order(ByteOrder.nativeOrder()); 
     GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(lightAmbient).flip());    // Setup The Ambient Light 
     GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(lightDiffuse).flip());    // Setup The Diffuse Light 
     GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(lightPosition).flip());   // Position The Light 
     GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR,(FloatBuffer)temp.asFloatBuffer().put(lightSpecular).flip());   // Position The Light 

     GL11.glEnable(GL11.GL_LIGHT1); 

Che altro devo fare per rendere la luce visibile?

risposta

7

Le luci non sono mai visibili.

Tuttavia, i loro effetti sui materiali di altri oggetti sono. È quindi importante che tutti gli oggetti nella scena abbiano le proprietà appropriate del materiale impostate.

Questo articolo indica che mentions all the common mistakes si effettua quando si tenta di illuminare le scene.

alt text

Si vuole cercare le funzioni glColorMaterial in quanto sono il modo più semplice per impostare le proprietà del materiale.

2

Come ha detto Frank, le luci sono invisibili, sono semplicemente utilizzate come input per l'equazione di illuminazione utilizzata dal sistema di rendering (hardware/software) per calcolare i colori finali della geometria.

Se vuoi che qualcosa assomigli ad una luce devi imitare gli effetti che sei abituato a vedere guardando una fonte di luce brillante. Per il sole uno degli effetti più evidenti è la fioritura leggera.

Per informazioni sulla generazione di luce, leggere questo OpenGL Bloom Tutorial, ed ecco alcuni sample code in Java utilizzando GLSL per generare un effetto di fioritura.

2

A seconda se si desidera ottenere effetti di stile a fiore intero (in tal caso, guardare la risposta di Josh Perry) o solo un oggetto oggetto non scuro che sembra emettere luce, si potrebbe prendere in considerazione questo approccio semplice.

  • Renderizza la scena senza la mesh "sole" effettiva ma con una luce puntiforme al centro del tuo "sole".
  • Disabilita illuminazione GL.
  • Renderizza una sfera o usa uno billboard per rendere un'immagine del tuo sole nel punto appropriato.
  • Riattivare GL Lighting prima di visualizzare il fotogramma successivo.

perché hai illuminazione disattivato, il sole saranno resi 'full-brillante', senza ombreggiatura o illuminazione calcoli in corso di esecuzione.