3d 如何使用SceneJS在场景中分布随机立方体? SceneJS试验
我想使用SceneJS在画布场景中随机分布立方体。因为图书馆有主要的学习曲线,我自己用几个例子检查并开始编码。我编写了一些代码,但无法说服自己错误在哪里:3d 如何使用SceneJS在场景中分布随机立方体? SceneJS试验,3d,webgl,scenejs,3d,Webgl,Scenejs,我想使用SceneJS在画布场景中随机分布立方体。因为图书馆有主要的学习曲线,我自己用几个例子检查并开始编码。我编写了一些代码,但无法说服自己错误在哪里: <head> <title> SceneJS Test</title> <script type="text/javascript" src="resources/scenejs.js"></script> </head> 主要=功能({ N=10;
<head>
<title> SceneJS Test</title>
<script type="text/javascript" src="resources/scenejs.js"></script>
</head>
主要=功能({
N=10;
var canvas=document.getElementById(“theCanvas”);
var sceneName=“theScene”;
SceneJS.createScene({
id:sceneName,
canvasId:canvas,
节点:[{
键入:“库”,
id:“mylib”,
节点:[]
},
//“查看变换”指定眼睛位置,默认情况下查看原点
{
id:“看”,
键入:“看”,
眼睛:{x:0.0,y:1.0,z:80.0},
up:{z:1.0},
看:{x:0,y:0,z:0},
节点:[
/*摄影机描述投影*/
{
类型:“照相机”,
光学:{
键入:“透视图”,
佛维:45.0,
外观:720/405,
接近:0.10,
远:10000.0
},
节点:[
{
键入:“旋转”,
id:“音高”,
角度:0.0,
x:1.0,
节点:[
{
键入:“旋转”,
id:“偏航”,
角度:0.0,
y:1.0,
}
]
}
]
}
]
}
]
});
var量表=100;
var scene=SceneJS.scene(sceneName);
对于(var i=0;i将节点添加到最内侧的旋转节点-这样它们将“继承”由注视、摄影机和旋转节点设置的视图、投影和建模变换
因此,为该旋转节点指定一个类似“myYawRotate”的ID,然后从场景中获取对该节点的引用:
<body onload = "main()" bgcolor="white">
<canvas id="theCanvas" width="720" height="405">
</canvas>
<script type="text/javascript">
main = function({
N = 10;
var canvas = document.getElementById("theCanvas");
var sceneName = "theScene";
SceneJS.createScene({
id: sceneName,
canvasId: canvas,
nodes: [{
type:"library",
id:"mylib",
nodes:[]
},
// Viewing transform specifies eye position, looking at the origin by default
{
id:"lookat",
type: "lookAt",
eye : { x: 0.0, y: 1.0, z: 80.0 },
up : { z: 1.0 },
look:{x:0,y:0,z:0},
nodes: [
/* Camera describes the projection*/
{
type: "camera",
optics: {
type: "perspective",
fovy : 45.0,
aspect : 720/405,
near : 0.10,
far : 10000.0
},
nodes: [
{
type: "rotate",
id: "pitch",
angle: 0.0,
x : 1.0,
nodes: [
{
type: "rotate",
id: "yaw",
angle: 0.0,
y : 1.0,
}
]
}
]
}
]
}
]
});
var scale = 100;
var scene = SceneJS.scene(sceneName);
for(var i=0; i<N; i++)
{
scene.add("node",{
type:"translate",
x:(Math.random()-0.5)* scale,
y:(Math.random()-0.5)* scale,
z:(Math.random()-0.5)* scale,
nodes:[{
type: "cube",
id: "cube"+i
}]
});
}
});
</script>
</body>
并将多维数据集分支添加到该节点:
var myRotate = scene.getNode("myYawRotate");
这是一个称为“状态继承”的场景图概念。它符合API的数据驱动方法,有助于场景图的简洁性和可插入性,但也有助于提高性能,因为变换矩阵将为每个帧上的所有多维数据集设置一次(这是“状态排序”的一个方面)
你还需要在更高的变换中插入灯光,再加上一个材质节点,这样你就拥有了SceneJS以你能看到的方式渲染立方体所需的所有状态
在您的示例中,可能发生的情况是您确实进行了立方体渲染,但没有照明,也没有转换为视图空间并进行投影。Oops,我错过了。谢谢您的回答。myYawRotate.add(“node”,{…
我想这应该是,myRotate.add(“node”,{…
既然您已经将“myYawRotate”的实例转换为“myRotate”?我按照您的建议使用了light,myYawRotate的类型为“rotate”作为内部节点,在yawroate之后,我提到了material节点。访问了myyawrotate场景外并绑定了我的立方体。但仍然能够看到相同的白色空白屏幕。我甚至无法看到画布。我使用了定向光源。xeolabs的github中是否有帮助部分,以便我可以在那里发布我的示例。
myYawRotate.add("node", { ...