2017/08/25(金)ノードとコンポーネント

grimoire.jsではすべてのデータ(タグ)は、木構造で管理されノードとして登録されています
各ノードはコンポーネント(機能)をいくつか持っており、親から継承されています

ノード

ノードを登録することで、自分で作ったデータ(タグ)を利用することができます
標準では、gomlやscene、camera、meshなどが登録されています

基本的に描画で使うオブジェクトはmeshから派生させることになります
また、形状についてはgeometryから派生させます

ノードの登録

registerNodeを使い登録できます

gr.registerNode("ノード名", [ノードの持つコンポーネントのリスト], {デフォルト値}, "親ノード")

myobjectという名前でノードを登録してみる
コンポーネントは特に無し(親から継承したコンポーネントは持ってる)

<div style="width: 640px; height: 480px; border: 1px dotted black;">
  <script type="text/javascript">
    gr.registerNode("myobject", [], {}, "mesh");  
  </script>
  <script type="text/goml">
    <goml>
      <scene>
        <myobject geometry="cube" position="1,1,0" color="#99f" />
        <camera/>
      </scene>
    </goml>
  </script>
</div>

デフォルトのパラメータを指定した場合

<div style="width: 640px; height: 480px; border: 1px dotted black;">
  <script type="text/javascript">
    gr.registerNode("myobject", [], {geometry: "sphere"}, "mesh");  // デフォルトで 球(sphere) にする
  </script>
  <script type="text/goml">
    <goml>
      <scene>
        <myobject position="1,1,0" color="#99f" />                  <!-- デフォルトで指定された 球(sphere) になる -->
        <myobject geometry="cube" position="-1,1,0" color="#99f" /> <!-- パラメータで指定した 立方体(cube) になる -->
        <camera/>
      </scene>
    </goml>
  </script>
</div>

コンポーネント

コンポーネントを登録することで、オブジェクトに機能を追加することができます?

コンポーネントの登録

registerComponentを使い登録できます

gr.registerComponent("コンポーネント名", {属性値やイベント})