在JavaFX中,如何为网格的背面着色?

在JavaFX中,如何为网格的背面着色?,javafx,3d,Javafx,3d,我正在使用中讨论的相同技术在JavaFX中创建一个3D绘图,使用MeshView和PhongMaterial提供颜色。但是,只有材质的顶部是彩色的,如果用户旋转相机从下方观看,则无法确定绘图的形状,因为它是全黑色的 我的问题是: 有没有办法设置网格背面的材质? 如果没有,有没有好的方法来伪装它?我可以想象,在完全相同的位置创建一个倒置的新网格会导致渲染问题;最好的方法是这样做,但应用一个非常小的偏移,使两个网格不完全在彼此的顶部? 编辑:我在下面包含了一些示例代码,这些代码是从我的实际代码中删去

我正在使用中讨论的相同技术在JavaFX中创建一个3D绘图,使用MeshView和PhongMaterial提供颜色。但是,只有材质的顶部是彩色的,如果用户旋转相机从下方观看,则无法确定绘图的形状,因为它是全黑色的

我的问题是:

有没有办法设置网格背面的材质? 如果没有,有没有好的方法来伪装它?我可以想象,在完全相同的位置创建一个倒置的新网格会导致渲染问题;最好的方法是这样做,但应用一个非常小的偏移,使两个网格不完全在彼此的顶部? 编辑:我在下面包含了一些示例代码,这些代码是从我的实际代码中删去的,但包含的内容足以说明问题。默认情况下,它显示网格的顶部,在本例中为红色。如果更改读取“new Rotate-30,Rotate.X_AXIS”的线,使角度变为+30而不是-30,它将旋转摄影机以显示网格的底面,您将看到该底面显示为黑色

包装试验; 导入javafx.application.application; 导入javafx.scene.DepthTest; 导入javafx.scene.PerspectiveCamera; 导入javafx.scene.scene; 导入javafx.scene.sceneatialiasing; 导入javafx.scene.SubScene; 导入javafx.scene.image.image; 导入javafx.scene.image.PixelWriter; 导入javafx.scene.image.WritableImage; 导入javafx.scene.layout.Region; 导入javafx.scene.layout.StackPane; 导入javafx.scene.paint.Color; 导入javafx.scene.paint.PhongMaterial; 导入javafx.scene.shape.CullFace; 导入javafx.scene.shape.DrawMode; 导入javafx.scene.shape.MeshView; 导入javafx.scene.shape.TriangleMesh; 导入javafx.scene.transform.Rotate; 导入javafx.scene.transform.Translate; 导入javafx.stage.stage; 公共类TestApp扩展了应用程序{ 公共静态无效字符串[]args{ 发射艇; } @凌驾 public void startStage阶段引发异常{ TestPlot tp=新的测试图; tp.setprefsize600400; 场景=新场景; 第二阶段:第二阶段; 舞台表演; } 类TestPlot扩展区域{ 私人最终透视照相机=新透视照相机真; 私人双精度[]数据=新双精度[500][500]; 私有最终StackPane根=新StackPane; 私有最终亚新世; 公共试验区{ 亚场景=新的亚场景,1,1,真实,场景化。平衡; 亚新世;刚毛锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥锥; getChildren.addsubscene; widthProperty.addListenerobs、oldVal、newVal->refreshPlot; heightProperty.addListenerobs、oldVal、newVal->refreshPlot; 刷新图; } 私人空地{ //设置子场景边界以匹配打印边界,以防打印失败 //调整大小 subscene.setHeightthis.getHeight; subscene.setWidththis.getWidth; //清除任何现有的东西 root.getChildren.clear; root.setStyle-fx-background-color:rgba0,0,0,0;; root.getChildren.addcamera; camera.getTransforms.clear; int xDataPoints=data.length; int zDataPoints=数据[0]。长度; //创建数据网格 三角形网格=新三角形网格; 对于int x=0;x 还需要将环境光添加到场景中。曲面的法线将自动确定,如果法线背向光源,则使用的标量积将不会为正

root.getChildren().add(new AmbientLight(Color.WHITE));
修改MeshView的几何图形:

还需要将环境光添加到场景中。曲面的法线将自动确定,如果法线背向光源,则使用的标量积将不会为正

root.getChildren().add(new AmbientLight(Color.WHITE));

不幸的是,我已经尝试过这个方法,它似乎不会影响网格背面的颜色。我用一些示例代码更新了我的问题,说明了这个问题,尽管将“消隐面”设置为“无”。设置环境光源修复了它,谢谢!不幸的是,我已经尝试过这个方法,它似乎不会影响网格背面的颜色。我用一些示例代码更新了我的问题,说明了这个问题,尽管将“消隐面”设置为“无”。设置环境光源修复了它,谢谢!