2009-12-28 15 views
6

Estoy tratando de hacer un orbe de luz (como un sol) pero parece que no puedo hacerlo visible en absoluto. Te daré algunos snipets de código que tengo. Está en Java LWJGL, por lo que podría verse un poco diferente.¿Cómo puedo hacer una bola de luz en 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 

y

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); 

¿Qué más tengo que hacer para que la luz visible?

Respuesta

7

Las luces nunca son visibles.

Sin embargo, sus efectos sobre materiales de otros objetos son. Por lo tanto, es importante que todos los objetos en la escena tengan las propiedades apropiadas del material.

Le puede interesar este artículo que mentions all the common mistakes se hace cuando se trata de iluminar escenas.

alt text

Usted tendrá que mirar hacia arriba las funciones glColorMaterial ya que son la forma más sencilla de configurar las propiedades del material.

2

Como dijo Frank, las luces son invisibles, simplemente se utilizan como una entrada a la ecuación de iluminación utilizada por el sistema de renderizado (hardware/software) para calcular los colores finales de la geometría.

Si desea que algo se vea como una luz, debe imitar los efectos que está acostumbrado a ver cuando mira una fuente de luz brillante. Para el sol, uno de los efectos más notables es la floración ligera.

Para obtener información sobre la generación de luz de la luz, lea este OpenGL Bloom Tutorial, y aquí hay algunos sample code en Java utilizando GLSL para generar un efecto de floración.

2

Dependiendo de si desea efectos de estilo de plena floración (de ser así, mire la respuesta de Josh Perry) o simplemente un objeto no oscuro que parece emitir luz, es posible que desee considerar este enfoque simple.

  • Renderice la escena sin la malla de "sol" real pero con una luz puntual en el centro de su "sol".
  • Desactivar GL Lighting.
  • Renderice una esfera o use billboard para representar una imagen de su sol en el lugar apropiado.
  • Vuelva a habilitar GL Lighting antes de mostrar su siguiente cuadro.

Como ha desactivado la iluminación, el sol se volverá 'completamente brillante' sin sombreado o se realizarán cálculos de iluminación.

Cuestiones relacionadas