首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SceneJS在场景中分布随机立方体?

如何使用SceneJS在场景中分布随机立方体?
EN

Stack Overflow用户
提问于 2012-11-13 05:54:29
回答 1查看 282关注 0票数 0
代码语言:javascript
复制
<head>
    <title> SceneJS Test</title>
    <script type="text/javascript" src="resources/scenejs.js"></script>
</head>

我想使用SceneJS在画布场景上随机分布立方体。由于这个库有主要的学习曲线,我自己检查了几个例子,并开始编写代码。我做了一些代码,无法说服自己错误在哪里:

代码语言:javascript
复制
<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>

我请求有人帮我找出错误所在,我将非常感谢你。我在浏览器上只能看到空白的白屏:(

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-13 10:23:40

将节点添加到最内侧的旋转节点-这样它们将继承由lookat、camera和rotate节点设置的视图、投影和建模变换。

因此,为旋转节点指定一个ID,如"myYawRotate",然后从场景中获取对该节点引用:

代码语言:javascript
复制
var myRotate = scene.getNode("myYawRotate");

并将多维数据集分支添加到该节点:

代码语言:javascript
复制
myYawRotate.add("node", { ...

这是一个场景图的概念,叫做“状态继承”。它符合API的数据驱动方法,有助于场景图的简洁性和可插入性,但也提高了性能,因为转换矩阵将为每帧上的所有立方体设置一次(“状态排序”的一个方面)。

您还需要在更高的变换中插入灯光,外加材质节点。然后,您就拥有了SceneJS以一种您可以看到的方式呈现立方体所需的所有状态。

在您的示例中,可能发生的情况是,您确实有立方体渲染,但没有照明,并且没有转换到视图空间和投影。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13352213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档