gpt4 book ai didi

3d - 是否可以在 JavaFX 8 中创建没有纹理的 3D 模型?

转载 作者:行者123 更新时间:2023-12-02 10:53:20 25 4
gpt4 key购买 nike

我想在 JavaFX 8 应用程序中创建一个模型,该模型将有大约 400000 个多边形。而且我不需要任何纹理,只需要简单的颜色。通常需要有这样的东西:

float[] points = {
-5, 5, 0,
-5, -5, 0,
5, 5, 0,
5, -5, 0
};
float[] texCoords = {
1, 1,
1, 0,
0, 1,
0, 0
};
int[] faces = {
2, 2, 1, 1, 0, 0,
2, 2, 3, 3, 1, 1
};

TriangleMesh mesh = new TriangleMesh();
mesh.getPoints().setAll(points);
mesh.getTexCoords().setAll(texCoords);
mesh.getFaces().setAll(faces);

如果我在没有 texCoordsfaces 数组的情况下使用此代码,它肯定不起作用。那么是否可以创建没有纹理的 3D 模型呢?

最佳答案

简短回答

您必须为 TriangleMesh 定义所有点、面和纹理坐标,网格体才能在 Java 8 中有效渲染。

一些解释

您正在使用 TriangleMesh为你的模型。这些面描述了用于绘制网格的三角形。如果您不提供面,则系统无法知道构成要渲染的多边形的三角形是什么。

这只是一个实现细节(在 TriangleMesh javadoc 中记录),您必须为网格提供纹理坐标值,即使在您的情况下,您将使用单一漫反射颜色进行渲染,但它不会值是什么并不重要。

Java 8 仅定义了用于渲染 3D 形状(例如网格)的单一 Material 。该 Material 是 PhongMaterial 。使用 PhongMaterial,您不需要提供图像纹理来渲染 Material ,您可以通过调用 material.setDiffuseColor(Color.BLUE) 为 Material 使用基本颜色(例如蓝色)。 。每个多边形将根据 phong shading algorithm 进行着色。 ,考虑到场景图中的其他项目,如点光源、环境光、透明区域、遮挡区域、镜面高光等。这使您可以真实地查看模型(如果所有多边形都被漆成蓝色,它就会显示出来)作为蓝色 Blob ,您将无法辨别模型的内部细节)。

还有其他可以使用的着色技术,例如 flat shadinggouraud shading或自定义着色算法,但 Java 8 不支持使用这些着色技术的 Material - 您必须使用 PhongMaterial。

现在,如果您将 PhongMaterial 的漫反射颜色设置为纯色,并且没有为 PhongMaterial 设置任何其他值,则提供给 TriangleMesh 的纹理坐标值并不重要。提供纹理坐标以便着色器可以从 Material 中查找像素颜色以渲染多边形。由于 Material 具有单一统一颜色,因此您可以指定任何有效的纹理坐标(例如 0 到 1 之间的任何值),它将返回相同的颜色。因此,在您的情况下,如果您不想,则无需计算模型的纹理坐标,您可以将所有纹理坐标值设置为 0 或 1,并且您将获得相同的渲染结果输出。

关于3d - 是否可以在 JavaFX 8 中创建没有纹理的 3D 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com