Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Luz de punto libgdx no funciona en la malla generada

He estado intentando iluminar las mallas planas generadas por lo siguiente:

private Model createPlane(float w, float h, Texture texture) { Mesh mesh = new Mesh(true, 4, 6, new VertexAttribute(Usage.Position, 3, "a_position"), new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoord0"), new VertexAttribute(Usage.Normal, 3, "a_normal")); float w2 = w * this.CELL_SIZE; float h2 = h * this.CELL_SIZE; mesh.setVertices(new float[] { w2, 0f, h2, 0, 0, 0, 1, 0, w2, 0f, -h2, 0, h, 0, 1, 0, -w2, 0f, h2, w, 0, 0, 1, 0, -w2, 0f, -h2 , w,h, 0, 1, 0 }); mesh.setIndices(new short[] { 0, 1, 2, 1, 3, 2}); Model model = ModelBuilder.createFromMesh(mesh, GL10.GL_TRIANGLES, new Material(TextureAttribute.createDiffuse(texture))); return model; } 

Y se representan utilizando:

 //the environment setup env = new Environment(); env.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f)); env.add(new PointLight().set(Color.ORANGE, 5f, 1f, 5f, 10f)); env.add(new DirectionalLight().set(Color.WHITE, -1f, -0.8f, -0.2f)); ... //the render method batch.begin(); batch.render(inst, env);//inst is a ModelInstance created using the Model generated from createPlane(...) batch.end(); 

Las mallas se muestran correctamente (UVs, textura) y parecen estar adecuadamente afectadas por la iluminación direccional y ambiental.

Cuando intento agregar una luz de punto (vea el ambiente anterior) ninguno de los planos generados de createPlane (…) se ven afectados. He intentado crear otro pedacito de geometría usando el createBox de la clase de ModelBuilder (…) y parece responder correctamente a la luz del punto. Debido a eso estoy asumiendo que no estoy generando el avión correctamente, pero el hecho de que aparentemente está siendo afectado por la luz direccional / ambiental me está tirando un poco.

Vale la pena señalar que el tamaño de los aviones generados varían, no estoy particularmente seguro de si una luz de punto afectaría a 4 vértices mucho, pero esperaba más que nada. Mover la luz del punto alrededor (más cerca de ciertos vértices) tampoco hace nada.

Cualquier ayuda sería muy apreciada.

¡Gracias!

One Solution collect form web for “Luz de punto libgdx no funciona en la malla generada”

Sería genial saber qué sombreado que está utilizando. ¿El predeterminado? No estoy seguro si lo arreglaron que ya, tenían un error hace un tiempo, donde el puntolightning sólo estaba trabajando en algunos dispositivos (esto tenía algo todo con la implementación de opengles por el fabricante. Yo personalmente arregló esto usando mi propio shader.

Edit: Esto parece ser fijo

Comprobé el código que estoy usando. El problema fue determinar la matriz de luz correcta en el sombreado. ¿Te gusta esto al final:

  // on some devices this was working int u_lightPosition = program.getUniformLocation("u_lightPosition[0]"); int u_lightColors = program.getUniformLocation("u_lightColor[0]"); if(u_lightPosition < 0 && u_lightColors < 0) { // on others this was working u_lightPosition = program.getUniformLocation("u_lightPosition"); u_lightColors = program.getUniformLocation("u_lightColor"); } 

¡Espero que esto ayude!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.