scenejs フレームワークを使用して webgl アニメーションを作成しました。同一の要素が多数含まれるため、使用するコードの量を最小限に抑え、要素をできるだけ再利用したいと考えています。
まず、次のように定義された diskJSON を取得しました。
var diskJSON = [{
type: "disk",
radius: 3,
inner_radius: 2}];
次のコードを SceneJS で実行すると、正常に動作します。
{
type: "material",
emit: 0,
baseColor: {
r: 0.3,
g: 0.3,
b: 0.9
},
specularColor: {
r: 0.9,
g: 0.9,
b: 0.9
},
specular: 0.9,
shine: 100.0,
nodes: [ {
type: "translate",
x:10,
y:1,
nodes: [
{
type: "translate",
z:speedMultiplier*0.8,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
},
{
type: "translate",
z:speedMultiplier*9.8,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
},
{
type: "translate",
z:speedMultiplier*11.64,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
},
{
type: "translate",
z:speedMultiplier*13.32,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
}
]
}
]
}
ただし、以前に定義したのと同じ diskJSON を再利用しようとすると、4 つのノードではなく、1 つのノードしか作成されません。
{
type: "material",
emit: 0,
baseColor: {
r: 0.3,
g: 0.3,
b: 0.9
},
specularColor: {
r: 0.9,
g: 0.9,
b: 0.9
},
specular: 0.9,
shine: 100.0,
nodes: [ {
type: "translate",
x:10,
y:1,
nodes: [
{
type: "translate",
z:speedMultiplier*0.8,
nodes:diskJSON
},
{
type: "translate",
z:speedMultiplier*9.8,
nodes:diskJSON
},
{
type: "translate",
z:speedMultiplier*11.64,
nodes:diskJSON
},
{
type: "translate",
z:speedMultiplier*13.32,
nodes:diskJSON
}
]
}
]
}
アプリケーションにはこれらのノードが何千もあるため、毎回再定義するのはかなり無駄に思えます。これは Scenejs の問題ですか、それとも Javascript/JSON 機能に関して意図したとおりに機能していますか?