我的目标是创建一个在每侧都有独立图像的Box,通过使用TriangleMesh创建Box,并使用单个纹理在网格上映射点,我已经完成了这一工作。
问题是创建这些TriangleMesh时遇到了沉重的开销(高ram,高负载时间和在移动世界中物体时的缓慢性),我不确定为什么要这样做,但这是我的一些猜。
我最初尝试使用总共8个点,并在创建单个面时重新使用这些点,并包装纹理,但是由于某些原因,texcoords不喜欢仅使用8个点。当我查看Box的班级时,我发现它们也像我一样使用24分,所以看来我们无法重复使用分。
2.a我正在将3张图像加载到hbox中,然后拍摄快照以映射坐标。我想知道快照是否会引起问题,或者像素数量是否有问题。
2.b当我尝试旋转多个盒子时,这进一步引起了疑问 堆放在一个大盒子里,它仍然有一个 大量的缓慢(如果不是更多的话)。我会拍张x号的快照 图像,然后将它们映射到这个大盒子上。即,如果我有 5x5x5,将是一个盒子,每侧映射5张图像。甚至 1个单一网格仍然会导致速度变慢。如果我编辑它会加快 imageView的“ fitWidth / fitHeight”导致质量 更改。在我看来,像素数量似乎是原因。问题是,如果我要拍摄相同的图像并将它们相乘,为什么会导致速度变慢?尤其是因为做普通盒子时,我使用的单个图像比其他图像具有更多的像素,所以我认为自己做一个三角形网格会更快。
我实际上并没有一个有效的示例,因为该示例已添加到一个已有数据的程序中,但是如果需要,我会尝试创建一些示例。
我只是想弄清楚为什么要自己制作一个TriangleMesh,它与Box的代码具有相似的代码。
没有面部平滑组,但不确定是否重要。
我的脸部数组与众不同,为什么他们拥有24点却脸部数组仅从1-8开始有点困惑
int[] faces = {
2, 2, 1, 1, 0, 0, //front
2, 2, 3, 3, 1, 1,
6, 6, 5, 5, 4, 4, //right
6, 6, 7, 7, 5, 5,
10, 10, 9, 9, 8, 8, //back
10, 10, 11, 11, 9, 9,
14, 14, 13, 13, 12, 12,//left
14 ,14, 15, 15, 13, 13,
18, 18, 17, 17, 16, 16,//top
18, 18, 19, 19, 17, 17,
22, 22, 21, 21, 20, 20, //bottom
22, 22, 23, 23, 21, 21`
静态TriangleMesh createMesh(float w,float h,float d){
// NOTE: still create mesh for degenerated box
float hw = w / 2f;
float hh = h / 2f;
float hd = d / 2f;
float points[] = {
-hw, -hh, -hd,
hw, -hh, -hd,
hw, hh, -hd,
-hw, hh, -hd,
-hw, -hh, hd,
hw, -hh, hd,
hw, hh, hd,
-hw, hh, hd};
float texCoords[] = {0, 0, 1, 0, 1, 1, 0, 1};
// Specifies hard edges.
int faceSmoothingGroups[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
int faces[] = {
0, 0, 2, 2, 1, 1,
2, 2, 0, 0, 3, 3,
1, 0, 6, 2, 5, 1,
6, 2, 1, 0, 2, 3,
5, 0, 7, 2, 4, 1,
7, 2, 5, 0, 6, 3,
4, 0, 3, 2, 0, 1,
3, 2, 4, 0, 7, 3,
3, 0, 6, 2, 2, 1,
6, 2, 3, 0, 7, 3,
4, 0, 1, 2, 5, 1,
1, 2, 4, 0, 0, 3,
};
TriangleMesh mesh = new TriangleMesh(true);
mesh.getPoints().setAll(points);
mesh.getTexCoords().setAll(texCoords);
mesh.getFaces().setAll(faces);
mesh.getFaceSmoothingGroups().setAll(faceSmoothingGroups);
return mesh;
}
我还听说版本3对3D进行了改进。我一直在尝试将过去几天的问题更新为11(我之前尝试过10,但是很多代码需要修复),而9则没有。我没有下载,所以我想问一下,然后再付出更多努力使11正常工作,实际上是否会改善这种状况,但是我仍然想知道为什么trianglmesh相对比较慢。我最多可能制造1000盒。
谢谢
编辑:
我如何创建图像的示例。
public BoxMesh(width, height,depth, int stack)
{
float width = width;
float height = height;
float depth = depth
List<ImageView> imageList = new ArrayList();
imageList.add(new ImageView(new Image("file:"C:\\file1.jpg"));
HBox h = new HBox();
Image image = null;
for(int i = 0; i < stack; i++)
{
image = new Image("file:"C:\\file2.jpg");
ImageView iv = new ImageView(image);
iv.setFitWidth(image.getWidth()/2); //decreases quality to
iv.setFitHeight(image.getHeight()/2); //speed up program
h.getChildren().add(iv);
}
imageList.add(new ImageView(h.snapshot(null,null)));
VBox v = new VBox();
Image image = null;
for(int i = 0; i < stack; i++)
{
image = new Image("file:"C:\\file3.jpg");
ImageView iv = new ImageView(image);
iv.setFitWidth(image.getWidth()/2);
iv.setFitHeight(image.getHeight()/2);
v.getChildren().add(iv);
}
imageList.add(new ImageView(v.snapshot(null, null)));
PhongMaterial p = new PhongMaterial();
HBox hb = new HBox();
hb.getChildren().addAll(imageList);
WritableImage snapshot = hb.snapshot(null, null);
if(snapshot.isError())
{
System.out.println(snapshot.exceptionProperty().getValue());
}
p.setDiffuseMap(snapshot);