X3Dに変換したいVRMLコードがあります。コードは、座標を引数として与えることで、後でインスタンス化するために半径と色が異なる球を定義する必要があります。X3D:VRMLから変換されたPROTOが動作しない
まず、another questionで提案されているonline converterを使用してから、それをブレンダーで開いて確認しましたが、4つの球の代わりに1つの球しか表示されません。私はグーグルで見つかった他の同様の例と比較しましたが、なぜこれを行うのかについての違いや手掛かりはありません。いくつかのフィールドを変更して、例のように見えるようにしました。field accessType
〜initializeOnly
、<X3D ...>
〜profile="Interchange" version="3.2" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="http://www.web3d.org/specifications/x3d-3.2.xsd"
の情報です。私も<Shape>
をVRMLのように<children>
の中に置こうとしましたが、いずれの場合もただ1つの球しか表示されませんでした。
これは私がX3Dに変換するVRMLコードの簡易版である:
#VRML 2.0 utf8
PROTO Copper [ exposedField SFVec3f xyz 0 0 0 ] {
Transform {
translation IS xyz
children [
Shape {
appearance Appearance {
material Material { diffuseColor 0.78 0.5 0.2 }
}
geometry Sphere { radius 1.32 }
}
]
}
}
Copper { xyz 0.0 0.0 0.0 } # 0
Copper { xyz 0.0 1.8 1.8 } # 1
Copper { xyz 1.8 0.0 1.8 } # 2
Copper { xyz 1.8 1.8 0.0 } # 3
これは私がコンバータから得るものです:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' profile='Full' version='3.0' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.0.xsd'>
<Scene DEF='scene'>
<ProtoDeclare name='Copper'>
<ProtoInterface>
<field accessType='inputOutput' name='xyz' type='SFVec3f' value='0 0 0'/>
</ProtoInterface>
<ProtoBody>
<Transform>
<Shape>
<Appearance>
<Material diffuseColor='0.78 0.5 0.2'/>
</Appearance>
<Sphere radius='1.32'/>
</Shape>
<IS>
<connect nodeField='translation' protoField='xyz'/>
</IS>
</Transform>
</ProtoBody>
</ProtoDeclare>
<Copper/>
<Copper xyz='0 1.8 1.8'/>
<Copper xyz='1.8 0 1.8'/>
<Copper xyz='1.8 1.8 0'/>
</Scene>
</X3D>