Skip to content

Instantly share code, notes, and snippets.

View xeolabs's full-sized avatar
🏋️‍♂️
Developing http://xeokit.io

xeolabs xeolabs

🏋️‍♂️
Developing http://xeokit.io
View GitHub Profile
// SceneJS viewport node implementation
SceneJs.viewport = function() {
var cfg = SceneJs.private.getNodeConfig(arguments);
var backend = SceneJs.backends.getBackend('viewport');
return function(scope) {
var params = cfg.getParams(scope);
/** The getNodeConfig framework utility function - converts node arguments into what the node needs internally - configs
* and child nodes.
*/
SceneJs.utils.getNodeConfig = getNodeConfig : function(args) {
if (args.length == 0) {
throw 'Invalid node parameters: should be a '
+ 'configuration followed by zero or more child nodes';
}
// Using a SceneJS generator node to create a row of teapots
generator(function() {
var x = 0;
return function() {
x += 10.0;
if (x < 60) {
return {
x: x
};
// Using a selector node to select active child transform nodes
selector({
selection: [0, 2]
},
rotate(..),
translate(..),
scale(..)
)
// Scope node providing angle for rotation node
scope({
x : 45
},
rotate(function(scope) {
return {
x: scope.get('x')
};
},
// Using a generator node to render a scene in two viewports
with (SceneJs) {
var scene = graph({},
generator(function() {
var i = 0;
return function() {
switch (i++) {
case 0: return { x : 1, y : 1, width: 200, height: 200 };
case 1: return { x : 250, y : 1, width: 200, height: 200 };
/** Rotate node from SceneJS as of Jan 7, 2010.
*/
SceneJs.rotate = function() {
var cfg = SceneJs.utils.getNodeConfig(arguments);
var backend = SceneJs.backends.getBackend('model-view-transform');
var mat;
var xform;
asset({
uri:"http://www.scenejs.com/app/data/assets/catalogue/assets/orangeteapot.js",
proxy:"http://scenejs.com/cgi-bin/jsonp_wrapper.pl"
})
SceneJs.material({
ambient: { r:0.4, g:0.2, b:0.2 },
diffuse: { r:0.9, g:0.5, b:0.4 }
},
SceneJs.generator((function() {
var angle = 0;
var height = -10;
return function() {
angle += 15.0;
height += 1.0;
SceneJs.material({
ambient: { r:0.9, g:0.2, b:0.2 },
diffuse: { r:0.9, g:0.6, b:0.2 }
},
SceneJs.objects.teapot()
)