Victor Giers il y a 5 ans
Parent
révision
5c913ebcaf
9 fichiers modifiés avec 1256 ajouts et 942 suppressions
  1. BIN
      qubeenee.bin
  2. BIN
      qubeenee.bin.xz
  3. 0
    4
      qubeenee.css
  4. 145
    112
      qubeenee.gltf
  5. BIN
      qubeenee.gltf.xz
  6. 6
    9
      qubeenee.html
  7. 3
    13
      qubeenee.js
  8. 214
    235
      visual_logic.js
  9. 888
    569
      visual_logic.xml

BIN
qubeenee.bin Voir le fichier


BIN
qubeenee.bin.xz Voir le fichier


+ 0
- 4
qubeenee.css Voir le fichier

@@ -1,5 +1,3 @@
/* __V3D_TEMPLATE__ - template-based file; delete this line to prevent this file from being updated */

body {
margin: 0px;
overflow: hidden;
@@ -34,5 +32,3 @@ div#fullscreen_button {

/* removes tap blinking on ios devices */
* { -webkit-tap-highlight-color:rgba(0,0,0,0); }



+ 145
- 112
qubeenee.gltf Voir le fichier

@@ -155,9 +155,9 @@
{
"bufferView" : 10,
"componentType" : 5123,
"count" : 2880,
"count" : 11904,
"max" : [
558
2784
],
"min" : [
0
@@ -167,27 +167,27 @@
{
"bufferView" : 11,
"componentType" : 5126,
"count" : 559,
"count" : 2785,
"max" : [
2.000000476837158,
2.0,
2.0000007152557373
1.9744627475738525,
1.9951533079147339,
1.9744629859924316
],
"min" : [
-1.9999996423721313,
-2.0,
-2.0
-1.9744620323181152,
-1.9951533079147339,
-1.9744620323181152
],
"type" : "VEC3"
},
{
"bufferView" : 12,
"componentType" : 5126,
"count" : 559,
"count" : 2785,
"max" : [
0.999969482421875,
1.0,
1.0,
1.0
0.999969482421875
],
"min" : [
-1.0,
@@ -199,16 +199,16 @@
{
"bufferView" : 13,
"componentType" : 5126,
"count" : 559,
"count" : 2785,
"max" : [
1.0,
0.04912349209189415,
0.2077999711036682,
1.0,
1.0
],
"min" : [
-1.0,
-0.0491236187517643,
-0.2078000009059906,
-1.0,
1.0
],
@@ -217,7 +217,7 @@
{
"bufferView" : 14,
"componentType" : 5126,
"count" : 559,
"count" : 2785,
"max" : [
1.000000238418579,
1.0
@@ -231,9 +231,9 @@
{
"bufferView" : 15,
"componentType" : 5123,
"count" : 2880,
"count" : 23808,
"max" : [
558
5577
],
"min" : [
0
@@ -243,25 +243,25 @@
{
"bufferView" : 16,
"componentType" : 5126,
"count" : 559,
"count" : 5578,
"max" : [
2.000000476837158,
2.0,
2.0000007152557373
1.9744627475738525,
1.9951533079147339,
1.9744629859924316
],
"min" : [
-1.9999996423721313,
-2.0,
-2.0
-1.9744620323181152,
-1.9951533079147339,
-1.9744620323181152
],
"type" : "VEC3"
},
{
"bufferView" : 17,
"componentType" : 5126,
"count" : 559,
"count" : 5578,
"max" : [
1.0,
0.999969482421875,
1.0,
1.0
],
@@ -275,25 +275,25 @@
{
"bufferView" : 18,
"componentType" : 5126,
"count" : 559,
"count" : 5578,
"max" : [
1.0,
0.04912349209189415,
0.207809716463089,
1.0,
1.0
],
"min" : [
-1.0,
-0.0491236187517643,
-0.20780974626541138,
-1.0,
1.0
-1.0
],
"type" : "VEC4"
},
{
"bufferView" : 19,
"componentType" : 5126,
"count" : 559,
"count" : 5578,
"max" : [
1.000000238418579,
1.0
@@ -448,98 +448,98 @@
},
{
"buffer" : 0,
"byteLength" : 5760,
"byteLength" : 23808,
"byteOffset" : 400,
"target" : 34963
},
{
"buffer" : 0,
"byteLength" : 6708,
"byteOffset" : 6160,
"byteLength" : 33420,
"byteOffset" : 24208,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 6708,
"byteOffset" : 12868,
"byteLength" : 33420,
"byteOffset" : 57628,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 8944,
"byteOffset" : 19576,
"byteLength" : 44560,
"byteOffset" : 91048,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 4472,
"byteOffset" : 28520,
"byteLength" : 22280,
"byteOffset" : 135608,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 5760,
"byteOffset" : 32992,
"byteLength" : 47616,
"byteOffset" : 157888,
"target" : 34963
},
{
"buffer" : 0,
"byteLength" : 6708,
"byteOffset" : 38752,
"byteLength" : 66936,
"byteOffset" : 205504,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 6708,
"byteOffset" : 45460,
"byteLength" : 66936,
"byteOffset" : 272440,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 8944,
"byteOffset" : 52168,
"byteLength" : 89248,
"byteOffset" : 339376,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 4472,
"byteOffset" : 61112,
"byteLength" : 44624,
"byteOffset" : 428624,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 5760,
"byteOffset" : 65584,
"byteOffset" : 473248,
"target" : 34963
},
{
"buffer" : 0,
"byteLength" : 6708,
"byteOffset" : 71344,
"byteOffset" : 479008,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 6708,
"byteOffset" : 78052,
"byteOffset" : 485716,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 8944,
"byteOffset" : 84760,
"byteOffset" : 492424,
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 4472,
"byteOffset" : 93704,
"byteOffset" : 501368,
"target" : 34962
}
],
"buffers" : [
{
"byteLength" : 98176,
"byteLength" : 505840,
"uri" : "qubeenee.bin"
}
],
@@ -636,10 +636,49 @@
0.0,
1.0
],
1.0
0.0,
[
1.0,
0.20000000298023224,
0.10000000149011612
],
[
0.0,
0.0,
0.0,
1.0
],
0.13636361062526703,
0.24545453488826752,
0.0,
0.907737672328949,
0.0,
0.0,
0.0,
0.6590908765792847,
0.0,
0.3163636326789856,
1.350000023841858,
0.19080498814582825,
0.2181818187236786,
[
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0
]
],
"is_active_output" : false,
"name" : "Emission",
"name" : "Principled BSDF",
"outputs" : [
[
0,
@@ -648,7 +687,7 @@
0
]
],
"type" : "EMISSION"
"type" : "BSDF_PRINCIPLED"
}
]
}
@@ -739,7 +778,7 @@
0.44545453786849976,
0.26363635063171387,
0.0,
0.09545457363128662,
0.5992714166641235,
0.0,
0.0,
0.0,
@@ -785,6 +824,7 @@
},
{
"alphaMode" : "BLEND",
"doubleSided" : true,
"extensions" : {
"S8S_v3d_material_data" : {
"blendMode" : {
@@ -792,6 +832,8 @@
"dstRGB" : 1,
"srcRGB" : 1
},
"depthWrite" : false,
"dithering" : true,
"nodeGraph" : {
"edges" : [
{
@@ -920,9 +962,9 @@
{
"inputs" : [
[
0.800000011920929,
0.800000011920929,
0.800000011920929,
0.4479883313179016,
0.4479883313179016,
0.4479883313179016,
1.0
],
0.0,
@@ -937,19 +979,19 @@
0.800000011920929,
1.0
],
0.9348716139793396,
0.5620748996734619,
0.0,
0.5,
0.0,
0.5,
0.0,
0.7985775470733643,
0.0,
0.0,
0.5,
0.0,
0.029999999329447746,
1.4500000476837158,
0.7862595319747925,
0.6590908765792847,
0.0,
0.3163636326789856,
1.350000023841858,
0.7915336489677429,
0.1418459415435791,
[
0.0,
0.0,
@@ -979,7 +1021,8 @@
"type" : "BSDF_PRINCIPLED"
}
]
}
},
"renderSide" : "DOUBLE"
}
},
"name" : "transparent"
@@ -1066,12 +1109,12 @@
{
"inputs" : [
[
0.21404114365577698,
0.21404114365577698,
0.21404114365577698,
0.800000011920929,
0.800000011920929,
0.800000011920929,
1.0
],
1.0
0.40000003576278687
],
"is_active_output" : false,
"name" : "Background",
@@ -1247,28 +1290,11 @@
"mesh" : 2,
"name" : "bit",
"translation" : [
-3.0,
-6.0,
0.0,
-0.0
]
},
{
"extensions" : {
"S8S_v3d_node_data" : {
"frustumCulling" : true,
"groupNames" : [],
"hidden" : false,
"renderOrder" : 0
}
},
"mesh" : 0,
"name" : "matholderwhite",
"translation" : [
0.06355203688144684,
-0.02485582046210766,
24.218271255493164
]
},
{
"camera" : 0,
"extensions" : {
@@ -1294,7 +1320,7 @@
1.0000001192092896
],
"translation" : [
0.0,
-3.0,
0.0,
17.0
]
@@ -1312,12 +1338,7 @@
}
},
"mesh" : 3,
"name" : "qubit",
"translation" : [
3.0,
0.0,
-0.0
]
"name" : "qubit"
},
{
"extensions" : {
@@ -1331,11 +1352,28 @@
"mesh" : 1,
"name" : "matholderblack",
"translation" : [
0.06355203688144684,
-2.936447858810425,
-0.02485582046210766,
28.280128479003906
]
},
{
"extensions" : {
"S8S_v3d_node_data" : {
"frustumCulling" : true,
"groupNames" : [],
"hidden" : false,
"renderOrder" : 0
}
},
"mesh" : 0,
"name" : "matholderwhite",
"translation" : [
-2.936447858810425,
-0.02485582046210766,
24.218271255493164
]
},
{
"extensions" : {
"S8S_v3d_node_data" : {
@@ -1349,12 +1387,7 @@
}
},
"mesh" : 4,
"name" : "qubit_controller",
"translation" : [
3.0,
0.0,
-0.0
]
"name" : "qubit_controller"
}
],
"scene" : 0,
@@ -1362,7 +1395,7 @@
{
"extensions" : {
"S8S_v3d_scene_data" : {
"aaMethod" : "MSAA8",
"aaMethod" : "AUTO",
"light" : 0,
"physicallyCorrectLights" : true,
"useHDR" : true,
@@ -1375,10 +1408,10 @@
"name" : "Scene",
"nodes" : [
0,
1,
4,
2,
3,
1,
2,
5
]
}

BIN
qubeenee.gltf.xz Voir le fichier


+ 6
- 9
qubeenee.html Voir le fichier

@@ -3,18 +3,17 @@
<!-- __V3D_TEMPLATE__ - template-based file; delete this line to prevent this file from being updated -->
<html lang="en">
<head>
<title>Verge3D Web Interactive</title>
<title>Qubeenee</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">

<!-- Search Engines -->
<!--
<meta name="description" content="Interactive 3D Web application made with Verge3D. Immerse yourself in amazing graphics experience offered by state-of-the WebGL and HTML5 technologies.">
<!-- Twitter -->
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Verge3D Web Interactive">
<meta name="twitter:description" content="Interactive 3D Web application made with Verge3D. Immerse yourself in amazing graphics experience offered by state-of-the WebGL and HTML5 technologies.">
<meta name="twitter:image:src" content="https://cdn.soft8soft.com/images/player_socials.jpg">
<!-- Open Graph -->
<meta property="og:title" content="Verge3D Web Interactive">
<meta property="og:description" content="Interactive 3D Web application made with Verge3D. Immerse yourself in amazing graphics experience offered by state-of-the WebGL and HTML5 technologies.">
<meta property="og:image" content="https://cdn.soft8soft.com/images/player_socials.jpg">
@@ -22,7 +21,7 @@

<meta name="generator" content="Verge3D 2.12.5">

<!-- favicons -->
<link rel="apple-touch-icon" sizes="180x180" href="media/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="media/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="media/favicon-16x16.png">
@@ -30,10 +29,8 @@
<link rel="mask-icon" href="media/safari-pinned-tab.svg" color="#5bbad5">
<meta name="theme-color" content="#ffffff">

<!-- WebXR origin trial -->
<meta http-equiv="origin-trial" content="Aop1aS3O0LG/MKmDbfhMRdlXGxB1ETrJJScdLSaYLDCMJI5iOLQ0uwhBObewdZKbpu00Y+9f7YC5tALasZ7BOg0AAABoeyJvcmlnaW4iOiJodHRwczovL3NvZnQ4c29mdC5jb206NDQzIiwiZmVhdHVyZSI6IldlYlhSRGV2aWNlTTY5IiwiZXhwaXJ5IjoxNTUxODMwMzk5LCJpc1N1YmRvbWFpbiI6dHJ1ZX0=">


-->
<script src="v3d.js"></script>
<script src="qubeenee.js"></script>


+ 3
- 13
qubeenee.js Voir le fichier

@@ -166,15 +166,8 @@ function initFullScreen() {
}

function prepareExternalInterface(app) {
// register functions in the app.ExternalInterface to call them from Puzzles, e.g:
// app.ExternalInterface.myJSFunction = function() {
// console.log('Hello, World!');
// }
app.ExternalInterface.HSVtoRGB = function(h, s, v) {
var r, g, b, i, f, p, q, t;
if (arguments.length === 1) {
s = h.s, v = h.v, h = h.h;
}
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
@@ -188,14 +181,11 @@ function prepareExternalInterface(app) {
case 4: r = t, g = p, b = v; break;
case 5: r = v, g = p, b = q; break;
}
console.log(r,g,b);
app.ExternalInterface.setRGB(r, g, b);
return {
r: Math.round(r * 255),
g: Math.round(g * 255),
b: Math.round(b * 255)
};
}



}

function runCode(app) {

+ 214
- 235
visual_logic.js Voir le fichier

@@ -1,6 +1,6 @@
/**
* Generated by Verge3D Puzzles v.2.12.5
* Sat Jun 08 2019 00:30:36 GMT+0200 (Mitteleuropäische Sommerzeit)
* Sat Jun 08 2019 04:01:26 GMT+0200 (Mitteleuropäische Sommerzeit)
* Do not edit this file - your changes may get overridden when Puzzles are saved.
* Refer to https://www.soft8soft.com/docs/manual/en/introduction/Using-JavaScript.html
* for information on how to add your own JavaScript to Verge3D apps.
@@ -91,17 +91,7 @@ PL.execInitPuzzles = function() {
preloaderEndCb: function() {},
}
}
var ctrlInit, cinitx, cinity, cinitz;


// addHTMLElement puzzle
function addHTMLElement(elemType, id) {
var elem = document.createElement(elemType);
document.body.appendChild(elem);
elem.id = id;
elem.style.position = "absolute";
}

var cinitx, cinity, cinitz;


// utility functions envoked by the HTML puzzles
@@ -144,19 +134,6 @@ function getElement(id, isParent) {



// setHTMLElemAttribute puzzle
function setHTMLElemAttribute(attr, value, ids, isParent) {
var elems = getElements(ids, isParent);
for (var i = 0; i < elems.length; i++) {
var elem = elems[i];
if (!elem)
continue;
elem[attr] = value;
}
}



// setHTMLElemStyle puzzle
function setHTMLElemStyle(prop, value, ids, isParent) {
var elems = getElements(ids, isParent);
@@ -170,9 +147,6 @@ function setHTMLElemStyle(prop, value, ids, isParent) {



addHTMLElement('input', 'lightness');
setHTMLElemAttribute('type', 'range', 'lightness', false);


// initSettings puzzle
_initGlob.output.initOptions.fadeAnnotations = true;
@@ -181,14 +155,6 @@ _initGlob.output.initOptions.preserveDrawBuf = false;
_initGlob.output.initOptions.useCompAssets = false;
_initGlob.output.initOptions.useFullscreen = false;

ctrlInit;

addHTMLElement('input', 'hue');
setHTMLElemAttribute('type', 'range', 'hue', false);

addHTMLElement('input', 'saturation');
setHTMLElemAttribute('type', 'range', 'saturation', false);

setHTMLElemStyle('backgroundColor', 'rgb(127,127,127)', ["BODY"], false);
cinitx = 0;
cinity = 0;
@@ -204,7 +170,7 @@ initOptions = initOptions || {};
if ('fadeAnnotations' in initOptions) {
_pGlob.fadeAnnotations = initOptions.fadeAnnotations;
}
var distZ, r, g, b, stepY, distY, dragging, distX, inboundStepper, maxDist, sat, hue, value;
var distZ, r, g, b, distY, dragging, distX, inboundStepper, r_, maxDist, bitState, stepY, hue, g_, sat, b_, value;


// utility function envoked by almost all V3D-specific puzzles
@@ -332,152 +298,14 @@ function getObjTransform(objName, mode, coord) {



// getObjectMaterial puzzle
function getObjectMaterial(objNames) {
objNames = retrieveObjectNames(objNames);
if (!objNames)
return '';
for (var i = 0; i < objNames.length; i++) {
var objName = objNames[i]
if (!objName)
continue;
var obj = getObjectByName(objName);
if (!obj)
continue;
if (obj.material && typeof obj.material.name == "string")
return obj.material.name;
}
return '';
}



// assignMaterial puzzle
function assignMat(objNames, matName) {
objNames = retrieveObjectNames(objNames);
if (!objNames || !matName)
return;
var mat = v3d.SceneUtils.getMaterialByName(appInstance, matName);
if (!mat)
return;
for (var i = 0; i < objNames.length; i++) {
var objName = objNames[i];
if (!objName)
continue;
var obj = getObjectByName(objName);
if (obj)
obj.material = mat;
}
}



// utility function used by the whenClicked, whenHovered and whenDraggedOver puzzles
function initObjectPicking(callback, eventType, mouseDownUseTouchStart) {

var elem = appInstance.container;
elem.addEventListener(eventType, pickListener);
if (eventType == "mousedown") {
var touchEventName = mouseDownUseTouchStart ? "touchstart" : "touchend";
elem.addEventListener(touchEventName, pickListener);
}

var raycaster = new v3d.Raycaster();
function pickListener(event) {
event.preventDefault();

var xNorm = 0, yNorm = 0;
if (event instanceof MouseEvent) {
xNorm = event.offsetX / elem.clientWidth;
yNorm = event.offsetY / elem.clientHeight;
} else if (event instanceof TouchEvent) {
var rect = elem.getBoundingClientRect();
xNorm = (event.changedTouches[0].clientX - rect.left) / rect.width;
yNorm = (event.changedTouches[0].clientY - rect.top) / rect.height;
}

_pGlob.screenCoords.x = xNorm * 2 - 1;
_pGlob.screenCoords.y = -yNorm * 2 + 1;
raycaster.setFromCamera(_pGlob.screenCoords, appInstance.camera);
var objList = [];
appInstance.scene.traverse(function(obj){objList.push(obj);});
var intersects = raycaster.intersectObjects(objList);
if (intersects.length > 0) {
var obj = intersects[0].object;
callback(obj, event);
} else {
callback(null, event);
}
}
}

// utility function used by the whenDraggedOver puzzles
function fireObjectPickingCallbacks(objName, source, index, cbParam) {
for (var i = 0; i < source.length; i++) {
var cb = source[i];
if (objectsIncludeObj([cb[0]], objName)) {
cb[index](cbParam);
}
}
}

function objectsIncludeObj(objNames, testedObjName) {
if (!testedObjName) return false;

for (var i = 0; i < objNames.length; i++) {
if (testedObjName == objNames[i]) {
return true;
} else {
// also check children which are auto-generated for multi-material objects
var obj = getObjectByName(objNames[i]);
if (obj && obj.type == "Group") {
for (var j = 0; j < obj.children.length; j++) {
if (testedObjName == obj.children[j].name) {
return true;
}
}
}
}
}
return false;
}

// utility function used by the whenClicked, whenHovered and whenDraggedOver puzzles
function getPickedObjectName(obj) {
// auto-generated from a multi-material object, use parent name instead
if (obj.isMesh && obj.isMaterialGeneratedMesh && obj.parent) {
return obj.parent.name;
} else {
return obj.name;
}
}



// whenClicked puzzle
initObjectPicking(function(obj) {

// save the object for the pickedObject block
_pGlob.pickedObject = obj ? getPickedObjectName(obj) : '';

_pGlob.objClickCallbacks.forEach(function(el) {
var isPicked = obj && objectsIncludeObj(el.objNames, getPickedObjectName(obj));
el.callbacks[isPicked ? 0 : 1]();
});
}, 'mousedown');



// whenClicked puzzle
function registerOnClick(objNames, cbDo, cbIfMissedDo) {
objNames = retrieveObjectNames(objNames) || [];
var objNamesFiltered = objNames.filter(function(name) {
return name;
});
_pGlob.objClickCallbacks.push({
objNames: objNamesFiltered,
callbacks: [cbDo, cbIfMissedDo]
});
// ssao puzzle
function ssao(radius, aoClamp, lumInfluence) {
appInstance.enablePostprocessing([{
type: 'ssao',
radius: radius,
aoClamp: aoClamp,
lumInfluence: lumInfluence
}]);
}


@@ -654,6 +482,88 @@ function getJSFunction(funcName) {



// utility function used by the whenClicked, whenHovered and whenDraggedOver puzzles
function initObjectPicking(callback, eventType, mouseDownUseTouchStart) {

var elem = appInstance.container;
elem.addEventListener(eventType, pickListener);
if (eventType == "mousedown") {
var touchEventName = mouseDownUseTouchStart ? "touchstart" : "touchend";
elem.addEventListener(touchEventName, pickListener);
}

var raycaster = new v3d.Raycaster();
function pickListener(event) {
event.preventDefault();

var xNorm = 0, yNorm = 0;
if (event instanceof MouseEvent) {
xNorm = event.offsetX / elem.clientWidth;
yNorm = event.offsetY / elem.clientHeight;
} else if (event instanceof TouchEvent) {
var rect = elem.getBoundingClientRect();
xNorm = (event.changedTouches[0].clientX - rect.left) / rect.width;
yNorm = (event.changedTouches[0].clientY - rect.top) / rect.height;
}

_pGlob.screenCoords.x = xNorm * 2 - 1;
_pGlob.screenCoords.y = -yNorm * 2 + 1;
raycaster.setFromCamera(_pGlob.screenCoords, appInstance.camera);
var objList = [];
appInstance.scene.traverse(function(obj){objList.push(obj);});
var intersects = raycaster.intersectObjects(objList);
if (intersects.length > 0) {
var obj = intersects[0].object;
callback(obj, event);
} else {
callback(null, event);
}
}
}

// utility function used by the whenDraggedOver puzzles
function fireObjectPickingCallbacks(objName, source, index, cbParam) {
for (var i = 0; i < source.length; i++) {
var cb = source[i];
if (objectsIncludeObj([cb[0]], objName)) {
cb[index](cbParam);
}
}
}

function objectsIncludeObj(objNames, testedObjName) {
if (!testedObjName) return false;

for (var i = 0; i < objNames.length; i++) {
if (testedObjName == objNames[i]) {
return true;
} else {
// also check children which are auto-generated for multi-material objects
var obj = getObjectByName(objNames[i]);
if (obj && obj.type == "Group") {
for (var j = 0; j < obj.children.length; j++) {
if (testedObjName == obj.children[j].name) {
return true;
}
}
}
}
}
return false;
}

// utility function used by the whenClicked, whenHovered and whenDraggedOver puzzles
function getPickedObjectName(obj) {
// auto-generated from a multi-material object, use parent name instead
if (obj.isMesh && obj.isMaterialGeneratedMesh && obj.parent) {
return obj.parent.name;
} else {
return obj.name;
}
}



function eventGetOffsetCoords(e, touchId, dest) {
if (e instanceof MouseEvent) {
dest.set(e.offsetX, e.offsetY);
@@ -824,6 +734,74 @@ function registerOnDrag(objNames, callback_start, callback_move, callback_drop,



// getObjectMaterial puzzle
function getObjectMaterial(objNames) {
objNames = retrieveObjectNames(objNames);
if (!objNames)
return '';
for (var i = 0; i < objNames.length; i++) {
var objName = objNames[i]
if (!objName)
continue;
var obj = getObjectByName(objName);
if (!obj)
continue;
if (obj.material && typeof obj.material.name == "string")
return obj.material.name;
}
return '';
}



// assignMaterial puzzle
function assignMat(objNames, matName) {
objNames = retrieveObjectNames(objNames);
if (!objNames || !matName)
return;
var mat = v3d.SceneUtils.getMaterialByName(appInstance, matName);
if (!mat)
return;
for (var i = 0; i < objNames.length; i++) {
var objName = objNames[i];
if (!objName)
continue;
var obj = getObjectByName(objName);
if (obj)
obj.material = mat;
}
}



// whenClicked puzzle
initObjectPicking(function(obj) {

// save the object for the pickedObject block
_pGlob.pickedObject = obj ? getPickedObjectName(obj) : '';

_pGlob.objClickCallbacks.forEach(function(el) {
var isPicked = obj && objectsIncludeObj(el.objNames, getPickedObjectName(obj));
el.callbacks[isPicked ? 0 : 1]();
});
}, 'mousedown');



// whenClicked puzzle
function registerOnClick(objNames, cbDo, cbIfMissedDo) {
objNames = retrieveObjectNames(objNames) || [];
var objNamesFiltered = objNames.filter(function(name) {
return name;
});
_pGlob.objClickCallbacks.push({
objNames: objNamesFiltered,
callbacks: [cbDo, cbIfMissedDo]
});
}



function matGetColors(matName) {

var mat = v3d.SceneUtils.getMaterialByName(appInstance, matName);
@@ -869,35 +847,15 @@ function setMaterialColor(matName, colName, r, g, b) {

function setRGB(r, g, b) {
setMaterialColor("transparent", "Principled BSDF Color", r, g, b);
r_ = r;
g_ = g;
b_ = b;
printStates();
}
appInstance.ExternalInterface["setRGB"] = setRGB;



// bloom puzzle
function bloom(threshold, strength, radius) {
appInstance.enablePostprocessing([{
type: 'bloom',
threshold: threshold,
strength: strength,
radius: radius
}]);
}



// ssao puzzle
function ssao(radius, aoClamp, lumInfluence) {
appInstance.enablePostprocessing([{
type: 'ssao',
radius: radius,
aoClamp: aoClamp,
lumInfluence: lumInfluence
}]);
}



// getEventProperty puzzle
function getEventProperty(prop, event) {
if (typeof event != "undefined") {
@@ -963,19 +921,31 @@ function eventHTMLElem(eventType, ids, isParent, callback) {



// toFixedPoint puzzle
function toNumber(num, prec) {
prec = Math.pow(10, prec);
return Math.round(num * prec)/prec;
}


/**
* Describe this function...
*/
function printStates() {
console.log(['Bit [',bitState,'] Qubit: [',toNumber(r_, 3),'] [',toNumber(g_, 3),'] [',toNumber(b_, 3),']'].join(''));
}


distZ = getObjTransform("qubit", "position", "y") - getObjTransform("qubit_controller", "position", "y");
distY = getObjTransform("qubit", "position", "z") - getObjTransform("qubit_controller", "position", "z");
distX = getObjTransform("qubit", "position", "x") - getObjTransform("qubit_controller", "position", "x");
maxDist = 2;
maxDist = 2.3;
stepY = 0.1;

registerOnClick("bit", function() {
if (getObjectMaterial("bit") == "white") {
assignMat("bit", "black");
} else {
assignMat("bit", "white");
}
}, function() {});
bitState = 0;
r_ = 0;
g_ = 0;
b_ = 0;
ssao(1, 0.01, 0.3);

registerOnDrag(["GROUP", "qubit_grp"], function() {
dragging = true;
@@ -987,40 +957,49 @@ registerOnDrag(["GROUP", "qubit_grp"], function() {
distX = getObjTransform("qubit", "position", "x") - getObjTransform("qubit_controller", "position", "x");
while (getDistanceBetweenObjects("qubit_controller", "qubit") > maxDist) {
inboundStepper = (typeof inboundStepper == 'number' ? inboundStepper : 0) + 1;
applyObjLocalTransform("qubit_controller", "position", (distX / 50) * inboundStepper, 0, (distZ / 50) * inboundStepper);
applyObjLocalTransform("qubit_controller", "position", distX / 200, 0, distZ / 100);
}
hue = 0;
distZ = getObjTransform("qubit", "position", "y") - getObjTransform("qubit_controller", "position", "y");
distX = getObjTransform("qubit", "position", "x") - getObjTransform("qubit_controller", "position", "x");
hue = Math.atan(Math.abs(distY / distX)) / Math.PI * 180;
sat = Math.sqrt(distX * distX + distY * distY) / maxDist;
value = ((distZ - maxDist) / (2 * maxDist)) * -1;
getJSFunction('HSVtoRGB')(hue, sat, value);
getJSFunction('HSVtoRGB')(hue / 180, sat, value);
},
function() {
dragging = false;
}, "x7;j`9Tr6$fIW]tXfLwm");

bloom(0.5, 0.2, 0.15);
ssao(2, 0.25, 0.7);
registerOnClick("bit", function() {
if (getObjectMaterial("bit") == "white") {
assignMat("bit", "black");
bitState = 0;
} else {
assignMat("bit", "white");
bitState = 1;
}
printStates();
}, function() {});

eventHTMLElem('wheel', ["DOCUMENT"], false, function(event) {
if (dragging == true) {
if (getEventProperty('deltaY', event) < 0) {
applyObjLocalTransform("qubit_controller", "position", 0, stepY, 0);
if (getDistanceBetweenObjects("qubit_controller", "qubit") >= maxDist) {
applyObjLocalTransform("qubit_controller", "position", 0, stepY * -1, 0);
}
} else if (getEventProperty('deltaY', event) > 0) {
if (getEventProperty('deltaY', event) < 0) {
applyObjLocalTransform("qubit_controller", "position", 0, stepY, 0);
if (getDistanceBetweenObjects("qubit_controller", "qubit") >= maxDist) {
applyObjLocalTransform("qubit_controller", "position", 0, stepY * -1, 0);
if (getDistanceBetweenObjects("qubit_controller", "qubit") >= maxDist) {
applyObjLocalTransform("qubit_controller", "position", 0, stepY, 0);
}
}
distY = getObjTransform("qubit", "position", "z") - getObjTransform("qubit_controller", "position", "z");
sat = Math.sqrt(distX * distX + distY * distY) / maxDist;
} else if (getEventProperty('deltaY', event) > 0) {
applyObjLocalTransform("qubit_controller", "position", 0, stepY * -1, 0);
if (getDistanceBetweenObjects("qubit_controller", "qubit") >= maxDist) {
applyObjLocalTransform("qubit_controller", "position", 0, stepY, 0);
}
}
distY = getObjTransform("qubit", "position", "z") - getObjTransform("qubit_controller", "position", "z");
hue = Math.atan(Math.abs(distY / distX)) / Math.PI * 180;
sat = Math.sqrt(distX * distX + distY * distY) / maxDist;
value = ((distZ - maxDist) / (2 * maxDist)) * -1;
getJSFunction('HSVtoRGB')(hue / 180, sat, value);
});

stepY;

} // end of PL.init function

if (window.v3dApp) {

+ 888
- 569
visual_logic.xml
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


Chargement…
Annuler
Enregistrer