libgdx - 模型构建器零件三角形在特定点上的奇怪行为
问题描述
我使用 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
);
然后将其保存到我的自定义类中的数组中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
材质来渲染,所以现在可以从任何角度看到三角形。
modelBuilder.part("triangle", GL20.GL_TRIANGLES, attr,
new Material(ColorAttribute.createDiffuse(color), IntAttribute.createCullFace(GL20.GL_NONE)))
.triangle(points3[0], points3[1], points3[2]);
推荐阅读
- python - tkinter 应用程序可以使用 httpServer 吗?
- autodesk-forge - 我们如何实现 removeAllProperties() 查看器 API?
- sql-server - SQL 查询在 VBA 中不起作用。抛出自动化错误
- excel - 在 Excel 的堆栈柱形图中显示数据
- r - rply2 运行 32 位 r 而不是 64 位
- swift - 错误:两个演绎版的密钥相同(Xcode 10.1、Mojave 10.14.1)
- rhel - Chrony 在 10 分钟后失去与本地主机的连接
- visual-studio - 如何指定 VSPackage / VSIX Manifest prereq 或安装目标版本范围?
- c++ - 除了声明的参数和“this”指针之外,c++ (g++) 构造函数还有哪些其他参数,以什么顺序?
- unity3d - Unity自定义着色器第二遍未执行