在javafx 8中为自定义3D立方体设置外观 [英] Skinning custom 3D cube in javafx 8
问题描述
我正在尝试使用以下代码为多维数据集添加外观,但外观根本不起作用。我测试了它是否会添加到一个默认的多维数据集,它会(但重复每一面的完整图像而不是环绕它,这就是为什么我要制作一个自定义的多维数据集来防止这种情况)。任何帮助将不胜感激。
I am trying to add a skin to a cube by using the following code, but the skin will not work at all. I tested to see if it will add to a default cube and it will (but repeats the full image on each side instead of wrapping around it, which is why I am making a custom cube to prevent this). Any help would be greatly appreciated.
private void buildGraphics()
{
Image dieImage = new Image(getClass().getResourceAsStream("images/die.gif"));
PhongMaterial material = new PhongMaterial();
material.setDiffuseMap(dieImage);
material.setSpecularColor(Color.RED);
float hw = 100/2f;
float hh = 100/2f;
float hd = 100/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 tex[] =
{
100, 0,
200, 0,
0, 100,
100, 100,
200, 100,
300, 100,
400, 100,
0, 200,
100, 200,
200, 200,
300, 200,
400, 200,
100, 300,
200, 300
};
int faces[] =
{
0, 10, 2, 5, 1, 9,
2, 5, 3, 4, 1, 9,
4, 7, 5, 8, 6, 2,
6, 2, 5, 8, 7, 3,
0, 13, 1, 9, 4, 12,
4, 12, 1, 9, 5, 8,
2, 1, 6, 0, 3, 4,
3, 4, 6, 0, 7, 3,
0, 10, 4, 11, 2, 5,
2, 5, 4, 11, 6, 6,
1, 9, 3, 4, 5, 8,
5, 8, 3, 4, 7, 3
};
TriangleMesh mesh = new TriangleMesh();
mesh.getPoints().addAll(points);
mesh.getTexCoords().addAll(tex);
mesh.getFaces().addAll(faces);
MeshView box = new MeshView(mesh);
box.setMaterial(material);
graphicGroup.getChildren().add(box);
Box box2 = new Box(100, 100, 100);
box2.setTranslateX(150);
box2.setMaterial(material);
graphicGroup.getChildren().add(box2);
world.getChildren().add(graphicGroup);
}
推荐答案
你是对的......我也一直在玩基本的形状......比如Capsule,Height Maps,Torus等...
You are correct... I have also been playing around with making basic shapes.. like Capsule, Height Maps, Torus, etc...
texCoords很痛苦,但面孔更是如此做更复杂的形状时的痛苦。
The texCoords are a pain, but faces are even more of a pain when doing more complex shapes.
正如您所说,texCoords应该是您的矩形的0.0(0%)和1.0(100%)之间的值Image
As you commented, texCoords should be a value between 0.0(0%), and 1.0(100%) of your rectangle Image
我仍然无法找到我的texcoords for the Torus ...
I still have not been able to figure out my texCoords for my Torus...
我仍然认为幕后工作人员需要摆脱他们构建TriangleMesh的系统。
I still think the guys behind the scenes need to get rid of their system for building TriangleMesh's.
Point3D对Points []非常有意义,但他们使用float [] .. 。
与texCoords相同...... Point2D会更好地适应imho ..
Faces []还可以......因为它是一个简单的整数[] ......
Point3D makes perfect sense for the Points[], yet they use a float[] ... same with texCoords... Point2D would make a much better fit imho.. The Faces[] is ok... As it is a simple Integer[]...
我甚至可以创建一个以这种方式处理事物的SimpleMesh类......无论如何,很高兴你想出来了。
I may even just create a SimpleMesh class that handles thing in that way... anyways, Glad you figured it out.
这篇关于在javafx 8中为自定义3D立方体设置外观的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!