java libgdx box2d lighting box2dlights

java - Luz Libgdx sin caja2d



box2d lighting (2)

Desafortunadamente, LibGDX ya no ofrece nada como esto.

Pero puede hacerlo usted mismo fácilmente si no quiere sombras.

Aquí hay un pequeño video de alguien que lo ha hecho a través de LibGDX. Aquí está el artículo de este video, con el código y las descripciones y todo lo proporcionado. Puedes hacerlo de esta manera con sombreadores, pero también puedes hacer lo mismo simplemente renderizando un mapa de luces a un FBO (en los enlaces dados puedes ver cómo hacerlo) y luego simplemente renderizarlo de la manera habitual con la fusión activada en la parte superior de tu pantalla. El SpriteBatch estándar puede hacer eso y no necesita ningún sombreador personalizado.

Si aún quieres tener sombras reales con obstáculos, probablemente encontrarás este artículo muy útil. Pero esto es mucho más lento y necesita sombreadores especiales.

Tampoco hay forma de usar Box2dLights sin Box2D por cierto.

Empecé a crear un juego usando libgdx. Es un tirador 2D de arriba hacia abajo que usa scene2d ui. Ahora pensé que podría agregar oscuridad y luz a algunos niveles, pero no quiero reescribir todo usando box2d. No necesito sombras realistas solo algún tipo de luz ambiental y un círculo de luz alrededor de mi personaje, que no se ve afectado por las paredes y otros obstáculos que lo rodean. Entonces, ¿quería saber si hay algún tipo de sistema de luces en libgdx? ¿O puedo usar box2dlights sin usar body2d bodies / world ...? Gracias


En mi opinión, la respuesta marcada es incorrecta.

Es bastante simple de usar box2dLights sin usar box2d si no quieres sombras. La pregunta era, si es posible agregar algún tipo de luz circular alrededor de un personaje.

Usé dos enfoques diferentes, solo uno usando box2dlights.

El artículo en la respuesta marcada excluye un método que utiliza FBO. Realmente no lo necesito si solo quieres iluminar un área. Solo necesito un sprite, así. Ahora colócalo en algún lugar de tu pantalla y, cuando lo estés renderizando, haz lo siguiente:

batch.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA); theLightSprite.draw(batch, parentAlpha); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

En primer lugar, se cambia la función de mezcla, por lo que no solo renderizamos el sprite, sino que lo mezclamos de una manera luminosa en el fondo. Después de dibujarlo, restablezca la función de fusión a la normalidad, de modo que todo lo demás después de esto se vuelva a representar normalmente. Eso es.

El segundo enfoque usa box2dlights. Sí, necesitamos un objeto mundial box2d, pero no necesitamos hacer nada con él. Entonces, lo que hacemos es:

world = new World(new Vector2(0,0),false); rayHandler = new RayHandler(world); rayHandler.setCombinedMatrix(stage.getCamera().combined); new PointLight(rayHandler,1000, Color.BLUE,radius,x_position,y_position);

Primero creamos nuestro mundo, eso no hace nada. Solo lo necesitamos para la segunda declaración, donde creamos nuestro RayHandler, que calcula nuestras luces. En la tercera declaración, establecemos la matriz de rayHandler. En este caso, uso scene2d y, por lo tanto, uso la matriz combinada de cámaras de escenarios para ello. Si usa otra cámara, simplemente use su matriz combinada aquí. La última instrucción crea un punto de luz con el rayHandler, y describe el número de rayos, el color de las luces, su radio y su posición.

Todo lo que tenemos que hacer ahora es dibujar nuestro escenario o sprites en nuestro método render () y llamar

rayHandler.updateAndRender();

después de eso en el método de renderizado. Muy fácil.