ModelBuilder 零件三角形在特定点上的奇怪行为

ModelBuilder Part Triangle Weird Behavior on Specific Points

我使用 libgdx 构建 Android 应用程序。我想画 3d 三角形。我指定了 2 个三角形,位置为:

final Triangle triangle3 = new Triangle(
        new Point3(0, 0, 0),
        new Point3(0, -10, 0),
        new Point3(-10, 0, 0),
        Color.BLUE
);

final Triangle triangle4 = new Triangle(
        new Point3(0, 0, 0),
        new Point3(0, -10, 0),
        new Point3(10, 0, 0),
        Color.YELLOW
);

然后将其保存到我自定义的数组中 class Shape:

final Shape shape = new Shape(new Triangle[]{
        triangle3,
        triangle4,
});

我创建模型实例:

ModelInstance modelInstance() {
    int attr = VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal;
    ModelBuilder modelBuilder = new ModelBuilder();
    modelBuilder.begin();
    for (int i = 0; i < triangles.length; i++) {
        Triangle triangle = triangles[i];
        modelBuilder.part("triangle" + i, GL20.GL_TRIANGLES, attr,
                new Material(ColorAttribute.createDiffuse(triangle.color)))
                .triangle(triangle.points[0].vector(), triangle.points[1].vector(), triangle.points[2].vector());
    }
    return new ModelInstance(modelBuilder.end(), 0,0 ,0 );
}

我的相机设置:

camera = new OrthographicCamera(viewportWidth, viewportHeight);
camera.position.set(0f, 0f, 1000f);
camera.direction.set(0, 0, -1);
camera.near = 1f;
camera.far = 2000f;

我的问题:没有显示蓝色三角形,但显示了黄色三角形。但是,如果我在下面交换这两行,它就会出现。奇怪的。知道为什么吗?

final Triangle triangle3 = new Triangle(
        new Point3(0, 0, 0),
        new Point3(-10, 0, 0), <-- swap this line..
        new Point3(0, -10, 0), <-- with this line..
        Color.BLUE
);

实际上,这是正常行为。正如此处所说(https://github.com/libgdx/libgdx/wiki/Material-and-environment),IntAttribute.CullFace Material 的默认值是 GL_BACK(仅渲染正面)。从前面看不到我的蓝色三角形,但旋转相机后,我现在可以看到它们了。三角形点数组的顺序会影响对象面向的位置。

但是我希望我的形状从任何角度都能看到,所以我最后使用IntAttribute.createCullFace=GL_NONE material渲染,所以现在三角形可以从任何角度看到。

modelBuilder.part("triangle", GL20.GL_TRIANGLES, attr,
            new Material(ColorAttribute.createDiffuse(color), IntAttribute.createCullFace(GL20.GL_NONE)))
            .triangle(points3[0], points3[1], points3[2]);