我使用libgdx构建Android应用。我想绘制3D三角形。我指定了两个三角形的位置:
$result = my_table::where(function($query){
$query->where(DB::raw('MONTH(from_date)'), '>=' , 2)
->where(DB::raw('Year(from_date)'), '>=' , 2019);
})
->where(function($query){
$query->where(DB::raw('MONTH(to_date)'), '<=' , 4)
->where(DB::raw('YEAR(to_date)'), '<=' , 2019);
})
->get();
然后将其保存到我的自定义类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
);
中的数组中:
Shape
我创建了ModelInstance:
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;
答案 0 :(得分:0)
实际上,它是正常行为。如此处所说(https://github.com/libgdx/libgdx/wiki/Material-and-environment),IntAttribute.CullFace材质的默认值为GL_BACK(仅渲染正面)。从前面看不到我的蓝色三角形,但是旋转相机后,现在可以看到它们了。三角形点阵列的顺序会影响对象面对的位置。
但是我希望从任何角度都可以看到我的形状,所以我最终使用IntAttribute.createCullFace=GL_NONE
材质进行渲染,因此现在可以从任何角度看到三角形了。
modelBuilder.part("triangle", GL20.GL_TRIANGLES, attr,
new Material(ColorAttribute.createDiffuse(color), IntAttribute.createCullFace(GL20.GL_NONE)))
.triangle(points3[0], points3[1], points3[2]);