对导入的三角形网格Javafx进行纹理处理

对导入的三角形网格Javafx进行纹理处理,java,javafx,3d,textures,javafx-3d,Java,Javafx,3d,Textures,Javafx 3d,我在导出到STL的blender中创建了一个设计,并使用导入到我的JavaFX程序中并运行它。一切运行正常,应用程序工作正常,只缺少一件东西…纹理,所以基本上,我想用我导入的网格创建一个图像,如下图所示,用于更小的设计 是否有任何程序或算法,我可以用来创建一个像下面这样的图像,我可以在以后手动编辑并用作整个三角形网格的纹理?另外,在旁注中,是否可以在程序中实时编辑此图像,并在运行时交换颜色?很抱歉,如果措辞不当,如果您需要任何澄清,我可以提供。当您使用第三方3D导入器导入3D模型时,您对生成的

我在导出到STL的blender中创建了一个设计,并使用导入到我的JavaFX程序中并运行它。一切运行正常,应用程序工作正常,只缺少一件东西…纹理,所以基本上,我想用我导入的网格创建一个图像,如下图所示,用于更小的设计


是否有任何程序或算法,我可以用来创建一个像下面这样的图像,我可以在以后手动编辑并用作整个三角形网格的纹理?另外,在旁注中,是否可以在程序中实时编辑此图像,并在运行时交换颜色?很抱歉,如果措辞不当,如果您需要任何澄清,我可以提供。

当您使用第三方3D导入器导入3D模型时,您对生成的三角形网格的控制力会降低。如果要为模型提供纹理特征,则必须编辑导出的文件并添加纹理坐标,这不是最佳方法

但如果可以从头开始生成网格,则可以轻松地在其上应用纹理

这显示了如何定义纹理坐标,并使用与提供二十面体纹理相同的网络图像

根据这个问题的答案,纹理可以在没有实际图像的情况下定义,只需使用调色板即可

您可以在运行时轻松更改这些,即当您单击一个面时,您可以更改该面上的颜色

Fxyz使用TexturedMesh,设计用于轻松将纹理应用于3D形状

您可以在那里找到许多原语,如

这显示了二十面体上不同纹理模式的结果

此简短片段演示如何在面上应用纹理,并在运行时对其进行更改:

private int numColors = 10;

@Override
public void start(Stage primaryStage) {
    PerspectiveCamera camera = new PerspectiveCamera(true);   
    camera.setTranslateZ(-5);

    IcosahedronMesh icoFaces = new IcosahedronMesh(100, 0);
    icoFaces.setTextureModeFaces(numColors);
    icoFaces.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-10, Rotate.Y_AXIS));

    final Group group = new Group(icoFaces);

    Scene scene = new Scene(group, 600, 400, true, SceneAntialiasing.BALANCED);
    scene.setCamera(camera);

    primaryStage.setScene(scene);
    primaryStage.setTitle(("Icosahedron - FXyz3D"));
    primaryStage.show(); 

    icoFaces.setOnMouseClicked(e -> {
        ObservableFaceArray faces = ((TriangleMesh) icoFaces.getMesh()).getFaces();
        int selectedFace = e.getPickResult().getIntersectedFace();

        int colorId = faces.get(6 * selectedFace + 1);
        int newColorId = colorId + 1 >= numColors ? 0 : colorId + 1;
        faces.set(6 * selectedFace + 1, newColorId);
        faces.set(6 * selectedFace + 3, newColorId);
        faces.set(6 * selectedFace + 5, newColorId);
    });
}
运行应用程序:

单击正面绿色面后:


JavaFx有一个可以创建三角形的多边形类。这将使您能够更好地控制如何处理每个三角形。您是否在Blender中创建了图像,但没有导入?可以使用任何3D建模工作室创建纹理。如果你想在运行中编辑图像,你必须首先进行图像处理或在JavaFX中创建图像。不幸的是,我导入的文件太复杂了,无法在blender外部生成,我特别关注的是1050625个面,所以在JavaFX中简单地生成它不是一个选项,我必须导入它。在JavaFX模型中拥有纹理的唯一方法是最初使用Blender模型导出它们。我以前用过.OBJ模型。看这个。注意*.obj文件已经包含每个面的纹理坐标。在软件运行时,我是否能够编辑导入的纹理?另外,我现在正在使用STL,但可以改为OBJ,纹理有什么主要区别吗?一旦你有了三角形网格,你总是可以用鼠标拾取它的一个面,所以改变纹理是一个切换索引的问题,正如我在我的示例中向你展示的那样。问题可能是找到新的正确值。