0

Z軸上で同じオブジェクトを再作成するのに問題があり、それらの間に間違ったスペースが与えられており、どこに問題があるのか​​わかりません。
オブジェクト間にスペースを入れたくない。これがオブジェクトTabua.wrlのコードです

#VRML V2.0 utf8

Transform
{
    translation 0 0 0
    children
    [
        Shape
        {
            appearance Appearance
            {
                texture ImageTexture
                {
                    url "Imagens/madeira1.jpg"
                }
            }

            geometry Box
            {
                size 2 0.05 0.5
            }
        }
    ]
}

そして、これがオブジェクトの繰り返しを作成するためのコードです。
quant=オブジェクトが繰り返される
回数compri=スペースジャンプ

#VRML V2.0 utf8
Transform
{
    rotation 0 1 0 3.14
    translation 0 0 0
    children
    [
        DEF Ponte Group
        {

        }
    ]
}

DEF pont Script
{
    field SFNode pt USE Ponte
    field SFNode me USE pont

    field SFInt32 CTRL 0
    field SFInt32 quant 5

    field MFFloat compri 0.5

    field MFString wrlTab "Tabua.wrl"

    eventIn MFNode set_node

    field SFBool inic TRUE

    url "javascript:
    function initialize()
    {
        Browser.createVrmlFromURL(wrlTab, me, 'set_node');
    }

    function set_node (node, t)
    {
        node[0].translation[2]= -compri*CTRL;
        pt.addChildren = node;
        CTRL+=1;
        if(inic)
        {
            if(CTRL < quant)
            {
                Browser.createVrmlFromURL(wrlTab, me, 'set_node');
            }
            else
            {
                inic = false;
            }
        }
    }
    "
}  

そして、何をしているのかというイメージ。
ここに画像の説明を入力してください

4

2 に答える 2

1

外部の.wrlファイルを5回再ダウンロードするのに対し、これは1回しかダウンロードしないため、PROTO代わりにを使用することをお勧めします。Browser.createVrmlFromURL


Tabua.wrl:

#VRML V2.0 utf8

PROTO Tabua[
    exposedField    SFVec3f     translation     0 0 0
]{
    Transform {
        translation IS translation
        children Shape {
            appearance Appearance {
                texture ImageTexture{
                    url "Imagens/madeira1.jpg"
                }
            }
            geometry Box {
                size 2 0.05 0.5
            }
        }
    }
}

メインシーン:

#VRML V2.0 utf8

Viewpoint {
    position     1.888 1.912 4.417
    orientation  -0.652 0.735 0.185 0.679
    fieldOfView  0.716
}

DEF Ponte Group {}

Script {
    field       SFInt32     quant               5

    field       SFString    protoDefinition     "
        EXTERNPROTO Tabua [
            exposedField    SFVec3f     translation
        ] \"Tabua.wrl\"
    "

    field       SFNode      Ponte               USE Ponte

    directOutput TRUE
    url "javascript:

    function initialize(){
        var vrml = protoDefinition;
        for (var i = 0; i < quant; i++){
            var z = i * -0.5;
            vrml += 'Tabua{translation 0 0 ' + z + '}';
        }
        Ponte.addChildren = Browser.createVrmlFromString(vrml);
    }

    "
}
于 2012-06-19T14:00:35.997 に答える
0

変数「compri」を「読み取っている」わけではないようですので、値を切り替えて完全に機能しました。

#VRML V2.0 utf8
Transform
{
    rotation 0 1 0 3.14
    translation 0 0 0
    children
    [
        DEF Ponte Group
        {

        }
    ]
}

DEF pont Script
{
    field SFNode pt USE Ponte
    field SFNode me USE pont

    field SFInt32 CTRL 0
    field SFInt32 quant 5

    #field MFFloat compri 0.7

    field MFString wrlTab "Tabua.wrl"

    eventIn MFNode set_node

    field SFBool inic TRUE

    url "javascript:
    function initialize()
    {
        Browser.createVrmlFromURL(wrlTab, me, 'set_node');
    }

    function set_node (node, t)
    {
        node[0].translation[2]= -0.5*CTRL;
        pt.addChildren = node;
        CTRL += 1;
        if(inic)
        {
            if(CTRL < quant)
            {
                Browser.createVrmlFromURL(wrlTab, me, 'set_node');
            }
            else
            {
                inic = false;
            }
        }
    }
    "
}

そもそも欲しかった結果。 ここに画像の説明を入力してください

于 2012-06-19T08:38:09.380 に答える