在 javafx 8 中给自定义 3D 立方体蒙皮 [英] Skinning custom 3D cube in javafx 8

查看:28
本文介绍了在 javafx 8 中给自定义 3D 立方体蒙皮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用以下代码向多维数据集添加皮肤,但该皮肤根本不起作用.我测试了它是否会添加到默认立方体中,并且会(但在每一侧重复完整图像而不是环绕它,这就是我制作自定义立方体以防止这种情况发生的原因).任何帮助将不胜感激.

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);
}

推荐答案

你说得对......我也一直在尝试制作基本形状......比如胶囊、高度图、圆环等......

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%) 之间的值

As you commented, texCoords should be a value between 0.0(0%), and 1.0(100%) of your rectangle Image

我仍然无法为我的 Torus 找出我的 texCoords...

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[] 没问题...因为它是一个简单的 Integer[]...

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆