I'm working with the Sceneform and was able to build custom made polygons filled with triangles (in my case, I'm taking first anchor and fill a triangle with a pair of next anchors (1-2-3, 1-3-4, 1-4-5 etc).
That builds a polygon for me, but the texture that is applied is aligned towards the first point, and I need it to always look in the same direction for all triangles.
The code for triangles I have from here: How to draw a polygon with Sceneform, ARCore?
    private fun makeTriangleWithAnchors(anchorNodes: List<AnchorNode>, material: Material): ModelRenderable {
        check(anchorNodes.size == 3) { "Different count of anchorsList than 3" }
        val p0 = anchorNodes[0].worldPosition
        val p1 = anchorNodes[1].worldPosition
        val p2 = anchorNodes[2].worldPosition
        val up = Vector3.up()
        val uvTop = UvCoordinate(0.5f, 1.0f)
        val uvBotLeft = UvCoordinate(0.0f, 0.0f)
        val uvBotRight = UvCoordinate(1.0f, 0.0f)
        val vertices = ArrayList(listOf(
            Vertex
                .builder()
                .setPosition(p0)
                .setNormal(up)
                .setUvCoordinate(uvTop)
                .build(),
            Vertex
                .builder()
                .setPosition(p1)
                .setNormal(up)
                .setUvCoordinate(uvBotRight)
                .build(),
            Vertex
                .builder()
                .setPosition(p2)
                .setNormal(up)
                .setUvCoordinate(uvBotLeft)
                .build()
        ))
        val triangleIndices = ArrayList<Int>(3)
        triangleIndices.add(0)
        triangleIndices.add(2)
        triangleIndices.add(1)
        triangleIndices.add(0)
        triangleIndices.add(1)
        triangleIndices.add(2)
        val submesh = Submesh
            .builder()
            .setTriangleIndices(triangleIndices)
            .setMaterial(material)
            .build()
        val renderableDefinition = RenderableDefinition
            .builder()
            .setVertices(vertices)
            .setSubmeshes(listOf(submesh))
            .build()
        val future = ModelRenderable
            .builder()
            .setSource(renderableDefinition)
            .build()
        val result: ModelRenderable?
        result = try {
            future.get() as ModelRenderable
        } catch (e: InterruptedException) {
            throw AssertionError("Error creating renderable.", e)
        } catch (e: ExecutionException) {
            throw AssertionError("Error creating renderable.", e)
        }
        return result ?: throw AssertionError("Error creating renderable.")
    }
Using that code without changes renders given look (I have dawn black lines to show splitting into the triangles):
The texture is an arrow looking up. And I want all applied textures to "look" up and tile, to make seamless borders when triangles touch with each other.
Making a solid fill:
I feel, that there is something I need to do with the UvCoordinates of each vertex (to map those to the world, not a single triangle), but I'm failing to find a way how to do that.
Also, to fill those triangles seamlessly, maybe I need to scale the UV coordinates gathered from the points respectively to the normalized triangle to prevent different texture scalings when triangles sizes are different.
Is there a way to "generalize" the uv coordinates?

