问题
我想将漫反射贴图应用于 MeshView。当我将带有漫反射贴图的材质应用到 MeshView 时,它不可见。然而,应用于 Box 的相同材质是可见的。
题
我需要做什么才能将漫反射贴图应用到 MeshView?
代码
该代码生成带有随机噪声的图像。该图像用作 PhongMaterial 中的漫反射贴图。显示图像,其上方是应用了材质的框,框上方是应用了材质的 MeshView(金字塔)。该材料在金字塔上不可见。您可以使用鼠标拖动进行旋转。
import java.util.Random;
import javafx.application.Application;
import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.SceneAntialiasing;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.TriangleMesh;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
public class Test extends Application {
private double mousePosX, mousePosY;
private double mouseOldX, mouseOldY;
private final Rotate rotateX = new Rotate(20, Rotate.X_AXIS);
private final Rotate …Run Code Online (Sandbox Code Playgroud) 我正在使用本答案中讨论的相同技术在 JavaFX 中创建 3D 绘图,并使用 MeshView 和 PhongMaterial 来提供颜色。然而,只有材质的顶部是彩色的,如果用户旋转相机从下面查看,则无法确定绘图的形状,因为它是全黑的。
我的问题:
编辑:我在下面包含了一些示例代码,这些代码是从我的真实代码中删除的,但包含足够的内容来说明问题。默认情况下,它显示网格的顶部,在本例中为红色。如果您更改读取的行new Rotate(-30, Rotate.X_AXIS)以使角度变为+30而不是-30,它将旋转相机以显示网格的底面,您将看到它显示为黑色。
package test;
import javafx.application.Application;
import javafx.scene.DepthTest;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.SceneAntialiasing;
import javafx.scene.SubScene;
import javafx.scene.image.Image;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.CullFace;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.TriangleMesh;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class TestApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override …Run Code Online (Sandbox Code Playgroud)