created initial ar components
parent
1147f6d1d5
commit
c7abedc0c7
|
@ -133,6 +133,8 @@ R3.Event.SET_ACTIVE_RENDER_CONFIGURATION = 0x73;
|
||||||
R3.Event.REPLACE_COMPONENT = 0x74;
|
R3.Event.REPLACE_COMPONENT = 0x74;
|
||||||
R3.Event.COMPONENT_REPLACED = 0x75;
|
R3.Event.COMPONENT_REPLACED = 0x75;
|
||||||
R3.Event.ENGINE_FIRED_PARTICLES_ZERO = 0x76;
|
R3.Event.ENGINE_FIRED_PARTICLES_ZERO = 0x76;
|
||||||
|
R3.Event.GET_DEFAULT_SCENE = 0x77;
|
||||||
|
R3.Event.GET_DEFAULT_CAMERA = 0x78;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns string name of event ID
|
* Returns string name of event ID
|
||||||
|
@ -261,6 +263,8 @@ R3.Event.GetEventName = function(number) {
|
||||||
case 0x74 : return 'replace_component';
|
case 0x74 : return 'replace_component';
|
||||||
case 0x75 : return 'component_replaced';
|
case 0x75 : return 'component_replaced';
|
||||||
case 0x76 : return 'engine_fired_particles_zero';
|
case 0x76 : return 'engine_fired_particles_zero';
|
||||||
|
case 0x77 : return 'get_default_scene';
|
||||||
|
case 0x78 : return 'get_default_camera';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -406,8 +406,10 @@ R3.Component.SHADER_FRAGMENT = 0xa0;
|
||||||
R3.Component.GEOMETRY_BUFFER_INSTANCED = 0xa1;
|
R3.Component.GEOMETRY_BUFFER_INSTANCED = 0xa1;
|
||||||
R3.Component.MATERIAL_SHADER_RAW = 0xa2;
|
R3.Component.MATERIAL_SHADER_RAW = 0xa2;
|
||||||
R3.Component.MATERIAL_POINTS = 0xa3;
|
R3.Component.MATERIAL_POINTS = 0xa3;
|
||||||
|
R3.Component.VIDEO = 0xa4;
|
||||||
|
R3.Component.AR = 0xa5;
|
||||||
|
|
||||||
R3.Component.MAX_COMPONENTS = 0xa4;
|
R3.Component.MAX_COMPONENTS = 0xa6;
|
||||||
|
|
||||||
R3.Component.GRAPHICS_RUNTIME = 0x1;
|
R3.Component.GRAPHICS_RUNTIME = 0x1;
|
||||||
R3.Component.PHYSICS_RUNTIME = 0x2;
|
R3.Component.PHYSICS_RUNTIME = 0x2;
|
||||||
|
@ -416,6 +418,7 @@ R3.Component.STATISTICS_RUNTIME = 0x4;
|
||||||
R3.Component.DEFAULT_RUNTIME = 0x5;
|
R3.Component.DEFAULT_RUNTIME = 0x5;
|
||||||
R3.Component.GUI_RUNTIME = 0x6;
|
R3.Component.GUI_RUNTIME = 0x6;
|
||||||
R3.Component.CODER_RUNTIME = 0x7;
|
R3.Component.CODER_RUNTIME = 0x7;
|
||||||
|
R3.Component.AUGMENTED_RUNTIME = 0x8;
|
||||||
|
|
||||||
R3.Component.GetCompentTypes = function(constructor) {
|
R3.Component.GetCompentTypes = function(constructor) {
|
||||||
|
|
||||||
|
@ -1406,6 +1409,18 @@ R3.Component.GetComponentInfo = function(number) {
|
||||||
constructor : R3.D3.Material.Points,
|
constructor : R3.D3.Material.Points,
|
||||||
apiConstructor : R3.D3.API.Material.Points
|
apiConstructor : R3.D3.API.Material.Points
|
||||||
};
|
};
|
||||||
|
case 0xa4 : return {
|
||||||
|
name : 'R3.Video',
|
||||||
|
runtime : R3.Component.GRAPHICS_RUNTIME,
|
||||||
|
constructor : R3.Video,
|
||||||
|
apiConstructor : R3.API.Video
|
||||||
|
};
|
||||||
|
case 0xa5 : return {
|
||||||
|
name : 'R3.AR',
|
||||||
|
runtime : R3.Component.AUGMENTED_RUNTIME,
|
||||||
|
constructor : R3.AR,
|
||||||
|
apiConstructor : R3.API.AR
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1444,6 +1459,10 @@ R3.Component.GetRuntimeName = function(runtime) {
|
||||||
return 'Coder';
|
return 'Coder';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (runtime === R3.Component.AUGMENTED_RUNTIME) {
|
||||||
|
return 'Augmented';
|
||||||
|
}
|
||||||
|
|
||||||
return 'Default';
|
return 'Default';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1953,6 +1972,15 @@ R3.Component.GetRuntimeObject = function(runtimeInfo) {
|
||||||
|
|
||||||
return runtime.statistics;
|
return runtime.statistics;
|
||||||
|
|
||||||
|
} else if (runtimeInfo === R3.Component.AUGMENTED_RUNTIME) {
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(runtime.augmented)) {
|
||||||
|
console.warn('no augmented runtime');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return runtime.augmented;
|
||||||
|
|
||||||
} else if (runtimeInfo === R3.Component.DEFAULT_RUNTIME) {
|
} else if (runtimeInfo === R3.Component.DEFAULT_RUNTIME) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
/**
|
||||||
|
* R3.API.AR
|
||||||
|
* @param id
|
||||||
|
* @param name
|
||||||
|
* @param parentEntity
|
||||||
|
* @param video
|
||||||
|
* @param pathCamera
|
||||||
|
* @param pathMarker
|
||||||
|
* @param scene
|
||||||
|
* @param camera
|
||||||
|
* @param markerRoot
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
R3.API.AR = function(
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
parentEntity,
|
||||||
|
video,
|
||||||
|
pathCamera,
|
||||||
|
pathMarker,
|
||||||
|
scene,
|
||||||
|
camera,
|
||||||
|
markerRoot
|
||||||
|
) {
|
||||||
|
if (R3.Utils.UndefinedOrNull(id)) {
|
||||||
|
id = R3.Utils.RandomId();
|
||||||
|
}
|
||||||
|
this.id = id;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(name)) {
|
||||||
|
name = 'AR (' + id + ')';
|
||||||
|
}
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(video)) {
|
||||||
|
video = new R3.API.Video();
|
||||||
|
}
|
||||||
|
this.video = video;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(pathCamera)) {
|
||||||
|
pathCamera = 'Data/camera_para.dat';
|
||||||
|
}
|
||||||
|
this.pathCamera = pathCamera;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(pathMarker)) {
|
||||||
|
pathMarker = 'Data/patt.hiro';
|
||||||
|
}
|
||||||
|
this.pathMarker = pathMarker;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(scene)) {
|
||||||
|
scene = null;
|
||||||
|
}
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(camera)) {
|
||||||
|
camera = null;
|
||||||
|
}
|
||||||
|
this.camera = camera;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(markerRoot)) {
|
||||||
|
markerRoot = new R3.D3.API.Object();
|
||||||
|
}
|
||||||
|
this.markerRoot = markerRoot;
|
||||||
|
|
||||||
|
R3.API.Component.call(
|
||||||
|
this,
|
||||||
|
R3.Component.AR,
|
||||||
|
parentEntity
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.API.AR.prototype = Object.create(R3.API.Component.prototype);
|
||||||
|
R3.API.AR.prototype.constructor = R3.API.AR;
|
|
@ -0,0 +1,66 @@
|
||||||
|
/**
|
||||||
|
* R3.API.Video
|
||||||
|
* @param id
|
||||||
|
* @param name
|
||||||
|
* @param parentEntity
|
||||||
|
* @param autoUpdateSize
|
||||||
|
* @param width
|
||||||
|
* @param height
|
||||||
|
* @param offset
|
||||||
|
* @param source
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
R3.API.Video = function(
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
parentEntity,
|
||||||
|
autoUpdateSize,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
offset,
|
||||||
|
source
|
||||||
|
) {
|
||||||
|
if (R3.Utils.UndefinedOrNull(id)) {
|
||||||
|
id = R3.Utils.RandomId();
|
||||||
|
}
|
||||||
|
this.id = id;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(name)) {
|
||||||
|
name = 'Video (' + id + ')';
|
||||||
|
}
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(autoUpdateSize)) {
|
||||||
|
autoUpdateSize = true;
|
||||||
|
}
|
||||||
|
this.autoUpdateSize = autoUpdateSize;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(width)) {
|
||||||
|
width = 320;
|
||||||
|
}
|
||||||
|
this.width = width;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(height)) {
|
||||||
|
height = 240;
|
||||||
|
}
|
||||||
|
this.height = height;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(offset)) {
|
||||||
|
offset = new R3.API.Vector2(0,0);
|
||||||
|
}
|
||||||
|
this.offset = offset;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(source)) {
|
||||||
|
source = "Data/output_4.ogg";
|
||||||
|
}
|
||||||
|
this.source = source;
|
||||||
|
|
||||||
|
R3.API.Component.call(
|
||||||
|
this,
|
||||||
|
R3.Component.VIDEO,
|
||||||
|
parentEntity
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.API.Video.prototype = Object.create(R3.API.Component.prototype);
|
||||||
|
R3.API.Video.prototype.constructor = R3.API.Video;
|
|
@ -0,0 +1,229 @@
|
||||||
|
/**
|
||||||
|
* AR object
|
||||||
|
* @param augmented
|
||||||
|
* @param apiAR
|
||||||
|
* @returns {R3.AR}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
R3.AR = function(
|
||||||
|
augmented,
|
||||||
|
apiAR
|
||||||
|
) {
|
||||||
|
this.augmented = augmented;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(apiAR)) {
|
||||||
|
apiAR = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
R3.API.AR.call(
|
||||||
|
this,
|
||||||
|
apiAR.id,
|
||||||
|
apiAR.name,
|
||||||
|
apiAR.parentEntity,
|
||||||
|
apiAR.video,
|
||||||
|
apiAR.pathCamera,
|
||||||
|
apiAR.pathMarker,
|
||||||
|
apiAR.scene,
|
||||||
|
apiAR.camera,
|
||||||
|
apiAR.markerRoot
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
R3.Utils.Defined(this.video) &&
|
||||||
|
R3.Utils.Defined(this.video.componentType) &&
|
||||||
|
!(this.video instanceof R3.Video)
|
||||||
|
) {
|
||||||
|
this.video = R3.Component.ConstructFromObject(this.video);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
R3.Utils.Defined(this.markerRoot) &&
|
||||||
|
R3.Utils.Defined(this.markerRoot.componentType) &&
|
||||||
|
!(this.markerRoot instanceof R3.D3.Object)
|
||||||
|
) {
|
||||||
|
this.markerRoot = R3.Component.ConstructFromObject(this.markerRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
R3.Component.call(
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
'video' : R3.Video,
|
||||||
|
'scene' : R3.D3.Scene,
|
||||||
|
'camera' : R3.D3.Camera,
|
||||||
|
'markerRoot' : R3.D3.Object
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.AR.prototype = Object.create(R3.Component.prototype);
|
||||||
|
R3.AR.prototype.constructor = R3.AR;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a light instance
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
R3.AR.prototype.createInstance = function() {
|
||||||
|
|
||||||
|
if (this.augmented.augmentedType !== R3.AugmentedRuntime.JS_AR_TOOLKIT_5) {
|
||||||
|
console.warn('this augmented runtime is not implemented');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.scene === null) {
|
||||||
|
|
||||||
|
R3.Event.Emit(
|
||||||
|
R3.Event.GET_DEFAULT_SCENE,
|
||||||
|
null,
|
||||||
|
function(scene) {
|
||||||
|
this.scene = scene;
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this.scene === null) {
|
||||||
|
console.warn('there is no default scene to create an AR component with');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.camera === null) {
|
||||||
|
|
||||||
|
R3.Event.Emit(
|
||||||
|
R3.Event.GET_DEFAULT_CAMERA,
|
||||||
|
null,
|
||||||
|
function(camera) {
|
||||||
|
this.camera = camera;
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this.camera === null) {
|
||||||
|
console.warn('there is no default camera to create an AR component with');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ARController.getUserMediaThreeScene(
|
||||||
|
{
|
||||||
|
maxARVideoSize: 320,
|
||||||
|
cameraParam: 'Data/camera_para-iPhone 5 rear 640x480 1.0m.dat',
|
||||||
|
|
||||||
|
onSuccess: function(
|
||||||
|
arScene,
|
||||||
|
arController,
|
||||||
|
arCamera
|
||||||
|
) {
|
||||||
|
|
||||||
|
arScene.scene = this.scene.instance;
|
||||||
|
|
||||||
|
arScene.camera = this.camera.instance;
|
||||||
|
|
||||||
|
arController.loadMarker(
|
||||||
|
this.pathMarker,
|
||||||
|
function(markerId) {
|
||||||
|
|
||||||
|
var markerRoot = arController.createThreeMarker(markerId);
|
||||||
|
|
||||||
|
this.markerRoot.instance = markerRoot;
|
||||||
|
|
||||||
|
this.markerRoot.instance.markerMatrix = new Float64Array(12);
|
||||||
|
|
||||||
|
// var cameraMatrix = arController.getCameraMatrix();
|
||||||
|
// this.camera.instance.projectionMatrix.fromArray(cameraMatrix);
|
||||||
|
|
||||||
|
var child = null;
|
||||||
|
var c = arScene.scene.children.length - 1;
|
||||||
|
|
||||||
|
for (c; c >= 0; c -= 1) {
|
||||||
|
child = arScene.scene.children[c];
|
||||||
|
markerRoot.add(child);
|
||||||
|
arScene.scene.remove(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
arScene.scene.add(markerRoot);
|
||||||
|
|
||||||
|
//arScene.scene.add(this.camera.instance);
|
||||||
|
|
||||||
|
this.instance = {
|
||||||
|
arScene : arScene,
|
||||||
|
arController : arController,
|
||||||
|
arCamera : arCamera
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.Component.prototype.createInstance.call(this);
|
||||||
|
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
|
|
||||||
|
}.bind(this)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the instance with the current state
|
||||||
|
*/
|
||||||
|
R3.AR.prototype.updateInstance = function(property) {
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(property)) {
|
||||||
|
console.warn('unknown property update for AR: ' + property);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'id') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'name') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'video') {
|
||||||
|
console.warn('todo: update video');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'pathCamera') {
|
||||||
|
console.warn('todo: update pathCamera');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'pathMarker') {
|
||||||
|
console.warn('todo: update pathMarker');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'scene') {
|
||||||
|
console.warn('todo: update scene');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'camera') {
|
||||||
|
console.warn('todo: update camera');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'markerRoot') {
|
||||||
|
console.warn('todo: update markerRoot');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
R3.Component.prototype.updateInstance.call(this, property);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a R3.AR to a R3.API.AR
|
||||||
|
* @returns {R3.API.AR}
|
||||||
|
*/
|
||||||
|
R3.AR.prototype.toApiObject = function() {
|
||||||
|
|
||||||
|
return new R3.API.AR(
|
||||||
|
this.id,
|
||||||
|
this.name,
|
||||||
|
R3.Utils.IdOrNull(this.parentEntity),
|
||||||
|
this.video.toApiObject(),
|
||||||
|
this.pathCamera,
|
||||||
|
this.pathMarker,
|
||||||
|
R3.Utils.IdOrNull(this.scene),
|
||||||
|
R3.Utils.IdOrNull(this.camera),
|
||||||
|
R3.Utils.IdOrNull(this.markerRoot)
|
||||||
|
);
|
||||||
|
};
|
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
* Augmented
|
||||||
|
* @param id
|
||||||
|
* @param name
|
||||||
|
* @param augmentedType
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
R3.AugmentedRuntime = function(
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
augmentedType
|
||||||
|
) {
|
||||||
|
if (R3.Utils.UndefinedOrNull(id)) {
|
||||||
|
id = R3.Utils.RandomId();
|
||||||
|
}
|
||||||
|
this.id = id;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(name)) {
|
||||||
|
name = 'Augmented (' + id + ')';
|
||||||
|
}
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(augmentedType)) {
|
||||||
|
augmentedType = R3.AugmentedRuntime.AR_JS;
|
||||||
|
}
|
||||||
|
this.augmentedType = augmentedType;
|
||||||
|
|
||||||
|
this.createInstance();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* R3.AugmentedRuntime Types
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
R3.AugmentedRuntime.JS_AR_TOOLKIT_5 = 0x1;
|
||||||
|
R3.AugmentedRuntime.AR_JS = 0x2;
|
||||||
|
|
||||||
|
R3.AugmentedRuntime.prototype.createInstance = function() {
|
||||||
|
if (this.augmentedType === R3.AugmentedRuntime.JS_AR_TOOLKIT_5) {
|
||||||
|
this.instance = {
|
||||||
|
ARController : ARController,
|
||||||
|
ARCameraParam : ARCameraParam
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
this.instance = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.AugmentedRuntime.prototype.updateInstance = function(property) {
|
||||||
|
if (property === 'augmentedType') {
|
||||||
|
this.createInstance();
|
||||||
|
}
|
||||||
|
};
|
|
@ -65,6 +65,13 @@ R3.D3.API.Object = function(
|
||||||
case R3.D3.API.Object.OBJECT_TYPE_MESH :
|
case R3.D3.API.Object.OBJECT_TYPE_MESH :
|
||||||
name = 'Mesh';
|
name = 'Mesh';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bones
|
||||||
|
*/
|
||||||
|
case R3.D3.API.Object.OBJECT_TYPE_BONE :
|
||||||
|
name = 'Bone';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
name += ' (' + this.id + ')';
|
name += ' (' + this.id + ')';
|
||||||
}
|
}
|
||||||
|
@ -147,6 +154,12 @@ R3.D3.API.Object.GetComponentType = function(objectType) {
|
||||||
case R3.D3.API.Object.OBJECT_TYPE_MESH :
|
case R3.D3.API.Object.OBJECT_TYPE_MESH :
|
||||||
componentType = R3.Component.MESH;
|
componentType = R3.Component.MESH;
|
||||||
break;
|
break;
|
||||||
|
/**
|
||||||
|
* Bones
|
||||||
|
*/
|
||||||
|
case R3.D3.API.Object.OBJECT_TYPE_BONE :
|
||||||
|
componentType = R3.Component.BONE;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Error('unsupported camera type: ' + objectType);
|
throw new Error('unsupported camera type: ' + objectType);
|
||||||
}
|
}
|
||||||
|
@ -171,3 +184,8 @@ R3.D3.API.Object.OBJECT_TYPE_CAMERA_CUBE = 0x15;//0x4;
|
||||||
* @type {number}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
R3.D3.API.Object.OBJECT_TYPE_MESH = 0x21;
|
R3.D3.API.Object.OBJECT_TYPE_MESH = 0x21;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bones
|
||||||
|
*/
|
||||||
|
R3.D3.API.Object.OBJECT_TYPE_BONE = 0x31;
|
|
@ -11,16 +11,3 @@ R3.D3.API.BoneWeight = function (
|
||||||
this.boneIndex = boneIndex;
|
this.boneIndex = boneIndex;
|
||||||
this.weight = weight;
|
this.weight = weight;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Object to R3.D3.API.BoneWeight
|
|
||||||
* @param objectBoneWeight
|
|
||||||
* @returns {R3.D3.API.BoneWeight}
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
R3.D3.API.BoneWeight.FromObject = function(objectBoneWeight) {
|
|
||||||
return new R3.D3.API.BoneWeight(
|
|
||||||
objectBoneWeight.boneIndex,
|
|
||||||
objectBoneWeight.weight
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,37 +1,25 @@
|
||||||
/**
|
/**
|
||||||
* Bone Superset
|
* R3.D3.API.Bone
|
||||||
* @param id
|
* @param apiD3Object
|
||||||
* @param name string
|
|
||||||
* @param childBoneIds
|
* @param childBoneIds
|
||||||
* @param parentBoneIds
|
* @param parentBoneIds
|
||||||
* @param quaternion R3.API.Quaternion
|
|
||||||
* @param position R3.API.Vector3
|
|
||||||
* @param scale R3.API.Vector3
|
|
||||||
* @param up R3.API.Vector3
|
|
||||||
* @param parentEntity
|
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
R3.D3.API.Bone = function (
|
R3.D3.API.Bone = function (
|
||||||
id,
|
apiD3Object,
|
||||||
name,
|
|
||||||
childBoneIds,
|
childBoneIds,
|
||||||
parentBoneIds,
|
parentBoneIds
|
||||||
position,
|
|
||||||
quaternion,
|
|
||||||
scale,
|
|
||||||
up,
|
|
||||||
parentEntity
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(id)) {
|
if (R3.Utils.UndefinedOrNull(apiD3Object)) {
|
||||||
id = R3.Utils.RandomId();
|
apiD3Object = {
|
||||||
|
objectType : R3.D3.API.Object.OBJECT_TYPE_BONE
|
||||||
|
};
|
||||||
}
|
}
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(name)) {
|
if (R3.Utils.UndefinedOrNull(apiD3Object.objectType)) {
|
||||||
name = 'Bone (' + this.id + ')';
|
apiD3Object.objectType = R3.D3.API.Object.OBJECT_TYPE_BONE;
|
||||||
}
|
}
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(childBoneIds)) {
|
if (R3.Utils.UndefinedOrNull(childBoneIds)) {
|
||||||
childBoneIds = [];
|
childBoneIds = [];
|
||||||
|
@ -43,51 +31,21 @@ R3.D3.API.Bone = function (
|
||||||
}
|
}
|
||||||
this.parentBoneIds = parentBoneIds;
|
this.parentBoneIds = parentBoneIds;
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(position)) {
|
R3.D3.API.Object.call(
|
||||||
position = new R3.API.Vector3();
|
|
||||||
}
|
|
||||||
this.position = position;
|
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(quaternion)) {
|
|
||||||
quaternion = new R3.API.Quaternion();
|
|
||||||
}
|
|
||||||
this.quaternion = quaternion;
|
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(scale)) {
|
|
||||||
scale = new R3.API.Vector3(1,1,1);
|
|
||||||
}
|
|
||||||
this.scale = scale;
|
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(up)) {
|
|
||||||
up = new R3.API.Vector3(0,1,0);
|
|
||||||
}
|
|
||||||
this.up = up;
|
|
||||||
|
|
||||||
R3.API.Component.call(
|
|
||||||
this,
|
this,
|
||||||
R3.Component.BONE,
|
apiD3Object.id,
|
||||||
parentEntity
|
apiD3Object.name,
|
||||||
|
apiD3Object.objectType,
|
||||||
|
apiD3Object.parentEntity,
|
||||||
|
apiD3Object.useQuaternion,
|
||||||
|
apiD3Object.position,
|
||||||
|
apiD3Object.quaternion,
|
||||||
|
apiD3Object.rotation,
|
||||||
|
apiD3Object.scale,
|
||||||
|
apiD3Object.up,
|
||||||
|
apiD3Object.lookAt
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
R3.D3.API.Bone.prototype = Object.create(R3.API.Component.prototype);
|
R3.D3.API.Bone.prototype = Object.create(R3.D3.API.Object.prototype);
|
||||||
R3.D3.API.Bone.prototype.constructor = R3.D3.API.Bone;
|
R3.D3.API.Bone.prototype.constructor = R3.D3.API.Bone;
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an API bone from an Object bone
|
|
||||||
* @param objectBone
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
R3.D3.API.Bone.FromObject = function(objectBone) {
|
|
||||||
return new R3.D3.API.Bone(
|
|
||||||
objectBone.id,
|
|
||||||
objectBone.name,
|
|
||||||
objectBone.childBoneIds,
|
|
||||||
objectBone.parentBoneIds,
|
|
||||||
R3.API.Vector3.FromObject(objectBone.position),
|
|
||||||
R3.API.Quaternion.FromObject(objectBone.quaternion),
|
|
||||||
R3.API.Vector3.FromObject(objectBone.scale),
|
|
||||||
R3.API.Vector3.FromObject(objectBone.up),
|
|
||||||
objectBone.parentEntity
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
|
@ -87,35 +87,3 @@ R3.D3.API.Skeleton = function (
|
||||||
|
|
||||||
R3.D3.API.Skeleton.prototype = Object.create(R3.API.Component.prototype);
|
R3.D3.API.Skeleton.prototype = Object.create(R3.API.Component.prototype);
|
||||||
R3.D3.API.Skeleton.prototype.constructor = R3.D3.API.Skeleton;
|
R3.D3.API.Skeleton.prototype.constructor = R3.D3.API.Skeleton;
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an API skeleton from an Object skeleton
|
|
||||||
* @param objectSkeleton
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
R3.D3.API.Skeleton.FromObject = function(objectSkeleton) {
|
|
||||||
return new R3.D3.API.Skeleton(
|
|
||||||
objectSkeleton.id,
|
|
||||||
objectSkeleton.name,
|
|
||||||
objectSkeleton.bones.map(
|
|
||||||
function (objectBone) {
|
|
||||||
return R3.D3.API.Bone.FromObject(objectBone);
|
|
||||||
}
|
|
||||||
),
|
|
||||||
objectSkeleton.boneInverses.map(
|
|
||||||
function (boneInverse) {
|
|
||||||
return R3.D3.API.Matrix4.FromObject(boneInverse);
|
|
||||||
}
|
|
||||||
),
|
|
||||||
objectSkeleton.useVertexTexture,
|
|
||||||
objectSkeleton.boneTextureWidth,
|
|
||||||
objectSkeleton.boneTextureHeight,
|
|
||||||
objectSkeleton.boneMatrices.map(
|
|
||||||
function (boneMatrix) {
|
|
||||||
return R3.D3.API.Matrix4.FromObject(boneMatrix);
|
|
||||||
}
|
|
||||||
),
|
|
||||||
objectSkeleton.boneTexture,
|
|
||||||
objectSkeleton.parentEntity
|
|
||||||
);
|
|
||||||
};
|
|
|
@ -114,8 +114,7 @@ R3.D3.Object.GetLinkedObjects = function(objectType) {
|
||||||
R3.D3.Object.prototype.createInstance = function() {
|
R3.D3.Object.prototype.createInstance = function() {
|
||||||
|
|
||||||
if (!this.instance) {
|
if (!this.instance) {
|
||||||
console.warn('do not call the R3.D3.Object constructor directly');
|
this.instance = new THREE.Object3D();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.updateInstance('position');
|
this.updateInstance('position');
|
||||||
|
@ -214,6 +213,15 @@ R3.D3.Object.prototype.updateInstance = function(property) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (!this.instance.matrixAutoUpdate) {
|
||||||
|
// this.instance.updateMatrixWorld();
|
||||||
|
// this.instance.children.map(
|
||||||
|
// function(child){
|
||||||
|
// child.updateMatrixWorld();
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
// }
|
||||||
|
|
||||||
if (R3.Utils.Defined(this.instance.updateProjectionMatrix)) {
|
if (R3.Utils.Defined(this.instance.updateProjectionMatrix)) {
|
||||||
this.instance.updateProjectionMatrix();
|
this.instance.updateProjectionMatrix();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,64 +1,39 @@
|
||||||
/**
|
/**
|
||||||
* Bone Superset
|
* R3.D3.Bone
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param graphics R3.GraphicsRuntime
|
* @param graphics R3.GraphicsRuntime
|
||||||
* @param apiBone R3.D3.API.Bone
|
* @param apiD3ObjectBone
|
||||||
*/
|
*/
|
||||||
R3.D3.Bone = function (
|
R3.D3.Bone = function (
|
||||||
graphics,
|
graphics,
|
||||||
apiBone
|
apiD3ObjectBone
|
||||||
) {
|
) {
|
||||||
this.graphics = graphics;
|
this.graphics = graphics;
|
||||||
this.graphics.isNotThreeThrow();
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
if (R3.Utils.UndefinedOrNull(apiBone)) {
|
if (R3.Utils.UndefinedOrNull(apiD3ObjectBone)) {
|
||||||
apiBone = {};
|
apiD3ObjectBone = {
|
||||||
|
objectType: R3.D3.API.Object.OBJECT_TYPE_BONE
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
R3.D3.API.Bone.call(
|
R3.D3.API.Bone.call(
|
||||||
this,
|
this,
|
||||||
apiBone.id,
|
apiD3ObjectBone,
|
||||||
apiBone.name,
|
apiD3ObjectBone.childBoneIds,
|
||||||
apiBone.childBoneIds,
|
apiD3ObjectBone.parentBoneIds
|
||||||
apiBone.parentBoneIds,
|
|
||||||
apiBone.position,
|
|
||||||
apiBone.quaternion,
|
|
||||||
apiBone.scale,
|
|
||||||
apiBone.up,
|
|
||||||
apiBone.parentEntity
|
|
||||||
);
|
);
|
||||||
|
|
||||||
this.position = new R3.Vector3(
|
R3.D3.Object.call(
|
||||||
graphics,
|
this,
|
||||||
this.position,
|
this.graphics,
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
this.quaternion = new R3.Quaternion(
|
|
||||||
graphics,
|
|
||||||
this.quaternion,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
|
|
||||||
this.scale = new R3.Vector3(
|
|
||||||
graphics,
|
|
||||||
this.scale,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
|
|
||||||
this.up = new R3.Vector3(
|
|
||||||
graphics,
|
|
||||||
this.up,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
|
|
||||||
R3.Component.call(this);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
R3.D3.Bone.prototype = Object.create(R3.Component.prototype);
|
R3.D3.Bone.prototype = Object.create(R3.D3.Object.prototype);
|
||||||
R3.D3.Bone.prototype.constructor = R3.D3.Bone;
|
R3.D3.Bone.prototype.constructor = R3.D3.Bone;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an instance bone
|
* Creates an instance bone
|
||||||
|
|
||||||
|
@ -67,52 +42,34 @@ R3.D3.Bone.prototype.createInstance = function() {
|
||||||
|
|
||||||
this.instance = new THREE.Bone();
|
this.instance = new THREE.Bone();
|
||||||
|
|
||||||
this.instance.name = this.name;
|
R3.D3.Object.prototype.createInstance.call(this);
|
||||||
|
|
||||||
this.instance.position.x = this.position.x;
|
|
||||||
this.instance.position.y = this.position.y;
|
|
||||||
this.instance.position.z = this.position.z;
|
|
||||||
|
|
||||||
this.instance.quaternion.x = this.quaternion.x;
|
|
||||||
this.instance.quaternion.y = this.quaternion.y;
|
|
||||||
this.instance.quaternion.z = this.quaternion.z;
|
|
||||||
this.instance.quaternion.w = this.quaternion.w;
|
|
||||||
|
|
||||||
this.instance.scale.x = this.scale.x;
|
|
||||||
this.instance.scale.y = this.scale.y;
|
|
||||||
this.instance.scale.z = this.scale.z;
|
|
||||||
|
|
||||||
this.instance.up.x = this.up.x;
|
|
||||||
this.instance.up.y = this.up.y;
|
|
||||||
this.instance.up.z = this.up.z;
|
|
||||||
|
|
||||||
R3.Component.prototype.createInstance.call(this);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the instance
|
* Updates the instance
|
||||||
*/
|
*/
|
||||||
R3.D3.Bone.prototype.updateInstance = function(property) {
|
R3.D3.Bone.prototype.updateInstance = function(property) {
|
||||||
|
|
||||||
|
if (!this.instance) {
|
||||||
|
console.warn('bone instance not ready');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'name') {
|
||||||
this.instance.name = this.name;
|
this.instance.name = this.name;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.instance.position.x = this.position.x;
|
if (property === 'childBoneIds') {
|
||||||
this.instance.position.y = this.position.y;
|
console.warn('todo: child bone ids update');
|
||||||
this.instance.position.z = this.position.z;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.instance.quaternion.x = this.quaternion.x;
|
if (property === 'parentBoneIds') {
|
||||||
this.instance.quaternion.y = this.quaternion.y;
|
console.warn('todo: parent bone ids update');
|
||||||
this.instance.quaternion.z = this.quaternion.z;
|
return;
|
||||||
this.instance.quaternion.w = this.quaternion.w;
|
}
|
||||||
|
|
||||||
this.instance.scale.x = this.scale.x;
|
R3.D3.Object.prototype.updateInstance.call(this, property);
|
||||||
this.instance.scale.y = this.scale.y;
|
|
||||||
this.instance.scale.z = this.scale.z;
|
|
||||||
|
|
||||||
this.instance.up.x = this.up.x;
|
|
||||||
this.instance.up.y = this.up.y;
|
|
||||||
this.instance.up.z = this.up.z;
|
|
||||||
|
|
||||||
R3.Component.prototype.updateInstance.call(this, property);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -121,38 +78,13 @@ R3.D3.Bone.prototype.updateInstance = function(property) {
|
||||||
*/
|
*/
|
||||||
R3.D3.Bone.prototype.toApiObject = function() {
|
R3.D3.Bone.prototype.toApiObject = function() {
|
||||||
|
|
||||||
|
var apiD3Object = R3.D3.Object.prototype.toApiObject.call(this);
|
||||||
|
|
||||||
var apiBone = new R3.D3.API.Bone(
|
var apiBone = new R3.D3.API.Bone(
|
||||||
this.id,
|
apiD3Object,
|
||||||
this.name,
|
|
||||||
this.childBoneIds,
|
this.childBoneIds,
|
||||||
this.parentBoneIds,
|
this.parentBoneIds
|
||||||
this.position.toApiObject(),
|
|
||||||
this.quaternion.toApiObject(),
|
|
||||||
this.scale.toApiObject(),
|
|
||||||
this.up.toApiObject(),
|
|
||||||
R3.Utils.IdOrNull(this.parentEntity)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return apiBone;
|
return apiBone;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a R3.D3.Bone from a bone Object
|
|
||||||
* @param graphics R3.GraphicsRuntime
|
|
||||||
* @param objectBone Object
|
|
||||||
* @returns {R3.D3.Bone}
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
R3.D3.Bone.FromObject = function(
|
|
||||||
graphics,
|
|
||||||
objectBone
|
|
||||||
) {
|
|
||||||
var apiBone = R3.D3.API.Bone.FromObject(objectBone);
|
|
||||||
|
|
||||||
var bone = R3.D3.Bone(
|
|
||||||
graphics,
|
|
||||||
apiBone
|
|
||||||
);
|
|
||||||
|
|
||||||
return bone;
|
|
||||||
};
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
/**
|
||||||
|
* R3.System.AR
|
||||||
|
* @param apiSystem R3.API.System
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
R3.System.AR = function(
|
||||||
|
apiSystem
|
||||||
|
) {
|
||||||
|
R3.System.call(
|
||||||
|
this,
|
||||||
|
apiSystem
|
||||||
|
);
|
||||||
|
|
||||||
|
this.instanceCreatedSubscription = null;
|
||||||
|
|
||||||
|
this.removeComponentSubscription = null;
|
||||||
|
|
||||||
|
this.beforeRenderSubscription = null;
|
||||||
|
|
||||||
|
this.arComponents = [];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.System.AR.prototype = Object.create(R3.System.prototype);
|
||||||
|
R3.System.AR.prototype.constructor = R3.System.AR;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start this system (add all event listeners)
|
||||||
|
*/
|
||||||
|
R3.System.AR.prototype.start = function() {
|
||||||
|
|
||||||
|
R3.System.prototype.start.call(this);
|
||||||
|
|
||||||
|
this.instanceCreatedSubscription = this.subscribe(
|
||||||
|
R3.Event.INSTANCE_CREATED,
|
||||||
|
this.instanceCreated
|
||||||
|
);
|
||||||
|
|
||||||
|
this.removeComponentSubscription = this.subscribe(
|
||||||
|
R3.Event.REMOVE_COMPONENT,
|
||||||
|
this.removeComponent
|
||||||
|
);
|
||||||
|
|
||||||
|
this.beforeRenderSubscription = this.subscribe(
|
||||||
|
R3.Event.BEFORE_RENDER,
|
||||||
|
this.beforeRender
|
||||||
|
);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* From now on we want to track everything about a component, only from the systems that are active
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
R3.System.AR.prototype.instanceCreated = function(data) {
|
||||||
|
if (data.component instanceof R3.D3.AR) {
|
||||||
|
R3.Utils.PushUnique(this.arComponents, data.component);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes an AR component from the System
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
R3.System.AR.prototype.removeComponent = function(data) {
|
||||||
|
|
||||||
|
if (data.component instanceof R3.D3.AR) {
|
||||||
|
|
||||||
|
var index = this.arComponents.indexOf(data.component);
|
||||||
|
|
||||||
|
if (index === -1) {
|
||||||
|
console.warn('AR system out of sync');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.arComponents.splice(index, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.System.AR.prototype.beforeRender = function(data) {
|
||||||
|
console.log('AR Render');
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop this system (remove all event listeners)
|
||||||
|
*/
|
||||||
|
R3.System.AR.prototype.stop = function() {
|
||||||
|
|
||||||
|
R3.System.prototype.stop.call(this);
|
||||||
|
|
||||||
|
this.instanceCreatedSubscription.remove();
|
||||||
|
this.removeComponentSubscription.remove();
|
||||||
|
this.beforeRenderSubscription.remove();
|
||||||
|
|
||||||
|
};
|
|
@ -66,6 +66,8 @@ R3.System.Render.prototype.start = function() {
|
||||||
|
|
||||||
this.cubeCameras = R3.EntityManager.Instance.queryComponents(R3.Component.CAMERA_CUBE);
|
this.cubeCameras = R3.EntityManager.Instance.queryComponents(R3.Component.CAMERA_CUBE);
|
||||||
|
|
||||||
|
this.arComponents = R3.EntityManager.Instance.queryComponents(R3.Component.AR);
|
||||||
|
|
||||||
this.excludedFromEnvironment = [];
|
this.excludedFromEnvironment = [];
|
||||||
|
|
||||||
R3.EntityManager.Instance.queryComponentsByConstructor(R3.D3.Mesh).map(
|
R3.EntityManager.Instance.queryComponentsByConstructor(R3.D3.Mesh).map(
|
||||||
|
@ -368,6 +370,10 @@ R3.System.Render.prototype.instanceCreated = function(data) {
|
||||||
this.cubeCameras.push(data.component);
|
this.cubeCameras.push(data.component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.component instanceof R3.AR) {
|
||||||
|
this.arComponents.push(data.component);
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
data.component instanceof R3.D3.Mesh &&
|
data.component instanceof R3.D3.Mesh &&
|
||||||
data.component.excludeFromEnvironment
|
data.component.excludeFromEnvironment
|
||||||
|
@ -595,6 +601,20 @@ R3.System.Render.prototype.removeComponent = function(data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.component instanceof R3.AR) {
|
||||||
|
|
||||||
|
index = this.arComponents.indexOf(data.component);
|
||||||
|
|
||||||
|
if (index !== -1) {
|
||||||
|
console.log('removing ar component from render system');
|
||||||
|
|
||||||
|
this.arComponents.splice(index, 1);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log('failed to find the ar component in the render system : ' + data.component.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (data.component instanceof R3.D3.Mesh) {
|
if (data.component instanceof R3.D3.Mesh) {
|
||||||
index = this.excludedFromEnvironment.indexOf(data.component);
|
index = this.excludedFromEnvironment.indexOf(data.component);
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
|
@ -668,6 +688,17 @@ R3.System.Render.prototype.render = function(data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var arComponent = null;
|
||||||
|
|
||||||
|
if (this.arComponents.length > 1) {
|
||||||
|
console.warn('only one AR component supported at this time');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.arComponents.length === 1) {
|
||||||
|
arComponent = this.arComponents[0];
|
||||||
|
}
|
||||||
|
|
||||||
var size = renderer.getSize();
|
var size = renderer.getSize();
|
||||||
|
|
||||||
renderer.viewports.map(
|
renderer.viewports.map(
|
||||||
|
@ -737,8 +768,29 @@ R3.System.Render.prototype.render = function(data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (arComponent) {
|
||||||
|
|
||||||
|
arComponent.instance.arScene.process();
|
||||||
|
|
||||||
|
// if (arComponent.markerRoot.instance.visible) {
|
||||||
|
// arComponent.instance.arController.getTransMatSquareCont(
|
||||||
|
// 0,
|
||||||
|
// 1,
|
||||||
|
// arComponent.markerRoot.instance.markerMatrix,
|
||||||
|
// arComponent.markerRoot.instance.markerMatrix
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// arComponent.instance.arController.transMatToGLMat(
|
||||||
|
// arComponent.markerRoot.instance.markerMatrix,
|
||||||
|
// arComponent.markerRoot.instance.matrix.elements
|
||||||
|
// );
|
||||||
|
|
||||||
|
arComponent.instance.arScene.renderOn(renderer.instance);
|
||||||
|
} else {
|
||||||
renderer.render(scene, camera);
|
renderer.render(scene, camera);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}.bind(this)
|
}.bind(this)
|
||||||
);
|
);
|
||||||
|
@ -823,5 +875,7 @@ R3.System.Render.prototype.stop = function() {
|
||||||
this.statistics = [];
|
this.statistics = [];
|
||||||
|
|
||||||
this.cubeCameras = [];
|
this.cubeCameras = [];
|
||||||
|
|
||||||
|
this.arComponents = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,160 @@
|
||||||
|
/**
|
||||||
|
* Video object
|
||||||
|
* @param graphics
|
||||||
|
* @param apiVideo
|
||||||
|
* @returns {R3.Video}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
R3.Video = function(
|
||||||
|
graphics,
|
||||||
|
apiVideo
|
||||||
|
) {
|
||||||
|
this.graphics = graphics;
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(apiVideo)) {
|
||||||
|
apiVideo = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
R3.API.Video.call(
|
||||||
|
this,
|
||||||
|
apiVideo.id,
|
||||||
|
apiVideo.name,
|
||||||
|
apiVideo.parentEntity,
|
||||||
|
apiVideo.autoUpdateSize,
|
||||||
|
apiVideo.width,
|
||||||
|
apiVideo.height,
|
||||||
|
apiVideo.offset,
|
||||||
|
apiVideo.source
|
||||||
|
);
|
||||||
|
|
||||||
|
this.offset = new R3.Vector2(
|
||||||
|
this.graphics,
|
||||||
|
this.offset,
|
||||||
|
this
|
||||||
|
);
|
||||||
|
|
||||||
|
R3.Component.call(this);
|
||||||
|
};
|
||||||
|
|
||||||
|
R3.Video.prototype = Object.create(R3.Component.prototype);
|
||||||
|
R3.Video.prototype.constructor = R3.Video;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a light instance
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
R3.Video.prototype.createInstance = function() {
|
||||||
|
|
||||||
|
this.instance = document.createElement('video');
|
||||||
|
|
||||||
|
this.instance.setAttribute('id', this.id);
|
||||||
|
|
||||||
|
this.instance.setAttribute('width', this.width);
|
||||||
|
|
||||||
|
this.instance.setAttribute('height', this.height);
|
||||||
|
|
||||||
|
this.instance.setAttribute('style', 'left: ' + this.offset.x + 'px;top: ' + this.offset.y + 'px');
|
||||||
|
|
||||||
|
this.instance.setAttribute('loop', '');
|
||||||
|
|
||||||
|
this.instance.setAttribute('controls', '');
|
||||||
|
|
||||||
|
this.instance.setAttribute('autoplay', '');
|
||||||
|
|
||||||
|
this.instance.setAttribute('webkit-playsinline', '');
|
||||||
|
|
||||||
|
if (this.autoUpdateSize) {
|
||||||
|
/**
|
||||||
|
* Update our size from the instance size
|
||||||
|
*/
|
||||||
|
this.width = this.instance.width;
|
||||||
|
this.height = this.instance.height;
|
||||||
|
} else {
|
||||||
|
/**
|
||||||
|
* Update our instance with our size
|
||||||
|
*/
|
||||||
|
this.instance.width = this.width;
|
||||||
|
this.instance.height = this.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.instance.setAttribute('src', this.source);
|
||||||
|
|
||||||
|
R3.Component.prototype.createInstance.call(this);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the instance with the current state
|
||||||
|
*/
|
||||||
|
R3.Video.prototype.updateInstance = function(property) {
|
||||||
|
|
||||||
|
if (R3.Utils.UndefinedOrNull(property)) {
|
||||||
|
console.warn('unknown property update for Video: ' + property);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'id') {
|
||||||
|
this.instance.setAttribute('id', this.id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'offset') {
|
||||||
|
this.instance.style.left = this.offset.x + 'px';
|
||||||
|
this.instance.style.top = this.offset.y + 'px';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
property === 'autoUpdateSize' ||
|
||||||
|
property === 'width' ||
|
||||||
|
property === 'height'
|
||||||
|
) {
|
||||||
|
/**
|
||||||
|
* We cannot control everything about the canvas - this is dependent on where the canvas lives and its
|
||||||
|
* dimensions can also be controlled via CSS -
|
||||||
|
*
|
||||||
|
* This means - autoUpdateSize works a little different for this component - instead of getting our size and
|
||||||
|
* applying it, it gets our canvas size and applies it, or applies our size to the canvas - of course
|
||||||
|
* the user settings override this.
|
||||||
|
*/
|
||||||
|
if (this.autoUpdateSize) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update from our canvas size
|
||||||
|
*/
|
||||||
|
this.width = this.instance.width;
|
||||||
|
this.height = this.instance.height;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command our canvas to take a size - this is not guaranteed however - CSS wins
|
||||||
|
*/
|
||||||
|
this.instance.width = this.width;
|
||||||
|
this.instance.height = this.height;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property === 'source') {
|
||||||
|
this.instance.src = this.source;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
R3.Component.prototype.updateInstance.call(this, property);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a R3.Video to a R3.API.Video
|
||||||
|
* @returns {R3.API.Video}
|
||||||
|
*/
|
||||||
|
R3.Video.prototype.toApiObject = function() {
|
||||||
|
return new R3.API.Video(
|
||||||
|
this.id,
|
||||||
|
this.name,
|
||||||
|
R3.Utils.IdOrNull(this.parentEntity),
|
||||||
|
this.autoUpdateSize,
|
||||||
|
this.width,
|
||||||
|
this.height,
|
||||||
|
this.offset.toApiObject(),
|
||||||
|
this.source
|
||||||
|
);
|
||||||
|
};
|
Loading…
Reference in New Issue